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 testBasicProperties(self): oaiRepository = OaiRepository(identifier='example.org', name='The Repository Name', adminEmail='*****@*****.**') self.assertEquals('example.org', oaiRepository.identifier) self.assertEquals('The Repository Name', oaiRepository.name) self.assertEquals('*****@*****.**', oaiRepository.adminEmail)
def testRecordWithFetchedRecordsWithRepositoryIdentifier(self): self.setUpOaiRecord(repository=OaiRepository(identifier='example.org')) record = MockRecord('id') result = ''.join( compose( self.oaiRecord.oaiRecord(record=record, metadataPrefix='oai_dc', fetchedRecords={ record.identifier: "<the>data</the>", 'abc': '<some>other data</some>' }))) self.assertEqualsWS( """<record> <header> <identifier>oai:example.org:id</identifier> <datestamp>2011-03-25T10:45:00Z</datestamp> <setSpec>set0</setSpec> <setSpec>set1</setSpec> </header> <metadata> <the>data</the> </metadata> </record>""", result) self.assertEqual(["provenance('id')"], [str(m) for m in self.observer.calledMethods])
def testRequestUrl(self): oaiRepository = OaiRepository(identifier='example.org') self.assertEqual( "http://hostname:8080/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:9090'}, path='/path', port=8080)) self.assertEqual( "http://hostname:8080/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:8080'}, path='/path', port=8080)) self.assertEqual( "http://hostname/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:8080'}, path='/path', port=80))
def init(self, repositoryId=None): self.listMetadataFormats = OaiListMetadataFormats( repository=OaiRepository(repositoryId)) self.oaijazz = OaiJazz(self.tempdir + '/jazz') self.listMetadataFormats.addObserver(self.oaijazz) self.oaijazz.addOaiRecord(identifier="id0", setSpecs=[], metadataPrefixes=['oai_dc']) self.oaijazz.addOaiRecord(identifier="id1", setSpecs=[], metadataPrefixes=['rdf'])
def testPrefixIdentifier(self): oaiRepository = OaiRepository(name='The Repository Name') self.assertEquals("id0", oaiRepository.prefixIdentifier('id0')) oaiRepository = OaiRepository(identifier='example.org') self.assertEquals("oai:example.org:id0", oaiRepository.prefixIdentifier('id0'))
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 setUp(self): SeecrTestCase.setUp(self) self.data = [] def responder(**kwargs): while self.data: yield self.data.pop(0) self.observer = CallTrace('Observer', methods={'someMessage': responder}) self.dna = be((Observable(), (OaiError(repository=OaiRepository()), (self.observer, ))))
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 testUnprefixIdentifier(self): oaiRepository = OaiRepository(name='The Repository Name') self.assertEquals("id0", oaiRepository.unprefixIdentifier('id0')) self.assertEquals( "oai:example.org:id0", oaiRepository.unprefixIdentifier('oai:example.org:id0')) oaiRepository = OaiRepository(identifier='example.org') self.assertEquals( "id0", oaiRepository.unprefixIdentifier("oai:example.org:id0")) try: self.assertEquals( "id0", oaiRepository.unprefixIdentifier("some:other:prefix:id0")) self.fail() except OaiException, e: self.assertEquals('', str(e))
def testUnprefixIdentifier(self): oaiRepository = OaiRepository(name='The Repository Name') self.assertEquals("id0", oaiRepository.unprefixIdentifier('id0')) self.assertEquals("oai:example.org:id0", oaiRepository.unprefixIdentifier('oai:example.org:id0')) oaiRepository = OaiRepository(identifier='example.org') self.assertEquals("id0", oaiRepository.unprefixIdentifier("oai:example.org:id0")) try: self.assertEquals("id0", oaiRepository.unprefixIdentifier("some:other:prefix:id0")) self.fail() except OaiException, e: self.assertEquals('', str(e))
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 testRecordWithRepositoryIdentifier(self): self.setUpOaiRecord(repository=OaiRepository(identifier='example.org')) result = ''.join( compose( self.oaiRecord.oaiRecord(record=MockRecord('id'), metadataPrefix='oai_dc', fetchedRecords=None))) self.assertEqualsWS( """<record> <header> <identifier>oai:example.org:id</identifier> <datestamp>2011-03-25T10:45:00Z</datestamp> <setSpec>set0</setSpec> <setSpec>set1</setSpec> </header> <metadata> <data/> </metadata> </record>""", result) self.assertEqual( ["getData(identifier='id', name='oai_dc')", "provenance('id')"], [str(m) for m in self.observer.calledMethods])
def oaiRepository(repositoryIdentifier): return OaiRepository(identifier=repositoryIdentifier, name='The Repository Name', adminEmail='*****@*****.**')
def testRequestUrl(self): oaiRepository = OaiRepository(identifier='example.org') self.assertEqual("http://hostname:8080/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:9090'}, path='/path', port=8080)) self.assertEqual("http://hostname:8080/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:8080'}, path='/path', port=8080)) self.assertEqual("http://hostname/path", oaiRepository.requestUrl(Headers={'Host': 'hostname:8080'}, path='/path', port=80))