def test_create_and_check_for_request_core(self): """ Request (CORE): Test the creation, query, and deletion of a Request """ properties = { 'scope': 'test_scope', 'name': 'test_name_%s' % str(uuid()), 'data_type': 'DATASET', 'granularity_type': 'FILE', 'granularity_level': 1, 'priority': 99, 'edge_id': None, 'status': 'NEW', 'request_meta': { 'taskid': 975, 'job_id': 864 }, 'processing_meta': None, 'errors': None, } request_id = add_request(**properties) # request = get_request(properties['scope'], properties['name'], request_metadata=properties['request_meta']) # assert_equal(request_id, request.request_id) request = get_request(request_id=request_id) assert_equal(request_id, request.request_id) json.dumps(request.to_dict()) assert_equal(request.scope, properties['scope']) assert_equal(request.name, properties['name']) assert_equal(str(request.data_type), properties['data_type']) assert_equal(str(request.granularity_type), properties['granularity_type']) assert_equal(request.granularity_level, properties['granularity_level']) assert_equal(request.priority, properties['priority']) assert_equal(request.edge_id, properties['edge_id']) assert_equal(str(request.status), properties['status']) assert_equal(str(request.request_meta['taskid']), str(properties['request_meta']['taskid'])) assert_equal(str(request.request_meta['job_id']), str(properties['request_meta']['job_id'])) # assert_equal(str(request.processing_meta), str(properties['processing_meta'])) assert_equal(request.errors, properties['errors']) request_id1 = add_request(**properties) delete_request(request_id1) update_request(request_id, parameters={'status': 'ERROR'}) request = get_request(request_id=request_id) assert_equal(str(request.status), 'ERROR') with assert_raises(exceptions.NoObject): get_request(request_id=999999) delete_request(request_id) with assert_raises(exceptions.NoObject): get_request(request_id=request_id)
def assign_remote_requests(self): if not self.head_client: return reqs = [] try: reqs = self.head_client.get_requests(edge_name=self.resource_name, status=str( RequestStatus.ASSIGNING)) except NoObject: pass except ESSException as error: self.logger.info( "Caught exception when get requests from the head service: %s" % str(error)) for req in reqs: coll = self.head_client.get_collection(req.scope, req.name) collection = { 'scope': coll.scope, 'name': coll.name, 'collection_type': coll.collection_type, 'coll_size': coll.coll_size, 'global_status': coll.global_status, 'total_files': coll.total_files, 'num_replicas': coll.num_replicas, 'coll_metadata': coll.coll_metadata } try: add_collection(**collection) except DuplicatedObject as error: self.logger.info("Collection is already registered: %s, %s" % (collection, error)) req.status = RequestStatus.ASSIGNED processing_meta = req.processing_meta processing_meta['original_request_id'] = req.request_id request = { 'scope': req.scope, 'name': req.name, 'data_type': req.data_type, 'granularity_type': req.granularity_type, 'granularity_level': req.granularity_level, 'priority': req.priority, 'edge_id': get_edge_id(self.resource_name), 'status': req.status, 'request_meta': req.request_meta, 'processing_meta': processing_meta, 'errors': req.errors } try: add_request(**request) except DuplicatedObject as error: self.logger.info("Request is already registered: %s, %s" % (request, error)) self.head_client.update_request(req.request_id, status=str(req.status))
def POST(self): """ Create Request. HTTP Success: 200 OK HTTP Error: 400 Bad request 500 Internal Error """ json_data = data() args = ['scope', 'name', 'data_type', 'status', 'granularity_type', 'granularity_level', 'priority', 'request_meta'] try: parameters = {} json_data = json.loads(json_data) for key, value in json_data.items(): if key in args: parameters[key] = value except ValueError: raise self.generate_http_response(HTTP_STATUS_CODE.BadRequest, exc_cls=exceptions.BadRequest.__name__, exc_msg='Cannot decode json parameter dictionary') try: request_id = add_request(**parameters) except exceptions.DuplicatedObject as error: raise self.generate_http_response(HTTP_STATUS_CODE.Conflict, exc_cls=error.__class__.__name__, exc_msg=error) except exceptions.ESSException as error: raise self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=error.__class__.__name__, exc_msg=error) except Exception as error: print(error) print(format_exc()) raise self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=exceptions.CoreException.__name__, exc_msg=error) raise self.generate_http_response(HTTP_STATUS_CODE.OK, data={'request_id': request_id})