I think you need to try, in your case, form.vars.file_newfilename to get the name of the file for field "file". In general, the new filename is in form.vars.<upload_field>_newfilename.
On Dec 5, 8:11 pm, "G. Clifford Williams" <g...@notadiscussion.com> wrote: > I have a project that requires users to upload transaction files. These files > are sqlite databases created with a desktop application. I'm trying to figure > out a way to ensure that the files uploaded by the various users are infact > valid transaction files from the proper version of the appropriate > application. > Since they are sqlite3 this _should_ be pretty easy with Python. > > I've crated an onvalidation function that can pass off parameters to another > function that checks for the appropriate fields in the transaction file. The > problem is that I can't seem to get the name of the uploaded file as a string > that I can pass along to transaction_test(). > > My question(s): > How can I access the name of the file (as stored on disk)? > Is the name of the file only accessible after the form has been accepted? > > model: > ... > db.define_table('transaction', > Field('property', 'string', > requires=IS_MATCH('^[\w.-]{2,32}$', > error_message = 'Invalid characters')), > Field('owner', db.auth_user, default=auth.user_id, > readable=False, writable=False,), > Field('visibility', 'boolean', label='List publicly', default=True), > Field('description', 'text'), > Field('created_on', 'datetime', readable=True, writable=False,), > Field('file', 'upload', uploadseparate=True), > ) > > controller: > ... > @auth.requires_login() > def create(): > mechanism = request.args(0) > if mechanism == 'upload': > message = "Upload your Transaction" > db.transaction.file.writable=True > db.transaction.file.readable=True > form = crud.create(db.transaction, onvalidation=upload_proc) > else: > message = "Create a new Transaction" > db.transaction.file.writable=False > db.transaction.file.readable=False > form = crud.create(db.transaction, onvalidation=scratch_proc) > return dict(message=T(message), form=form) > > def upload_proc(form): > form.vars.created_on = request.now #set time stamp properly > print form.vars.file.filename > if transaction_test(form.vars.file): > import os.popen2 > popen2(transaction_BIN+' rebuild '+ form.vars.file) > else: > form.errors.file = "File is not a valid transaction repo" > ... > > def transaction_test(transaction_file): > #simple test to see whether 'transaction_file' is actually a sqlite3 > database > #with some key tables required for transactions from (REDACTED) > import sqlite3 > dbobj = sqlite3.connect(str(transaction_file.upload)) > dbcursor = connection.cursor() > query_string = "SELECT name FROM sqlite_master WHERE type='table' AND " +\ > "name='receiver' OR name='bursar' OR name='clagent' " +\ > "name='lbroker' OR name='bbroker' OR name='loc';" > dbcursor.execute(query_string) > rows_returned = len(db.fetchall()) > ... > > Thanks in advance... > --Cliff