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 > > --