def list_records(url, metadata_prefix=None, resumption_token=None, set_h=None, from_date=None, until_date=None): """ Performs an Oai-Pmh ListRecords request. Args: url: URL of the Data Provider. metadata_prefix: Metadata Prefix to use for the request. resumption_token: Resumption Token to use for the request. set_h: Set to use for the request. from_date: From Date to use for the request. until_date: Until Date to use for the request. Returns: Response. Resumption Token. """ try: params = {'verb': 'ListRecords'} if resumption_token is not None: params['resumptionToken'] = resumption_token else: params['metadataPrefix'] = metadata_prefix params['set'] = set_h params['from'] = from_date params['until'] = until_date rtn = [] http_response = send_get_request(url, params=params) resumption_token = None if http_response.status_code == status.HTTP_200_OK: xml = http_response.text elements = XSDTree.iterfind( xml, './/{http://www.openarchives.org/OAI/2.0/}record') for elt in elements: record = sickle_operations.get_record_elt(elt, metadata_prefix) rtn.append(record) resumption_token_elt = XSDTree.iterfind( xml, './/{http://www.openarchives.org/OAI/2.0/}resumptionToken') resumption_token = next(iter(resumption_token_elt), None) if resumption_token is not None: resumption_token = resumption_token.text elif http_response.status_code == status.HTTP_404_NOT_FOUND: raise oai_pmh_exceptions.OAIAPILabelledException( message='Impossible to get data from the server. ' 'Server not found', status_code=status.HTTP_404_NOT_FOUND) else: raise oai_pmh_exceptions.OAIAPILabelledException( message='An error occurred while trying to get ' 'data from the server.', status_code=http_response.status_code) return Response(rtn, status=status.HTTP_200_OK), resumption_token except oai_pmh_exceptions.OAIAPIException as e: return e.response(), resumption_token except Exception as e: content = OaiPmhMessage.get_message_labelled( 'An error occurred during the list_records process: %s' % e.message) return Response( content, status=status.HTTP_500_INTERNAL_SERVER_ERROR), resumption_token
def check_tag_count(self, text, checkTag, number): count = 0 for tag in XSDTree.iterfind( text, ".//{http://www.openarchives.org/OAI/2.0/}" + checkTag): count += 1 self.assertEquals(number, count)
def check_tag_exist(self, text, check_tag): tag_found = False for tag in XSDTree.iterfind( text, ".//{http://www.openarchives.org/OAI/2.0/}" + check_tag): tag_found = True self.assertTrue(tag_found)
def check_tag_error_code(self, text, error): self.check_tag_exist(text, "error") for tag in XSDTree.iterfind( text, ".//{http://www.openarchives.org/OAI/2.0/}error"): self.assertEqual(tag.attrib["code"], error)