예제 #1
0
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)