def post(): """POST method handler, creates registration requests.""" tracking_id = uuid.uuid4() try: args = RegDetails.curate_args(request) schema = RegistrationDetailsSchema() file = request.files.get('file') validation_errors = schema.validate(args) if validation_errors: return Response(app.json_encoder.encode(validation_errors), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) if file: file_name = file.filename.split("/")[-1] response = Utilities.store_file(file, tracking_id) if response: return Response( json.dumps(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) response = Utilities.process_reg_file(file_name, tracking_id, args) if isinstance(response, list): response = RegDetails.create(args, tracking_id) else: return Response( app.json_encoder.encode(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: Utilities.create_directory(tracking_id) response = RegDetails.create(args, tracking_id) db.session.commit() response = schema.dump(response, many=False).data return Response(json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) except Exception as e: # pragma: no cover db.session.rollback() app.logger.exception(e) Utilities.remove_directory(tracking_id) app.logger.exception(e) data = { 'message': [ _('Registration request failed, check upload path or database connection' ) ] } return Response(app.json_encoder.encode(data), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON')) finally: db.session.close()
def async_bulk_create(cls, reg_details, reg_device_id, app): # pragma: no cover """Create devices async.""" with app.app_context(): from app import db try: filename = reg_details.file tracking_id = reg_details.tracking_id args = { 'imei_per_device': reg_details.imei_per_device, 'device_count': reg_details.device_count } response = Utilities.process_reg_file(filename, tracking_id, args) imeis = [] for device_imeis in response: tac = Utilities.get_imei_tac(device_imeis[0]) device = cls(tac, reg_details.id, reg_device_id) db.session.add(device) db.session.flush() imeis = imeis + device_imeis for imei in device_imeis: imei_device = ImeiDevice(imei, device.id) db.session.add(imei_device) imei_object = ApprovedImeis.query.filter_by( imei=imei[:14]).first() if not imei_object: approved_imei = ApprovedImeis( imei[:14], reg_details.id, 'pending', 'add') db.session.add(approved_imei) elif imei_object and imei_object.status == 'removed': imei_object.status = 'pending' imei_object.removed = False imei_object.request_id = reg_details.id db.session.add(imei_object) db.session.commit() reg_details.update_processing_status('Processed') db.session.commit() task_id = Utilities.generate_summary(imeis, reg_details.tracking_id) app.logger.info( 'task with task_id: {0} initiated'.format(task_id)) if not task_id: reg_details.update_report_status('Failed') app.logger.info( 'task with task_id: {0} failed'.format(task_id)) db.session.commit() else: Utilities.pool_summary_request(task_id, reg_details, app) except Exception as e: app.logger.exception(e) db.session.rollback() reg_details.update_report_status('Failed') reg_details.update_processing_status('Failed') db.session.commit() raise e
def put(): """PUT method handler, updates registration requests.""" reg_id = request.form.to_dict().get('reg_id', None) if not reg_id or not reg_id.isdigit() or not RegDetails.exists(reg_id): return Response(app.json_encoder.encode(REG_NOT_FOUND_MSG), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) args = RegDetails.curate_args(request) schema = RegistrationDetailsUpdateSchema() file = request.files.get('file') reg_details = RegDetails.get_by_id(reg_id) try: tracking_id = reg_details.tracking_id if reg_details: args.update({ 'status': reg_details.status, 'reg_id': reg_details.id, 'processing_status': reg_details.processing_status, 'report_status': reg_details.report_status }) validation_errors = schema.validate(args) if validation_errors: return Response(app.json_encoder.encode(validation_errors), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) if args.get('close_request', None) == 'True': response = RegDetails.close(reg_details) if isinstance(response, dict): return Response( app.json_encoder.encode(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: response = schema.dump(response, many=False).data return Response( json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) if file: Utilities.remove_file(reg_details.file, tracking_id) response = Utilities.store_file(file, tracking_id) if response: return Response( json.dumps(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) response = Utilities.process_reg_file(file.filename, tracking_id, args) if isinstance(response, list): response = RegDetails.update(args, reg_details, True) else: return Response( app.json_encoder.encode(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: response = RegDetails.update(args, reg_details, False) db.session.commit() response = schema.dump(response, many=False).data return Response(json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) except Exception as e: # pragma: no cover db.session.rollback() app.logger.exception(e) data = { 'message': [ _('Registration update request failed, check upload path or database connection' ) ] } return Response(app.json_encoder.encode(data), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON')) finally: db.session.close()