"""Label Audit Handlers""" from flask import jsonify from flask import request from labelaudit import api from labelaudit.logic import audit_persistence from labelaudit.logic import start_audit from labelaudit import presentation @api.app.route('/hello/') def hello_world(): return 'Hello World!', 200 @api.app.route('/label_audit', methods=['POST']) def start_label_audit(): """ Start a Label Audit This endpoint should be used to start a new label audit prep Get params: vendor_id (int): vendor to perform label audit prep user_id (int): OA user to perform label audit prep on behalf of Return: json response """ # Parse and validate params vendor_id = request.args.get('vendor_id') user_id = request.args.get('user_id') errors = {} if not vendor_id or not vendor_id.isdigit(): errors['vendor_id'] = 'is required and must be an integer' if not user_id or not user_id.isdigit(): errors['user_id'] = 'is required and must be an integer' if errors: return fail(errors, 400) vendor_id = int(vendor_id) user_id = int(user_id) result = start_audit.start_label_audit(vendor_id, user_id) if result.success: return jsonify(presentation.label_audit(result.message)), 201 else: return fail(result.errors, result.status) @api.app.route('/label_audit/', methods=['GET']) def get_label_audit(audit_id): """ Get a Label Audit This endpoint should be used to get a label audit to view the details Return: json response """ # Parse and validate params result = audit_persistence.fetch(audit_id) if result.success: return jsonify(presentation.label_audit(result.message)), 200 else: return fail(result.errors, result.status) @api.app.route('/label_audit', methods=['GET']) def index_label_audits(): """ Fetch a list of label audits Return: JSON response. Example: { "audits": [ { "audit_status": "requested", "created_timestamp": "2015-06-03 13:50:11", "initiated_by_id": 1092, "report_location": "test", "updated_timestamp": "2015-06-03 13:58:01", "vendor_id": 7123, "youtube_audit_id": 2 }, { "audit_status": "requested", "created_timestamp": "2015-06-04 16:22:34", "initiated_by_id": 1092, "report_location": null, "updated_timestamp": null, "vendor_id": 7123, "youtube_audit_id": 6 } ], "total_records": 2 } """ vendor_id = request.args.get('vendor_id') limit = request.args.get('limit') offset = request.args.get('offset') audit_status = request.args.get('audit_status') sort_by = request.args.get('sort_by') sort_order = request.args.get('sort_order') result = audit_persistence.fetch_all( vendorId=vendor_id, limit=limit, offset=offset, auditStatus=audit_status, sortBy=sort_by, sortOrder=sort_order) if result.success: return jsonify(presentation.label_audits(result.message)), 200 else: return fail(result.errors, result.status) def fail(errors, status): return jsonify(presentation.failure(errors)), status