[Grok-doc] [Blueprint doc-uploading-file] Handling file uploads with zope.app.file and zope.file
Steve Schmechel
steveschmechel at yahoo.com
Mon Mar 15 00:41:22 EDT 2010
Blueprint changed by Steve Schmechel:
Whiteboard changed:
+ 2010-03-14 Steve Schmechel
+
+ Added some working example code to the how to so that users can run the
+ code in an application and see it work.
+
UPDATE:
The blobstorage stuff seems to work now from the latest grokproject svn trunk.
However, the procedure is still confusing because it creates the
FileContainer container floating by itself without any clear reference
of how to make it work in an actual grokproject application. All
howto's should really start from a common point of having just run a new
grokproject and show how to modify the initial app.py file to
incorporate the information in the howto.
When trying to use the code as the top level container the add form
works but you can not view the files without getting a "The page that
you are trying to access is not available" error. It appears that the
FileContainer should exist below the top level container but how to link
it in is never shown.
--------------
Needs some clean-up. Especially, regarding the use of zope.file
etc/zope.conf.in needs to be modified so that you don't get:
Unsupported: Storing Blobs in <ZODB.FileStorage.FileStorage.FileStorage object at 0x457cc90> is not supported.
The <zodb> section should be changed as follows:
<zodb>
<blobstorage>
# Standard Filestorage
<filestorage>
path ${data:path}
</filestorage>
blob-dir ${buildout:directory}/parts/data/blobs
</blobstorage>
Some other observations:
- Nothing about how to traverse to a file list or upload form.
- Maybe include a basic template for listing files:
<html>
<head>
</head>
<body>
<h1>File List</h1>
<ul>
<li tal:repeat="key python:context.keys()">
<a tal:attributes="href python:view.url(context[key])" tal:content="python:key">File Name</a>
</li>
</ul>
<a href="upload">Upload a new file</a>
</body>
</html>
- The how-to should start from a grokproject-based project rather than a
floating class definition.
- Either make the FileContainer class the grok.application or demonstrate how to add it to a parent container including the required "Super" statement.
def __init__(self):
super(ParentContainer, self).__init__()
self['files'] = FileContainer()
- Explain where the name chooser should be defined in relation to the other code.
- It appears that the name chooser wants a return value when it is in the same module as the upload class.
- When the context is an add method in FileContainer's parent container the chooser needs a third parameter.
(I don't understand adapter registration enough to explain this, but it has tripped me up before.)
--
Handling file uploads with zope.app.file and zope.file
https://blueprints.launchpad.net/grok/+spec/doc-uploading-file
More information about the grok-doc
mailing list