Hi Anthony,
I've tried the solution you've posted below:
Field('file', 'upload',
custom_store=lambda file, filename, path: store_file(file, filename,path
, db.table.new_filename),
...)
But when my additional parameter gets sent to store_file it sends
'table.new_filename'
def store_file(file, filename=None, path=None, new_filename=None):
path = "applications/init/uploads/%s" % (new_filename)
if not os.path.exists(path):
os.makedirs(path)
pathfilename = os.path.join(path, filename)
dest_file = open(pathfilename, 'wb')
try:
shutil.copyfileobj(file, dest_file)
finally:
dest_file.close()
return filename
Results in a new folder in uploads called 'table.new_filename'
Cheers
-James
On Wednesday, August 8, 2012 11:51:44 PM UTC+12, Anthony wrote:
>
> On Wednesday, August 8, 2012 7:09:37 AM UTC-4, Jim Gregory wrote:
>>
>> Can custom_store and custom_retrieve take parameters when they are called
>> using Field, e.g.:
>> db.define_table('table',
>> Field('file', 'upload', custom_store=store_file(file,
>> db.table.new_filename),
>> custom_retrieve=retrieve_file(db.table.new_filename))?
>> Field('new_filename','string')
>> )
>>
>
> These attributes have to be callables, so you can't call them yourself. To
> pass additional custom arguments to a callable, just turn it into a lambda
> that takes the standard arguments and pass the additional arguments to your
> function within the lambda:
>
> Field('file', 'upload',
> custom_store=lambda file, filename, path: store_file(file, filename,path
> , db.table.new_filename),
> ...)
>
> When web2py calls the custom_store callable, it will pass three arguments
> (file, filename, and path), so your lambda must take three arguments.
> Within the lambda, you can then do whatever you want. You can pass any or
> all of the standard three arguments to your custom function, and you can
> pass additional arguments. In the example above, I passed the three
> standard arguments followed by a fourth custom argument, though it doesn't
> have to look like that (presumably you will at least want to pass the file
> as an argument).
>
> custom_retrieve takes two standard arguments, "name" and "path".
>
> Anthony
>
>
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.