def post(self): """ List the DIDs associated to a list of replicas. .. :quickref: ReplicasDIDs; List DIDs for replicas. :<json string pfns: The list of PFNs. :<json string rse: The RSE name. :resheader Content-Type: application/x-json-string :status 200: OK. :status 400: Cannot decode json parameter list. :status 500: Internal Error. :returns: A list of dictionaries containing the mapping PFNs to DIDs. """ json_data = request.data rse, pfns = None, [] rse = None try: params = parse_response(json_data) if 'pfns' in params: pfns = params['pfns'] if 'rse' in params: rse = params['rse'] except ValueError: return generate_http_error_flask( 400, 'ValueError', 'Cannot decode json parameter list') try: data = "" for pfn in get_did_from_pfns(pfns, rse): data += dumps(pfn) + '\n' return Response(data, content_type='application/x-json-string') except RucioException, e: return generate_http_error_flask(500, e.__class__.__name__, e.args[0][0])
def POST(self): """ List the DIDs associated to a list of replicas. HTTP Success: 200 OK HTTP Error: 401 Unauthorized 500 InternalError :returns: A list of dictionaries containing the mapping PFNs to DIDs. """ json_data = data() rse, pfns = None, [] header('Content-Type', 'application/x-json-stream') try: params = parse_response(json_data) if 'pfns' in params: pfns = params['pfns'] if 'rse' in params: rse = params['rse'] except ValueError: raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list') try: for pfn in get_did_from_pfns(pfns, rse): yield dumps(pfn) + '\n' except RucioException, e: raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
def POST(self): """ List the DIDs associated to a list of replicas. HTTP Success: 200 OK HTTP Error: 401 Unauthorized 500 InternalError :returns: A list of dictionaries containing the mAPPing PFNs to DIDs. """ json_data = data() rse, pfns = None, [] header('Content-Type', 'application/x-json-stream') rse = None try: params = parse_response(json_data) if 'pfns' in params: pfns = params['pfns'] if 'rse' in params: rse = params['rse'] except ValueError: raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list') try: for pfn in get_did_from_pfns(pfns, rse): yield dumps(pfn) + '\n' except RucioException, e: raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
def test_api_replica(self): """ REPLICA (API): Test external representation of replicas """ did = 'ext_' + str(generate_uuid()) pfn = 'srm://mock2.com:8443/srm/managerv2?SFN=/rucio/tmpdisk/rucio_tests/%s/%s' % (self.scope_name, generate_uuid()) add_replicas(self.rse2_name, files=[{'scope': self.scope_name, 'name': did, 'bytes': 100, 'pfn': pfn}], issuer='root', **self.vo) add_did(self.scope_name, 'ext_parent_2', 'dataset', issuer='root', account=self.account_name, **self.vo) attachment = {'scope': self.scope_name, 'name': 'ext_parent_2', 'dids': [{'scope': self.scope_name, 'name': did}]} attach_dids_to_dids([attachment], issuer='root', **self.vo) out = get_did_from_pfns([pfn], self.rse2_name, **self.vo) out = list(out) assert_not_equal(0, len(out)) did_found = False for p in out: for key in p: if p[key]['name'] == did: did_found = True assert_equal(self.scope_name, p[key]['scope']) assert_true(did_found) out = list_replicas(dids=[{'scope': self.scope_name, 'name': did}], resolve_parents=True, **self.vo) out = list(out) assert_not_equal(0, len(out)) parents_found = False for rep in out: assert_equal(rep['scope'], self.scope_name) if 'parents' in rep: parents_found = True for parent in rep['parents']: assert_in(self.scope_name, parent) if self.multi_vo: assert_not_in(self.scope.internal, parent) assert_true(parents_found)
def generate(vo): for pfn in get_did_from_pfns(pfns, rse, vo=vo): yield dumps(pfn) + '\n'
def test_api_replica(self): """ REPLICA (API): Test external representation of replicas """ did = did_name_generator('file') did_parent = did_name_generator('dataset') pfn = 'srm://mock2.com:8443/srm/managerv2?SFN=/rucio/tmpdisk/rucio_tests/%s/%s' % ( self.scope_name, generate_uuid()) add_replicas(self.rse2_name, files=[{ 'scope': self.scope_name, 'name': did, 'bytes': 100, 'pfn': pfn }], issuer='root', **self.vo) add_did(self.scope_name, did_parent, 'dataset', issuer='root', account=self.account_name, **self.vo) attachment = { 'scope': self.scope_name, 'name': did_parent, 'dids': [{ 'scope': self.scope_name, 'name': did }] } attach_dids_to_dids([attachment], issuer='root', **self.vo) out = get_did_from_pfns([pfn], self.rse2_name, **self.vo) out = list(out) assert 0 != len(out) did_found = False for p in out: for key in p: if p[key]['name'] == did: did_found = True assert self.scope_name == p[key]['scope'] assert did_found out = list_replicas(dids=[{ 'scope': self.scope_name, 'name': did }], resolve_parents=True, **self.vo) out = list(out) assert 0 != len(out) parents_found = False for rep in out: assert rep['scope'] == self.scope_name if 'parents' in rep: parents_found = True for parent in rep['parents']: assert self.scope_name in parent if self.multi_vo: assert self.scope.internal not in parent assert parents_found