Example #1
0
    def testHarvesterState(self):
        observer = CallTrace(emptyGeneratorMethods=['add'])
        oaiDownloadProcessor = OaiDownloadProcessor(
            path="/oai",
            metadataPrefix="oai_dc",
            workingDirectory=self.tempdir,
            xWait=True,
            err=StringIO())
        oaiDownloadProcessor.addObserver(observer)
        state = oaiDownloadProcessor.getState()
        self.assertEqual(None, state.resumptionToken)
        self.assertEqual(None, state.from_)
        self.assertEqual(None, state.errorState)
        self.assertEqual(None, state.name)
        self.assertEqual("/oai", state.path)
        self.assertEqual("oai_dc", state.metadataPrefix)
        self.assertEqual(None, state.set)
        self.assertEqual(0, state.nextRequestTime)
        oaiDownloadProcessor.setSet('s')
        oaiDownloadProcessor.setPath('/p')
        oaiDownloadProcessor.setMetadataPrefix('pref')
        oaiDownloadProcessor.observable_setName('aName')
        consume(
            oaiDownloadProcessor.handle(
                parse(StringIO(LISTRECORDS_RESPONSE % RESUMPTION_TOKEN))))
        state = oaiDownloadProcessor.getState()
        self.assertEqual("x?y&z", state.resumptionToken)
        self.assertEqual('2002-06-01T19:20:30Z', state.from_)
        self.assertEqual(None, state.errorState)
        self.assertEqual('aName', state.name)
        self.assertEqual("/p", state.path)
        self.assertEqual("pref", state.metadataPrefix)
        self.assertEqual('s', state.set)
        self.assertEqual(0, state.nextRequestTime)

        # Change state of oaiDownloadProcessor -> changes stateView.
        oaiDownloadProcessor.setSet('x')
        self.assertEqual('x', state.set)

        oaiDownloadProcessor2 = OaiDownloadProcessor(
            path="/oai",
            metadataPrefix="oai_dc",
            workingDirectory=self.tempdir,
            xWait=True,
            err=StringIO())
        state2 = oaiDownloadProcessor2.getState()
        self.assertEqual(None, state2.name)
        self.assertEqual("oai_dc", state2.metadataPrefix)
        self.assertEqual("x?y&z", state2.resumptionToken)
        self.assertEqual('2002-06-01T19:20:30Z', state2.from_)
        self.assertEqual(None, state2.errorState)
        self.assertEqual(0, state.nextRequestTime)
Example #2
0
    def testHarvesterStateWithError(self):
        resumptionToken = "u|c1286437597991025|mprefix|s|f"
        with open(join(self.tempdir, 'harvester.state'), 'w') as f:
            f.write("Resumptiontoken: %s\n" % resumptionToken)
        observer = CallTrace()
        observer.exceptions = {'add': Exception("Could be anything")}
        oaiDownloadProcessor = OaiDownloadProcessor(
            path="/oai",
            metadataPrefix="oai_dc",
            workingDirectory=self.tempdir,
            xWait=True,
            err=StringIO(),
            name="Name")
        oaiDownloadProcessor.addObserver(observer)
        self.assertRaises(
            Exception, lambda: list(
                compose(
                    oaiDownloadProcessor.handle(
                        parse(StringIO(LISTRECORDS_RESPONSE % RESUMPTION_TOKEN)
                              )))))
        state = oaiDownloadProcessor.getState()
        self.assertEqual(resumptionToken, state.resumptionToken)
        self.assertEqual(None, state.from_)
        self.assertEqual(
            "ERROR while processing 'oai:identifier:1': Could be anything",
            state.errorState)
        self.assertEqual("Name", state.name)

        oaiDownloadProcessor2 = OaiDownloadProcessor(
            path="/oai",
            metadataPrefix="oai_dc",
            workingDirectory=self.tempdir,
            xWait=True,
            err=StringIO())
        state2 = oaiDownloadProcessor2.getState()
        self.assertEqual(resumptionToken, state2.resumptionToken)
        self.assertEqual(
            "ERROR while processing 'oai:identifier:1': Could be anything",
            state2.errorState)
Example #3
0
    def testShutdownPersistsStateOnAutocommit(self):
        observer = CallTrace(emptyGeneratorMethods=['add'])
        oaiDownloadProcessor = OaiDownloadProcessor(
            path="/oai",
            metadataPrefix="oai_dc",
            workingDirectory=self.tempdir,
            autoCommit=False)
        oaiDownloadProcessor.addObserver(observer)
        consume(
            oaiDownloadProcessor.handle(
                parse(StringIO(LISTRECORDS_RESPONSE % RESUMPTION_TOKEN))))
        state = oaiDownloadProcessor.getState()
        self.assertFalse(isfile(join(self.tempdir, 'harvester.state')))

        oaiDownloadProcessor.handleShutdown()
        self.assertEqual(
            {
                "errorState": None,
                'from': '2002-06-01T19:20:30Z',
                "resumptionToken": state.resumptionToken
            }, JsonDict.load(join(self.tempdir, 'harvester.state')))