Example #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)
Example #2
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), '/oai:OAI-PMH/oai:error/@code'))
Example #3
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.assertTrue(xpath(XML(body), '/oai:OAI-PMH/oai:error[@code="idDoesNotExist"]'), body)
Example #4
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'))
Example #5
0
 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,)
                 ),
             )
         )
     )
Example #6
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.assertEquals(['getRecord', 'isKnownPrefix', 'oaiWatermark', 'oaiRecord'], observer.calledMethodNames())
     self.assertEquals(dict(identifier='id0', metadataPrefix='oai_dc'), observer.calledMethods[0].kwargs)
Example #7
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={"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)
Example #8
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'))
Example #9
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)
Example #10
0
 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, )),
     )))