def wrapper(*args, **kwargs): request = flask.request status = request.args.get('status', '0') status = int(status) if status.isdigit() else 0 status = OrderStatus( status ) if OrderStatus.WAITING.value <= status <= OrderStatus.CLOSED.value else None handler = request.args.get('handler') handler = handler if handler and isinstance(handler, str) else None source = request.args.get('source', '') source = int(source) if source.isdigit() else None pagenum = request.args.get('pagenum', '1') pagenum = int(pagenum) if pagenum.isdigit() else 1 pagenum = max(1, pagenum) pagesize = request.args.get('pagesize', '20') pagesize = int(pagesize) if pagesize.isdigit() else 20 pagesize = min(50, max(20, pagesize)) kwargs['status'] = status kwargs['handler'] = handler kwargs['source'] = source kwargs['pagenum'] = pagenum kwargs['pagesize'] = pagesize return func(*args, **kwargs)
def upload_file(): if request.method == 'POST': if 'file' not in request.files: flash('No file part') return redirect(request.url) file_obj = request.files['file'] if file_obj.filename == '' or file_obj.filename.split( '.')[-1] != 'tsv': error = 'Invalid file!' return render_template('upload.html', error=error) if file_obj: filename = secure_filename(file_obj.filename) file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file_obj.save(file_path) with open(file_path) as order_data: reader = csv.reader(order_data, delimiter='\t') app.logger.info('Begin processing File') for row in reader: customer, product, order_status, previous_order = process_order( row) if not previous_order: insert_row(db.session, Customer(**customer), app.logger) db.session.commit() insert_row(db.session, Product(**product), app.logger) db.session.commit() insert_row(db.session, OrderStatus(**order_status), app.logger) db.session.commit() else: order = OrderStatus.query.filter_by( status='new', **previous_order).first() if order: order.status = 'canceled' order.updated_at = order_status['updated_at'] else: app.logger.warn( 'Unable to load row: {}'.format(order_status)) db.session.commit() return redirect(url_for('uploaded_file', filename=filename))
def default_order_status(self): return [ OrderStatus(status = 'P', description = 'Pendente'), OrderStatus(status = 'C', description = 'Cancelado'), OrderStatus(status = 'F', description = 'Finalizado') ]