from python you can read the file content with form.vars.file.file.read()
On Dec 5, 8:16 pm, "mr.freeze" <nat...@freezable.com> wrote: > Onvalidation is called before the file is stored on disk. You can > define a custom_store method on the field to control how and where it > is stored. I don't know of a way to open the file with sqlite from the > cgi FieldStorage object form.vars.file. > > On Dec 5, 7: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 > >