def close(cls, dereg_details): """Close currently active request.""" closed = Status.get_status_id('Closed') if dereg_details.status == closed: return {'message': 'The request is already closed'} else: dereg_details.status = closed dereg_details.save_with_commit() return dereg_details
def close(cls, reg_details): """Close a currently active registration request.""" closed = Status.get_status_id('Closed') if reg_details.status == closed: return {'message': _('The request is already closed')} else: reg_details.status = closed reg_details.save_with_commit() return reg_details
def create(cls, args, tracking_id): try: """Add new request data to the table.""" reg_request = cls(args, tracking_id) status_id = Status.get_status_id('New Request') reg_request.status = status_id reg_request.save() return reg_request except Exception as e: app.logger.exception(e) db.session.rollback()
def __init__(self, args, tracking_id): """Constructor.""" status_id = Status.get_status_id('New Request') self.file = args.get('file') self.device_count = args.get('device_count') self.user_id = args.get('user_id') self.user_name = args.get('user_name') self.reason = args.get('reason') self.tracking_id = tracking_id self.status = status_id self.processing_status = status_id self.report_status = status_id
def __init__(self, args, tracking_id): """Constructor.""" status_id = Status.get_status_id('New Request') self.user_id = args.get('user_id') self.user_name = args.get('user_name') self.device_count = args.get('device_count') self.imei_per_device = args.get('imei_per_device') self.file = args.get('file') self.import_type = 'file' if self.file else 'webpage' self.imeis = '%s' % args.get('imeis') self.m_location = args.get('m_location') self.tracking_id = tracking_id self.status = status_id self.processing_status = status_id self.report_status = status_id
def post(dereg_id): """POST method handler, restarts processing of a request.""" if not dereg_id or not dereg_id.isdigit() or not DeRegDetails.exists( dereg_id): return Response(app.json_encoder.encode(DEREG_NOT_FOUND_MSG), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) try: dereg = DeRegDetails.get_by_id(dereg_id) # day_passed = (datetime.now() - dereg.updated_at) > timedelta(1) failed_status_id = Status.get_status_id('Failed') processing_failed = dereg.processing_status in [failed_status_id] report_failed = dereg.report_status in [failed_status_id] # report_timeout = dereg.report_status == Status.get_status_id('Processing') and day_passed processing_required = processing_failed or report_failed if processing_required: # pragma: no cover dereg_devices = DeRegDevice.get_devices_by_dereg_id(dereg.id) dereg_devices_data = DeRegDeviceSchema().dump(dereg_devices, many=True).data dereg_devices_ids = list( map(lambda x: x['id'], dereg_devices_data)) args = {'devices': dereg_devices_data} imei_tac_map = Utilities.extract_imeis_tac_map(args, dereg) imeis_list = Utilities.extract_imeis(imei_tac_map) created = DeRegDevice.bulk_create(args, dereg) device_id_tac_map = Utilities.get_id_tac_map(created) DeRegDevice.bulk_insert_imeis(device_id_tac_map, imei_tac_map, dereg_devices_ids, imeis_list, dereg) response = {'message': 'Request performed successfully.'} else: response = app.json_encoder.encode( {'message': _('This request cannot be processed')}) 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': _('failed to restart process')} return Response(app.json_encoder.encode(data), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON'))
def post(reg_id): """POST method handler, restarts processing of a request.""" 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")) try: reg_details = RegDetails.get_by_id(reg_id) # day_passed = (datetime.now() - reg_details.updated_at) > timedelta(1) failed_status_id = Status.get_status_id('Failed') processing_failed = reg_details.processing_status in [ failed_status_id ] report_failed = reg_details.report_status in [failed_status_id] # report_timeout = reg_details.report_status == Status.get_status_id('Processing') and day_passed processing_required = processing_failed or report_failed if processing_required: # pragma: no cover reg_device = RegDevice.get_device_by_registration_id( reg_details.id) Device.create(reg_details, reg_device.id) response = {'message': 'Request performed successfully.'} else: response = app.json_encoder.encode( {'message': _('This request cannot be processed')}) 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': _('failed to restart process')} return Response(app.json_encoder.encode(data), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON'))
def update(cls, args, dereg_details, file): """Update current request details.""" try: status = Status.get_status_type(dereg_details.status) processing_required = True if file else False if cls.is_update_allowed(status): if 'device_count' in args: dereg_details.device_count = args.get('device_count') if 'file' in args: dereg_details.file = args.get('file') if 'reason' in args: dereg_details.reason = args.get('reason') if processing_required: new_status_id = Status.get_status_id('New Request') dereg_details.processing_status = new_status_id dereg_details.report_status = new_status_id dereg_details.summary = None dereg_details.report = None # dereg_details.status = cls.get_update_status(status) or dereg_details.status dereg_details.save_with_commit() return dereg_details except Exception: raise Exception
def get_update_status(cls, status): """Return statue of the request.""" if status in ['Information Requested']: return Status.get_status_id('In Review') else: return None
def get_update_status(cls, status): """Get updated status of request.""" if status in ['Pending Review', 'Information Requested']: return Status.get_status_id('Pending Review') else: return None
def update_report_status(self, status): """Updates report status of the requests.""" self.report_status = Status.get_status_id(status) self.save()
def update_status(self, status): """Update current status of the request.""" self.status = Status.get_status_id(status) self.save()
def update_statuses(self, status): """Update reporting and processing status.""" status_id = Status.get_status_id(status) self.processing_status = status_id self.report_status = status_id self.save_with_commit()
def update_processing_status(self, status): """Updates processing status of the requests.""" self.processing_status = Status.get_status_id(status) self.save()
def put(): """PUT method handler, updates devices of the request.""" dereg_id = request.form.to_dict().get('dereg_id', None) if not dereg_id or not dereg_id.isdigit() or not DeRegDetails.exists( dereg_id): return Response(app.json_encoder.encode(DEREG_NOT_FOUND_MSG), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) try: schema_request = DeRegRequestUpdateSchema() device_schema = DeRegDeviceSchema() dereg = DeRegDetails.get_by_id(dereg_id) args = request.form.to_dict() args = DeRegDevice.curate_args(args, dereg) validation_errors = schema_request.validate(args) if validation_errors: return Response(app.json_encoder.encode(validation_errors), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) imei_tac_map = Utilities.extract_imeis_tac_map(args, dereg) imeis_list = Utilities.extract_imeis(imei_tac_map) not_registered_imeis = Utilities.get_not_registered_imeis( imeis_list) if not_registered_imeis: error = {'not_registered_imeis': not_registered_imeis} return Response(json.dumps(error), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: # day_passed = (datetime.now() - dereg.updated_at) > timedelta(1) processing_failed = dereg.processing_status in [ Status.get_status_id('Failed'), Status.get_status_id('New Request') ] report_failed = dereg.report_status == Status.get_status_id( 'Failed') # report_timeout = dereg.report_status == Status.get_status_id('Processing') and day_passed processing_required = processing_failed or report_failed if processing_required: old_devices = list(map(lambda x: x.id, dereg.devices)) created = DeRegDevice.bulk_create(args, dereg) device_id_tac_map = Utilities.get_id_tac_map(created) devices = device_schema.dump(created, many=True) db.session.commit() DeRegDevice.bulk_insert_imeis(device_id_tac_map, imei_tac_map, old_devices, imeis_list, dereg) response = {'devices': devices.data, 'dreg_id': dereg.id} else: response = {'devices': [], 'dreg_id': dereg.id} return Response(json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) except Exception as e: # pragma: no cover app.logger.exception(e) error = { 'message': [_('Failed to retrieve response, please try later')] } return Response(app.json_encoder.encode(error), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON')) finally: db.session.close()
def put(): """PUT method handler, updates existing de registration request. """ dereg_id = request.form.to_dict().get('dereg_id', None) try: schema = DeRegDetailsUpdateSchema() if dereg_id and dereg_id.isdigit() and DeRegDetails.exists( dereg_id): dreg_details = DeRegDetails.get_by_id(dereg_id) else: return Response(app.json_encoder.encode(DEREG_NOT_FOUND_MSG), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) args = DeRegDetails.curate_args(request) file = request.files.get('file') tracking_id = dreg_details.tracking_id if dreg_details: args.update({ 'status': dreg_details.status, 'processing_status': dreg_details.processing_status, 'report_status': dreg_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 = DeRegDetails.close(dreg_details) if isinstance(response, dict): return Response( app.json_encoder.encode(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: log = EsLog.new_request_serialize(response, "Close De-Registration", method="Put") EsLog.insert_log(log) response = schema.dump(response, many=False).data return Response( json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) if file: response = Utilities.store_file(file, tracking_id) imeis_list = Utilities.extract_imeis(response) if response: return Response( json.dumps(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) filename = file.filename elif dreg_details.status == Status.get_status_id('New Request'): filename = dreg_details.file args.update({'device_count': dreg_details.device_count}) else: filename = None if filename: response = Utilities.process_de_reg_file( filename, tracking_id, args) imeis_list = Utilities.extract_imeis(response) errored = 'device_count' in response or 'invalid_imeis' in response or \ 'duplicate_imeis' in response or 'invalid_format' in response if not errored: gsma_response = Utilities.get_device_details_by_tac( response) response = DeRegDetails.update(args, dreg_details, file=True) response = schema.dump(response, many=False).data log = EsLog.new_request_serialize(response, "DeRegistration", imeis=imeis_list, dereg=True, method="Put") EsLog.insert_log(log) response = {'request': response, 'devices': gsma_response} return Response( json.dumps(response), status=CODES.get("OK"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: return Response( app.json_encoder.encode(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) else: response = DeRegDetails.update(args, dreg_details, file=False) response = schema.dump(response, many=False).data log = EsLog.new_request_serialize(response, "DeRegistration", dereg=True, method="Put") EsLog.insert_log(log) 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 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 put(): """PUT method handler, updates documents.""" 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")) try: schema = RegistrationDocumentsUpdateSchema() time = datetime.now().strftime('%Y%m%d%H%M%S') args = request.form.to_dict() args = Utilities.update_args_with_file(request.files, args) reg_details = RegDetails.get_by_id(reg_id) if reg_details: args.update({ 'reg_details_id': reg_details.id, 'status': reg_details.status }) else: args.update({'reg_details_id': ''}) 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")) tracking_id = reg_details.tracking_id updated = RegDocuments.bulk_update(request.files, reg_details, time) response = Utilities.store_files(request.files, tracking_id, time) if response: return Response(json.dumps(response), status=CODES.get("UNPROCESSABLE_ENTITY"), mimetype=MIME_TYPES.get("APPLICATION_JSON")) if reg_details.status == Status.get_status_id( 'Information Requested'): reg_details.update_status('In Review') message = 'The request {id} has been updated.'.format( id=reg_details.id) notification = Notification(reg_details.reviewer_id, reg_details.id, 'registration_request', reg_details.status, message) notification.add() else: reg_details.update_status('Pending Review') response = schema.dump(updated, many=True).data db.session.commit() 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': _('request document updation failed, please try again later.') } return Response(app.json_encoder.encode(data), status=CODES.get('INTERNAL_SERVER_ERROR'), mimetype=MIME_TYPES.get('APPLICATION_JSON')) finally: db.session.close()