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)
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()
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()