Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Cherokee: commits

[4220] CTK/trunk: Adds a new parameter to CTK.Uploader() so it can be also used with a

 

 

Cherokee commits RSS feed   Index | Next | Previous | View Threaded


cherokee at cherokee-project

Feb 9, 2010, 7:03 AM

Post #1 of 1 (96 views)
Permalink
[4220] CTK/trunk: Adds a new parameter to CTK.Uploader() so it can be also used with a

Revision: 4220
http://svn.cherokee-project.com/changeset/4220
Author: alo
Date: 2010-02-09 16:03:02 +0100 (Tue, 09 Feb 2010)

Log Message:
-----------
Adds a new parameter to CTK.Uploader() so it can be also used with a
temporal file as target.

Modified Paths:
--------------
CTK/trunk/CTK/Uploader.py
CTK/trunk/tests/test5.py

Modified: CTK/trunk/CTK/Uploader.py
===================================================================
--- CTK/trunk/CTK/Uploader.py 2010-02-08 18:09:33 UTC (rev 4219)
+++ CTK/trunk/CTK/Uploader.py 2010-02-09 15:03:02 UTC (rev 4220)
@@ -22,6 +22,7 @@

import os
import cgi
+import tempfile

from Server import publish, get_scgi
from Widget import Widget, RenderResponse
@@ -79,24 +80,47 @@
});
"""

-class MyFieldStorage(cgi.FieldStorage):
+# Field Storage classes
+#
+class FieldStorage_Direct(cgi.FieldStorage):
def make_file (self, binary=None):
- target_path = os.path.join (self.target_dir, self.filename)
- return open (target_path, 'w+b')
+ self.target_path = os.path.join (self.target_dir, self.filename)
+ return open (self.target_path, 'w+b')

+class FieldStorage_Temporal(cgi.FieldStorage):
+ def make_file (self, binary=None):
+ return self._file
+
+
+# Internal Proxy
+#
class UploadRequest:
- def __call__ (self, handler, target_dir, params):
+ def __call__ (self, handler, target_dir, params, direct):
scgi = get_scgi()

- # This obj writes the file right away. Beware: The
- # functionality is invoked from the constructor!
- MyFieldStorage.target_dir = target_dir
- form = MyFieldStorage (fp=scgi.rfile, environ=scgi.env, keep_blank_values=1)
+ # Beware: The functionality is invoked from the constructor!
+ if direct:
+ FieldStorage_Direct.target_dir = target_dir
+ form = FieldStorage_Direct (fp=scgi.rfile, environ=scgi.env, keep_blank_values=1)
+ return handler (form['file'].filename, target_dir,
+ form['file'].filename, params)

- return handler (form['file'].filename, target_dir, params)
+ # Upload to a temporal file
+ fd, target_path = tempfile.mkstemp (prefix='CTK_upload_', dir=target_dir)

+ FieldStorage_Temporal._file = os.fdopen(fd, 'w+b')
+ FieldStorage_Temporal._path = target_path
+
+ form = FieldStorage_Temporal (fp=scgi.rfile, environ=scgi.env, keep_blank_values=1)
+
+ return handler (form['file'].filename, target_dir,
+ FieldStorage_Temporal._path, params)
+
+
+# Uploader CTK widget
+#
class Uploader (Widget):
- def __init__ (self, props=None, params=None):
+ def __init__ (self, props=None, params=None, direct=True):
Widget.__init__ (self)
self._url_local = '/uploader_widget_%d' %(self.uniq_id)

@@ -111,7 +135,7 @@

# Register the uploader path
publish (self._url_local, UploadRequest,
- handler=handler, target_dir=target_dir, params=params)
+ handler=handler, target_dir=target_dir, params=params, direct=direct)

def Render (self):
props = {'id': self.id,

Modified: CTK/trunk/tests/test5.py
===================================================================
--- CTK/trunk/tests/test5.py 2010-02-08 18:09:33 UTC (rev 4219)
+++ CTK/trunk/tests/test5.py 2010-02-09 15:03:02 UTC (rev 4220)
@@ -3,18 +3,23 @@

UPLOAD_DIR = "/tmp"

-def ok (filename, target_dir, params):
+def ok (filename, target_dir, target_file, params):
txt = "<h1>It worked!</h1>"
- txt += "<pre>%s</pre>" %(os.popen("ls -l " + os.path.join(target_dir, filename)).read())
- txt += "Params: " + str(params)
+ txt += "<pre>%s</pre>" %(os.popen("ls -l " + os.path.join(target_dir, target_file)).read())
+ txt += "<p>Params: %s</p>" %(str(params))
+ txt += "<p>Filename: %s</p>" %(filename)
return txt

class default:
def __init__ (self):
self.page = CTK.Page ()
+
+ self.page += CTK.RawHTML ("<h1>Direct Upload with params</h1>")
self.page += CTK.Uploader({'handler': ok, 'target_dir': UPLOAD_DIR}, {'var':'foo'})
- self.page += CTK.Uploader({'handler': ok, 'target_dir': UPLOAD_DIR})

+ self.page += CTK.RawHTML ("<h1>Temporal Upload without params</h1>")
+ self.page += CTK.Uploader({'handler': ok, 'target_dir': UPLOAD_DIR}, direct=False)
+
def __call__ (self):
return self.page.Render()

Cherokee commits RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.