def testProvenance(self): observable = Observable() provenance = OaiProvenance( nsMap = {'oai_dc': "http://www.openarchives.org/OAI/2.0/"}, baseURL = ('meta', '/meta/repository/baseurl/text()'), harvestDate = ('meta', '/meta/repository/harvestDate/text()'), metadataNamespace = ('meta', '/meta/repository/metadataNamespace/text()'), identifier = ('header','/oai_dc:header/oai_dc:identifier/text()'), datestamp = ('header', '/oai_dc:header/oai_dc:datestamp/text()') ) observable.addObserver(provenance) observer = MockStorage() provenance.addObserver(observer) result = asString(observable.any.provenance("recordId")) self.assertEqualsWS("""<provenance xmlns="http://www.openarchives.org/OAI/2.0/provenance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/provenance http://www.openarchives.org/OAI/2.0/provenance.xsd"> <originDescription harvestDate="HARVESTDATE" altered="true"> <baseURL>BASEURL</baseURL> <identifier>recordId</identifier> <datestamp>DATESTAMP</datestamp> <metadataNamespace>METADATANAMESPACE</metadataNamespace> </originDescription> </provenance>""", result)
def testProvenance(self): observable = Observable() provenance = OaiProvenance( nsMap={'oai_dc': "http://www.openarchives.org/OAI/2.0/"}, baseURL=('meta', '/meta/repository/baseurl/text()'), harvestDate=('meta', '/meta/repository/harvestDate/text()'), metadataNamespace=('meta', '/meta/repository/metadataNamespace/text()'), identifier=('header', '/oai_dc:header/oai_dc:identifier/text()'), datestamp=('header', '/oai_dc:header/oai_dc:datestamp/text()')) observable.addObserver(provenance) observer = MockStorage() provenance.addObserver(observer) result = asString(observable.any.provenance("recordId")) self.assertEqualsWS( """<provenance xmlns="http://www.openarchives.org/OAI/2.0/provenance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/provenance http://www.openarchives.org/OAI/2.0/provenance.xsd"> <originDescription harvestDate="HARVESTDATE" altered="true"> <baseURL>BASEURL</baseURL> <identifier>recordId</identifier> <datestamp>DATESTAMP</datestamp> <metadataNamespace>METADATANAMESPACE</metadataNamespace> </originDescription> </provenance>""", result)
def testNoOutputIfValueMissing(self): observable = Observable() provenance = OaiProvenance( nsMap={}, baseURL=('meta', 'meta/repository/baseurl'), harvestDate=('meta', 'meta/does/not/exist'), metadataNamespace=('meta', 'meta/repository/metadataNamespace'), identifier=('header', 'header/identifier'), datestamp=('header', 'header/datestamp')) observable.addObserver(provenance) observer = MockStorage() provenance.addObserver(observer) result = asString(observable.any.provenance("recordId")) self.assertEqual('', result)
def testNoOutputIfValueMissing(self): observable = Observable() provenance = OaiProvenance( nsMap = {}, baseURL = ('meta', 'meta/repository/baseurl'), harvestDate = ('meta', 'meta/does/not/exist'), metadataNamespace = ('meta', 'meta/repository/metadataNamespace'), identifier = ('header','header/identifier'), datestamp = ('header', 'header/datestamp') ) observable.addObserver(provenance) observer = MockStorage() provenance.addObserver(observer) result = asString(observable.any.provenance("recordId")) self.assertEquals('', result)
def testCacheStorageResults(self): observable = Observable() provenance = OaiProvenance( nsMap={}, baseURL=('meta', 'meta/repository/baseurl/text()'), harvestDate=('meta', 'meta/repository/harvestDate/text()'), metadataNamespace=('meta', 'meta/repository/metadataNamespace/text()'), identifier=('header', 'header/identifier/text()'), datestamp=('header', 'header/datestamp/text()')) observable.addObserver(provenance) storage = MockStorage() observer = storage provenance.addObserver(observer) self.assertEqual(0, storage.timesCalled) asString(observable.any.provenance("recordId")) self.assertEqual(2, storage.timesCalled)
def testCacheStorageResults(self): observable = Observable() provenance = OaiProvenance( nsMap = {}, baseURL = ('meta', 'meta/repository/baseurl/text()'), harvestDate = ('meta', 'meta/repository/harvestDate/text()'), metadataNamespace = ('meta', 'meta/repository/metadataNamespace/text()'), identifier = ('header','header/identifier/text()'), datestamp = ('header', 'header/datestamp/text()') ) observable.addObserver(provenance) storage = MockStorage() observer = storage provenance.addObserver(observer) self.assertEquals(0, storage.timesCalled) asString(observable.any.provenance("recordId")) self.assertEquals(2, storage.timesCalled)
def testProvenanceFromOaiPmh(self): def getRecord(identifier, *args, **kwargs): record = CallTrace() record.identifier = identifier record.prefixes = set(['oai_dc']) record.sets = set() record.isDeleted = False return record oaijazz = CallTrace(methods={ 'getRecord': getRecord, 'isKnownPrefix': lambda prefix: True }, onlySpecifiedMethods=True) observable = be( (Observable(), (OaiPmh(repositoryName='example', adminEmail='*****@*****.**'), (oaijazz, ), ( RetrieveToGetDataAdapter(), (MockStorage(), ), ), ( OaiProvenance( nsMap={'oai_dc': "http://www.openarchives.org/OAI/2.0/"}, baseURL=('meta', '/meta/repository/baseurl/text()'), harvestDate=('meta', '/meta/repository/harvestDate/text()'), metadataNamespace=( 'meta', '/meta/repository/metadataNamespace/text()'), identifier=('header', '/oai_dc:header/oai_dc:identifier/text()'), datestamp=('header', '/oai_dc:header/oai_dc:datestamp/text()')), (MockStorage(), ), )))) result = generatorToString( observable.all.handleRequest( Method='GET', arguments=dict(verb=['GetRecord'], identifier=["recordId"], metadataPrefix=['oai_dc']), Headers=dict(Host='oaiserver.example.org'), path='/oai', port=1234, )) _, body = result.split(CRLF * 2) provenanceResult = xpathFirst(XML(body.encode()), '//oai:about/oaiprov:provenance') self.assertXmlEquals( """<provenance xmlns="http://www.openarchives.org/OAI/2.0/provenance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/provenance http://www.openarchives.org/OAI/2.0/provenance.xsd"> <originDescription harvestDate="HARVESTDATE" altered="true"> <baseURL>BASEURL</baseURL> <identifier>recordId</identifier> <datestamp>DATESTAMP</datestamp> <metadataNamespace>METADATANAMESPACE</metadataNamespace> </originDescription> </provenance>""", provenanceResult)