def testGetRecordWithRepositoryIdentifier(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier='example.org')) record = CallTrace('record') record.identifier = 'id0' record.prefixes = ['oai_dc'] record.sets = [] record.isDeleted = False observer = CallTrace( returnValues={ 'isKnownPrefix': True, 'getRecord': record }, emptyGeneratorMethods=['oaiWatermark', 'oaiRecord']) oaigetrecord.addObserver(observer) consume( oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['oai_dc'], identifier=['oai:example.org:id0'], ), **self.httpkwargs)) self.assertEqual( ['getRecord', 'isKnownPrefix', 'oaiWatermark', 'oaiRecord'], observer.calledMethodNames()) self.assertEqual(dict(identifier='id0', metadataPrefix='oai_dc'), observer.calledMethods[0].kwargs)
def testGetRecordWithRepositoryIdentifierMissingExpectedPrefix(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier='example.org')) result = asString(oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['oai_dc'], identifier=['not:properly:prefixed:id0'], ), **self.httpkwargs)) header, body = result.split('\r\n\r\n') self.assertEqual('idDoesNotExist', xpathFirst(XML(body), '/oai:OAI-PMH/oai:error/@code'))
def testGetRecordWithRepositoryIdentifierMissingExpectedPrefix(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier="example.org")) result = asString( oaigetrecord.getRecord( arguments=dict(verb=["GetRecord"], metadataPrefix=["oai_dc"], identifier=["not:properly:prefixed:id0"]), **self.httpkwargs ) ) header, body = result.split("\r\n\r\n") self.assertTrue(xpath(XML(body), '/oai:OAI-PMH/oai:error[@code="idDoesNotExist"]'), body)
def testGetRecordWithRepositoryIdentifierMissingExpectedPrefix(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier='example.org')) result = asString( oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['oai_dc'], identifier=['not:properly:prefixed:id0'], ), **self.httpkwargs)) header, body = result.split('\r\n\r\n') self.assertEqual( 'idDoesNotExist', xpathFirst(XML(body.encode()), '/oai:OAI-PMH/oai:error/@code'))
def __init__(self, repositoryName, adminEmail, repositoryIdentifier=None, batchSize=DEFAULT_BATCH_SIZE, supportXWait=False, externalUrl=None, preciseDatestamp=False): self._repository = OaiRepository( identifier=repositoryIdentifier, name=repositoryName, adminEmail=adminEmail, externalUrl=externalUrl, ) outside = Transparent() self.addObserver = outside.addObserver self.addStrand = outside.addStrand self._internalObserverTree = be( (Observable(), (OaiError(self._repository), (OaiIdentify(self._repository), (outside,) ), (OaiList(repository=self._repository, batchSize=batchSize, supportXWait=supportXWait), (OaiRecord(self._repository, preciseDatestamp=preciseDatestamp), (outside,) ) ), (OaiGetRecord(self._repository), (OaiRecord(self._repository, preciseDatestamp=preciseDatestamp), (outside,) ) ), (OaiListMetadataFormats(self._repository), (outside,) ), (OaiListSets(self._repository), (outside,) ), ) ) )
def testGetRecordWithRepositoryIdentifier(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier='example.org')) record = CallTrace('record') record.identifier = 'id0' record.prefixes = ['oai_dc'] record.sets = [] record.isDeleted = False observer = CallTrace(returnValues={ 'isKnownPrefix': True, 'getRecord': record}, emptyGeneratorMethods=['oaiWatermark', 'oaiRecord']) oaigetrecord.addObserver(observer) consume(oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['oai_dc'], identifier=['oai:example.org:id0'], ), **self.httpkwargs)) self.assertEquals(['getRecord', 'isKnownPrefix', 'oaiWatermark', 'oaiRecord'], observer.calledMethodNames()) self.assertEquals(dict(identifier='id0', metadataPrefix='oai_dc'), observer.calledMethods[0].kwargs)
def testGetRecordWithRepositoryIdentifier(self): oaigetrecord = OaiGetRecord(OaiRepository(identifier="example.org")) record = CallTrace("record") record.identifier = "id0" record.prefixes = ["oai_dc"] record.sets = [] record.isDeleted = False observer = CallTrace( returnValues={"getAllPrefixes": ["oai_dc"], "getRecord": record}, emptyGeneratorMethods=["oaiWatermark", "oaiRecord"], ) oaigetrecord.addObserver(observer) consume( oaigetrecord.getRecord( arguments=dict(verb=["GetRecord"], metadataPrefix=["oai_dc"], identifier=["oai:example.org:id0"]), **self.httpkwargs ) ) self.assertEquals(["getRecord", "getAllPrefixes", "oaiWatermark", "oaiRecord"], observer.calledMethodNames()) self.assertEquals(dict(identifier="id0"), observer.calledMethods[0].kwargs)
def testGetRecordDeletedInRequestedPrefix(self): oaijazz = OaiJazz(self.tempdir + '/jazz') storage = MultiSequentialStorage(self.tempdir + "/seq-store") oairecord = OaiRecord() class MyStorage(object): def getData(self, identifier, name): return 'data' oaigetrecord = be((OaiGetRecord(repository=OaiRepository()), (oaijazz, ), (oairecord, (MyStorage(), )))) oaijazz.addOaiRecord(identifier='id:0', metadataPrefixes=['A', 'B']) oaijazz.deleteOaiRecordInPrefixes(identifier='id:0', metadataPrefixes=['A']) response = oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['A'], identifier=['id:0'], ), **self.httpkwargs) _, body = asString(response).split("\r\n\r\n") self.assertEqual( 'deleted', xpathFirst( XML(body.encode()), '/oai:OAI-PMH/oai:GetRecord/oai:record/oai:header/@status'), body) response = oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['B'], identifier=['id:0'], ), **self.httpkwargs) _, body = asString(response).split("\r\n\r\n") self.assertEqual( "data", xpathFirst(XML(body.encode()), '//oai:metadata/text()')) response = oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['C'], identifier=['id:0'], ), **self.httpkwargs) _, body = asString(response).split("\r\n\r\n") self.assertEqual( 'cannotDisseminateFormat', xpathFirst(XML(body.encode()), '/oai:OAI-PMH/oai:error/@code'))
def testGetRecordWithMultiSequentialStorage(self): oaijazz = OaiJazz(self.tempdir + '/jazz') oaijazz.updateMetadataFormat(prefix="oai_dc", schema="", namespace="") storage = MultiSequentialStorage(self.tempdir + "/seq-store") oairecord = OaiRecord() oaigetrecord = be( (OaiGetRecord(repository=OaiRepository()), (oaijazz, ), (oairecord, (RetrieveToGetDataAdapter(), (storage, ))))) oaijazz.addOaiRecord(identifier="id0", metadataPrefixes=['oai_dc']) storage.addData(identifier="id0", name="oai_dc", data=b"data01") response = oaigetrecord.getRecord(arguments=dict( verb=['GetRecord'], metadataPrefix=['oai_dc'], identifier=['id0'], ), **self.httpkwargs) _, body = asString(response).split("\r\n\r\n") self.assertEqual( "data01", xpath(parse(BytesIO(body.encode())), '//oai:metadata')[0].text)
def __init__(self, repositoryName, adminEmail, repositoryIdentifier=None, batchSize=OaiList.DEFAULT_BATCH_SIZE, supportXWait=False, fixIdentifyBaseURL=False): outside = Transparent( ) if repositoryIdentifier == None else OaiIdentifierRename( repositoryIdentifier) self.addObserver = outside.addObserver self.addStrand = outside.addStrand self._internalObserverTree = be((Observable(), ( OaiError(), (OaiIdentify(repositoryName=repositoryName, adminEmail=adminEmail, repositoryIdentifier=repositoryIdentifier, fixIdentifyBaseURL=fixIdentifyBaseURL), (outside, )), (OaiList(batchSize=batchSize, supportXWait=supportXWait), (OaiRecord(), (outside, ))), (OaiGetRecord(), (OaiRecord(), (outside, ))), (OaiListMetadataFormats(), (outside, )), (OaiListSets(), (outside, )), )))