Exemplo n.º 1
0
    def _next_response(self):
        """Get the next response from the OAI server.

        Copy-pasted from OAIItemIterator._next_response but adds metadataPrefix to params.
        """
        params = self.params
        if self.resumption_token:
            params = {
                'resumptionToken': self.resumption_token.token,
                'verb': self.verb,
                'metadataPrefix': params.get('metadataPrefix')
            }
        self.oai_response = self.sickle.harvest(**params)
        error = self.oai_response.xml.find('.//' + self.sickle.oai_namespace +
                                           'error')
        if error is not None:
            code = error.attrib.get('code', 'UNKNOWN')
            description = error.text or ''
            try:
                raise getattr(oaiexceptions,
                              code[0].upper() + code[1:])(description)
            except AttributeError:
                raise oaiexceptions.OAIError(description)
        self.resumption_token = self._get_resumption_token()
        self._items = self.oai_response.xml.iterfind(
            './/' + self.sickle.oai_namespace + self.element)
Exemplo n.º 2
0
    def _next_response(self):
        """Get the next response from the OAI server."""
        params = self.params
        access_token = params.get('accessToken')
        if self.resumption_token:
            params = {
                'resumptionToken': self.resumption_token.token,
                'verb': self.verb
            }
        if access_token:
            params['accessToken'] = access_token

        count = 0
        while count < 5:
            try:
                self.oai_response = self.sickle.harvest(**params)
                xml = self.oai_response.xml
                count = 5
            except Exception as err:
                count += 1
                current_app.logger.error(f'Sickle harvest {count} {err}')
                sleep(60)
        error = self.oai_response.xml.find('.//' + self.sickle.oai_namespace +
                                           'error')
        if error is not None:
            code = error.attrib.get('code', 'UNKNOWN')
            description = error.text or ''
            try:
                raise getattr(oaiexceptions,
                              code[0].upper() + code[1:])(description)
            except AttributeError:
                raise oaiexceptions.OAIError(description)
        if self.resumption_token:
            # Test we got a complete response ('resumptionToken' in xml)
            resumption_token_element = self.oai_response.xml.find(
                './/' + self.sickle.oai_namespace + 'resumptionToken')

            if resumption_token_element is None:
                current_app.logger.error(
                    f'ERROR HARVESTING incomplete response: '
                    f'{self.resumption_token.cursor} '
                    f'{self.resumption_token.token}')
                sleep(60)
            else:
                self.next_resumption_token_and_items()
        else:
            # first time
            self.next_resumption_token_and_items()
Exemplo n.º 3
0
 def _next_response(self):
     """Get the next response from the OAI server."""
     params = self.params
     if self.resumption_token:
         params = {
             'resumptionToken': self.resumption_token.token,
             'verb': self.verb
         }
     self.oai_response = self.sickle.harvest(**params)
     error = self.oai_response.xml.find(
         './/' + self.sickle.oai_namespace + 'error')
     if error is not None:
         code = error.attrib.get('code', 'UNKNOWN')
         description = error.text or ''
         try:
             raise getattr(
                 oaiexceptions, code[0].upper() + code[1:])(description)
         except AttributeError:
             raise oaiexceptions.OAIError(description)
     self.resumption_token = self._get_resumption_token()