Thanks, that is helpful.  But the path does not seem to be passed in the 
custom retrieve.
Field('file','upload',
uploadir='/path/to/folder', custom_store=lambda 
file,filename,path:store_file(file,filename,path), 
custom_retrieve=retrieve_file

On Wednesday, August 8, 2012 6:51:44 AM UTC-5, 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
>
>

-- 



Reply via email to