A few notes for you: 1) put this in a python script - it's much cleaner. The code below would become context.objects.manage_addFile(id='', file=file, title='test') context.objects.manage_addProperty('keywords', keywords, 'text') 2) You are exactly right about your idea. Here's the trick. Look at $ZOPEDIR/lib/python/OFS/Image.py and find the function "manage_addFile". You see that in there it calls id, title = cookId(id, title, file) so, we need to see what cookId() does. Searching at the bottom of Image.py reveals this code: def cookId(id, title, file): if not id and hasattr(file,'filename'): filename=file.filename title=title or filename id=filename[max(filename.rfind('/'), filename.rfind('\\'), filename.rfind(':'), )+1:] return id, title So, we see that cookId reads the HTTP POST file object, and marshalls it's filename into a workable Id. You need to duplicate this functionality if you want to use manage_addFile with a blank id. I would setup an External Method like: from OFS.Image import cookId def findFileId(title, file): "All good methods have docstrings :)" return cookId('', title, file)[0] I think that will work (it might need some tweaking...) Then your python script becomes context.objects.manage_addFile(id='', file=file, title='test') fileId = context.externalMethodFromAboveCalledFindFileId('test', file) context.objects[fileId].manage_addProperty('keywords', keywords, 'text') I hope I didn't just do your homework for you ;-) Troy John Toews wrote:
Thank you, pointing out I could do this without a Zclass is going to save me time... The one thing I don't understand right now. The code below adds a property to the containing folder, not the object I just uploaded. How do I obtain the id so I can deal with that? (objects is the name of my folder, it is a level under the script itself)
<dtml-call expr="objects.manage_addFile(id='', file=file, title='test')"> <dtml-call expr="objects.manage_addProperty('keywords', keywords, 'text')">
I think the second one should be something like objects.UPLOADED_FILE_ID.manage_addProperty...
Thanks!
-----Original Message----- From: Paul Winkler [mailto:pw_lists@slinkp.com] Sent: Monday, May 19, 2003 11:46 AM To: zope@zope.org Subject: Re: [Zope] Upload files, set properties, search props
On Mon, May 19, 2003 at 02:57:46PM -0500, John Toews wrote:
Hello All,
I am (very) new to Zope and am trying to figure out how exactly to implement what I want. I have read most of the Zope book and it
doesn't
seem to go into the depths I want, but please feel free to point me to better manual(s). What I want to be able to do is:
- Present the user a form with to upload a file and, for now, a text
box
for keywords (I've done this already) - Save the file to a folder and set a property for the keywords (I can save to a folder with the generic File object [using foldername.manage_addFile], but how do I create & set the keyword property)
the details vary depending on whether you want 1 property per keyword, or 1 property for all keywords. but the basics can be gleaned from the online zope book: http://www.zope.org/Documentation/Books/ZopeBook/2_6Edition/ScriptingZop e.stx
read the section on "The Zope API". There are examples of adding and changing properties.
e.g. in the script that's the target of your form, do something like this to add a single property:
request = context.REQUEST my_folder.manage_addProperty('keywords', request.get('keywords'), 'text')
- Catalog the keywords property and be able to search it (Haven't even attempted yet)
no problem, just give youtr catalog a KeywordIndex with the name of your property.
I believe the "correct" way to do this would be a Zclass using the
File
base class and a property sheet.
not necessary, the above will work.
the only advantage of a custom Product (whether zclass or filesystem-based product) is that it can be made to support automatic cataloging so you don't have to periodically update the catalog.