示例#1
0
 def setUp(self):
     SeecrTestCase.setUp(self)
     self.subject = OaiAddRecord()
     self.observer = CallTrace('observert')
     self.observer.getAllMetadataFormats = lambda: []
     self.subject.addObserver(self.observer)
示例#2
0
 def setUp(self):
     SeecrTestCase.setUp(self)
     self.subject = OaiAddRecord()
     self.observer = CallTrace("observert")
     self.observer.getAllMetadataFormats = lambda: []
     self.subject.addObserver(self.observer)
示例#3
0
class OaiAddRecordTest(SeecrTestCase):
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.subject = OaiAddRecord()
        self.observer = CallTrace('observert')
        self.observer.getAllMetadataFormats = lambda: []
        self.subject.addObserver(self.observer)

    def testAdd(self):
        lxmlNode = parseLxml('<empty/>')
        consume(self.subject.add('id', 'partName', lxmlNode))

        self.assertEqual(['updateMetadataFormat', 'addOaiRecord'],
                         self.observer.calledMethodNames())
        self.assertEqual('id',
                         self.observer.calledMethods[1].kwargs['identifier'])
        self.assertEqual({
            'prefix': 'partName',
            'schema': '',
            'namespace': ''
        }, self.observer.calledMethods[0].kwargs)

    def testAddSetInfo(self):
        record = createElement('oai:record')
        header = createSubElement(record, 'oai:header')
        createSubElement(header, 'oai:setSpec', text='1')

        consume(self.subject.add('123', 'oai_dc', record))

        self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'],
                         self.observer.calledMethodNames())
        self.assertEqual('123',
                         self.observer.calledMethods[2].kwargs['identifier'])
        self.assertEqual({
            'setSpec': '1',
            'setName': '1'
        }, self.observer.calledMethods[0].kwargs)
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': "http://www.openarchives.org/OAI/2.0/"
            }, self.observer.calledMethods[1].kwargs)

    def testAddSetInfoWithElementTree(self):
        oaiContainer = createElement('oai:PMH')
        record = createSubElement(oaiContainer, 'oai:record')
        header = createSubElement(record, 'oai:header')
        createSubElement(header, 'oai:setSpec', text='1')

        consume(
            self.subject.add('123', 'oai_dc',
                             xpathFirst(oaiContainer, '/oai:PMH/oai:record')))

        self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'],
                         self.observer.calledMethodNames())
        self.assertEqual('123',
                         self.observer.calledMethods[2].kwargs['identifier'])
        self.assertEqual({
            'setSpec': '1',
            'setName': '1'
        }, self.observer.calledMethods[0].kwargs)
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': "http://www.openarchives.org/OAI/2.0/"
            }, self.observer.calledMethods[1].kwargs)

    def testAddElementTree(self):
        header = parse(
            StringIO(
                '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>1</setSpec></header>'
            ))

        consume(self.subject.add('123', 'oai_dc', header))

        self.assertEqual(['updateSet', 'updateMetadataFormat', 'addOaiRecord'],
                         self.observer.calledMethodNames())
        self.assertEqual('123',
                         self.observer.calledMethods[2].kwargs['identifier'])
        self.assertEqual({
            'setSpec': '1',
            'setName': '1'
        }, self.observer.calledMethods[0].kwargs)
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': "http://www.openarchives.org/OAI/2.0/"
            }, self.observer.calledMethods[1].kwargs)

    def testAddRecognizeNamespace(self):
        header = '<header xmlns="this.is.not.the.right.ns"><setSpec>%s</setSpec></header>'
        consume(self.subject.add('123', 'oai_dc', parseLxml(header % 1)))
        header = '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>%s</setSpec></header>'
        consume(self.subject.add('124', 'oai_dc', parseLxml(header % 1)))
        self.assertEqual([
            'updateMetadataFormat', 'addOaiRecord', 'updateSet',
            'updateMetadataFormat', 'addOaiRecord'
        ], self.observer.calledMethodNames())
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': 'this.is.not.the.right.ns'
            }, self.observer.calledMethods[0].kwargs)
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': "http://www.openarchives.org/OAI/2.0/"
            }, self.observer.calledMethods[3].kwargs)

    def testMultipleHierarchicalSets(self):
        spec = "<setSpec>%s</setSpec>"
        header = '<header xmlns="http://www.openarchives.org/OAI/2.0/">%s</header>'
        consume(
            self.subject.add('124', 'oai_dc',
                             parseLxml(header %
                                       (spec % '2:3' + spec % '3:4'))))
        self.assertEqual(
            ['updateSet', 'updateSet', 'updateMetadataFormat', 'addOaiRecord'],
            self.observer.calledMethodNames())
        self.assertEqual('124',
                         self.observer.calledMethods[3].kwargs['identifier'])
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': '',
                'namespace': "http://www.openarchives.org/OAI/2.0/"
            }, self.observer.calledMethods[2].kwargs)
        self.assertEqual({
            'setSpec': '2:3',
            'setName': '2:3'
        }, self.observer.calledMethods[0].kwargs)
        self.assertEqual({
            'setSpec': '3:4',
            'setName': '3:4'
        }, self.observer.calledMethods[1].kwargs)

    def testMetadataPrefixes(self):
        consume(
            self.subject.add(
                '456', 'oai_dc',
                parseLxml(
                    '<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
             xsi:schemaLocation="http://oai_dc http://oai_dc/dc.xsd"/>')))
        self.assertEqual(['updateMetadataFormat', 'addOaiRecord'],
                         self.observer.calledMethodNames())
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': 'http://oai_dc/dc.xsd',
                'namespace': 'http://oai_dc'
            }, self.observer.calledMethods[0].kwargs)
        consume(
            self.subject.add(
                '457', 'dc2',
                parseLxml('<oai_dc:dc xmlns:oai_dc="http://dc2"/>')))
        self.assertEqual([
            'updateMetadataFormat', 'addOaiRecord', 'updateMetadataFormat',
            'addOaiRecord'
        ], self.observer.calledMethodNames())
        self.assertEqual(
            {
                'prefix': 'dc2',
                'schema': '',
                'namespace': 'http://dc2'
            }, self.observer.calledMethods[2].kwargs)

    def testMetadataPrefixesFromRootTag(self):
        consume(
            self.subject.add(
                '456', 'oai_dc',
                parseLxml('''<oai_dc:dc
        xmlns:oai_dc="http://oai_dc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://other
                            http://other.com/file.xsd
                            http://oai_dc
                            http://oai_dc/dc.xsd">
</oai_dc:dc>''')))
        self.assertEqual(
            {
                'prefix': 'oai_dc',
                'schema': 'http://oai_dc/dc.xsd',
                'namespace': 'http://oai_dc'
            }, self.observer.calledMethods[0].kwargs)

    def testIncompletePrefixInfo(self):
        consume(self.subject.add('457', 'dc2', parseLxml('<oai_dc/>')))
        self.assertEqual(2, len(self.observer.calledMethods))
        self.assertEqual({
            'prefix': 'dc2',
            'schema': '',
            'namespace': ''
        }, self.observer.calledMethods[0].kwargs)
        self.assertEqual(
            ['dc2'], self.observer.calledMethods[1].kwargs['metadataPrefixes'])
示例#4
0
class OaiAddRecordTest(SeecrTestCase):
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.subject = OaiAddRecord()
        self.observer = CallTrace("observert")
        self.observer.getAllMetadataFormats = lambda: []
        self.subject.addObserver(self.observer)

    def testAdd(self):
        lxmlNode = parseLxml("<empty/>")
        consume(self.subject.add("id", "partName", lxmlNode))

        self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames())
        self.assertEquals("id", self.observer.calledMethods[0].kwargs["identifier"])
        self.assertEquals([("partName", "", "")], self.observer.calledMethods[0].kwargs["metadataFormats"])
        self.assertEquals(set(), self.observer.calledMethods[0].kwargs["sets"])

    def testAddSetInfo(self):
        record = createElement("oai:record")
        header = createSubElement(record, "oai:header")
        createSubElement(header, "oai:setSpec", text="1")

        consume(self.subject.add("123", "oai_dc", record))

        self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames())
        self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"])
        self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"])
        self.assertEquals(
            [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )

    def testAddSetInfoWithElementTree(self):
        oaiContainer = createElement("oai:PMH")
        record = createSubElement(oaiContainer, "oai:record")
        header = createSubElement(record, "oai:header")
        createSubElement(header, "oai:setSpec", text="1")

        consume(self.subject.add("123", "oai_dc", xpathFirst(oaiContainer, "/oai:PMH/oai:record")))

        self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames())
        self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"])
        self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"])
        self.assertEquals(
            [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )

    def testAddElementTree(self):
        header = parse(StringIO('<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>1</setSpec></header>'))

        consume(self.subject.add("123", "oai_dc", header))

        self.assertEquals(["addOaiRecord"], self.observer.calledMethodNames())
        self.assertEquals("123", self.observer.calledMethods[0].kwargs["identifier"])
        self.assertEquals(set([("1", "1")]), self.observer.calledMethods[0].kwargs["sets"])
        self.assertEquals(
            [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )

    def testAddRecognizeNamespace(self):
        header = '<header xmlns="this.is.not.the.right.ns"><setSpec>%s</setSpec></header>'
        consume(self.subject.add("123", "oai_dc", parseLxml(header % 1)))
        header = '<header xmlns="http://www.openarchives.org/OAI/2.0/"><setSpec>%s</setSpec></header>'
        consume(self.subject.add("124", "oai_dc", parseLxml(header % 1)))
        self.assertEquals(["addOaiRecord", "addOaiRecord"], self.observer.calledMethodNames())
        self.assertEquals(
            [("oai_dc", "", "this.is.not.the.right.ns")], self.observer.calledMethods[0].kwargs["metadataFormats"]
        )
        self.assertEquals(
            [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")],
            self.observer.calledMethods[1].kwargs["metadataFormats"],
        )

    def testMultipleHierarchicalSets(self):
        spec = "<setSpec>%s</setSpec>"
        header = '<header xmlns="http://www.openarchives.org/OAI/2.0/">%s</header>'
        consume(self.subject.add("124", "oai_dc", parseLxml(header % (spec % "2:3" + spec % "3:4"))))
        self.assertEquals("124", self.observer.calledMethods[0].kwargs["identifier"])
        self.assertEquals(
            [("oai_dc", "", "http://www.openarchives.org/OAI/2.0/")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )
        self.assertEquals(set([("2:3", "2:3"), ("3:4", "3:4")]), self.observer.calledMethods[0].kwargs["sets"])

    def testMetadataPrefixes(self):
        consume(
            self.subject.add(
                "456",
                "oai_dc",
                parseLxml(
                    '<oai_dc:dc xmlns:oai_dc="http://oai_dc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
             xsi:schemaLocation="http://oai_dc http://oai_dc/dc.xsd"/>'
                ),
            )
        )
        self.assertEquals(
            [("oai_dc", "http://oai_dc/dc.xsd", "http://oai_dc")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )
        consume(self.subject.add("457", "dc2", parseLxml('<oai_dc:dc xmlns:oai_dc="http://dc2"/>')))
        self.assertEquals([("dc2", "", "http://dc2")], self.observer.calledMethods[1].kwargs["metadataFormats"])

    def testMetadataPrefixesFromRootTag(self):
        consume(
            self.subject.add(
                "456",
                "oai_dc",
                parseLxml(
                    """<oai_dc:dc
        xmlns:oai_dc="http://oai_dc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://other
                            http://other.com/file.xsd
                            http://oai_dc
                            http://oai_dc/dc.xsd">
</oai_dc:dc>"""
                ),
            )
        )
        self.assertEquals(
            [("oai_dc", "http://oai_dc/dc.xsd", "http://oai_dc")],
            self.observer.calledMethods[0].kwargs["metadataFormats"],
        )

    def testIncompletePrefixInfo(self):
        consume(self.subject.add("457", "dc2", parseLxml("<oai_dc/>")))
        self.assertEquals([("dc2", "", "")], self.observer.calledMethods[0].kwargs["metadataFormats"])