def upload_file(request): if request.POST: upload_directory = request.registry.settings['upload_directory'] filename = request.POST['file'].filename file = request.POST['file'].file try: session = DBSession() stat_file = StatFile(file) (msg, tournament_id) = process(stat_file, session, get_file_number(filename)) stat_dir = os.path.join(upload_directory, stat_file.date.strftime('%Y-%m-%d') + ' ' + stat_file.type) if not os.path.exists(stat_dir): os.makedirs(stat_dir) save_as = os.path.join(stat_dir, filename) except Exception as err: transaction.abort() msg = 'Failed: ' + str(err) + traceback.format_exc() tournament_id = None failed_dir = os.path.join(upload_directory, 'failed') if not os.path.exists(failed_dir): os.makedirs(failed_dir) save_as = os.path.join(failed_dir, filename) with open(save_as.encode('ascii', 'ignore'), mode='w') as f: file.seek(0) shutil.copyfileobj(file, f) file.close() if tournament_id: session.add(Upload( tournament_id=tournament_id, filename=save_as, ipaddress=request.headers.get('X-Forwarded-For') or request.remote_addr)) session.flush() else: msg = 'Post me a file' return msg