Esempio n. 1
0
 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)
Esempio n. 3
0
    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])
Esempio n. 4
0
 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))
Esempio n. 5
0
 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'))
Esempio n. 7
0
 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'))
Esempio n. 8
0
    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, ))))
Esempio n. 9
0
    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))
Esempio n. 11
0
    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))
Esempio n. 12
0
    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)
Esempio n. 13
0
    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='*****@*****.**')
Esempio n. 15
0
 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))
Esempio n. 16
0
    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'))