def index(self):
     '''Return the result of the handled request of a batching OAI-PMH
     server implementation.
     '''
     if 'verb' in request.params:
         verb = request.params['verb'] if request.params['verb'] else None
         if verb:
             client = CKANServer()
             metadata_registry = oaimd.MetadataRegistry()
             metadata_registry.registerReader('oai_dc', oaimd.oai_dc_reader)
             metadata_registry.registerWriter('oai_dc',
                                              oaisrv.oai_dc_writer)
             metadata_registry.registerReader('rdf', rdf_reader)
             metadata_registry.registerWriter('rdf', dcat2rdf_writer)
             metadata_registry.registerWriter('oai_datacite',
                                              datacite_writer)
             metadata_registry.registerWriter('oai_b2f', b2f_writer)
             serv = oaisrv.BatchingServer(
                 client,
                 metadata_registry=metadata_registry,
                 resumption_batch_size=500)
             parms = request.params.mixed()
             res = serv.handleRequest(parms)
             response.headers['content-type'] = 'text/xml; charset=utf-8'
             return res
     else:
         return render('ckanext/oaipmh/oaipmh.html')
Пример #2
0
 def getServer(self):
     directory = os.path.dirname(__file__)
     fake1 = os.path.join(directory, 'fake1')
     myserver = fakeclient.FakeClient(fake1)
     metadata_registry = metadata.MetadataRegistry()
     metadata_registry.registerWriter('oai_dc', server.oai_dc_writer)
     return server.Server(myserver, metadata_registry)
Пример #3
0
 def setUp(self):
     self._fakeserver = fakeserver.FakeServer()
     metadata_registry = metadata.MetadataRegistry()
     metadata_registry.registerWriter('oai_dc', server.oai_dc_writer)
     metadata_registry.registerReader('oai_dc', metadata.oai_dc_reader)
     self._server = server.Server(self._fakeserver,
                                  metadata_registry,
                                  resumption_batch_size=7)
Пример #4
0
def getServer():
    myserver = ss_server.BatchingSharedShelfServerBase()
    metadata_registry = metadata.MetadataRegistry()
    metadata_registry.registerWriter('oai_dc', server.oai_dc_writer)
    metadata_registry.registerWriter('oai_ssio', ss_server.oai_ssio_writer)
    return server.BatchingServer(myserver,
                                 metadata_registry,
                                 resumption_batch_size=10)
Пример #5
0
 def test_tree_resumption(self):
     metadata_registry = metadata.MetadataRegistry()
     metadata_registry.registerWriter('oai_dc', server.oai_dc_writer)
     myserver = server.XMLTreeServer(self._server, metadata_registry)
     tree = myserver.listIdentifiers(metadataPrefix='oai_dc')
     self.assert_(oaischema.validate(tree))
     # we should find a resumptionToken element with text
     self.assert_(
         tree.xpath('//oai:resumptionToken/text()',
                    namespaces={'oai': NS_OAIPMH}))
Пример #6
0
 def setUp(self):
     self._fakeserver = fakeserver.FakeServer()
     metadata_registry = metadata.MetadataRegistry()
     metadata_registry.registerWriter('oai_dc', server.oai_dc_writer)
     metadata_registry.registerReader('oai_dc', metadata.oai_dc_reader)
     self._xmlserver = server.XMLTreeServer(
         self._fakeserver,
         metadata_registry,
         nsmap={'cow': 'http://www.cow.com'})
     self._server = server.Server(self._fakeserver,
                                  metadata_registry,
                                  nsmap={'cow': 'http://www.cow.com'})
Пример #7
0
def create_metadata_registry(harvest_type=None, service_url=None):
    '''Return new metadata registry with all common metadata readers

    The readers currently implemented are for metadataPrefixes
    oai_dc, nrd, rdf and xml.

    :returns: metadata registry instance
    :rtype: oaipmh.metadata.MetadataRegistry
    '''
    registry = om.MetadataRegistry()
    registry.registerReader('oai_dc',
                            dc_metadata_reader(harvest_type or 'default'))
    registry.registerReader('cmdi0571', CmdiReader(service_url))
    registry.registerReader('oai_datacite3', DataCiteReader())
    registry.registerReader('nrd', nrd_metadata_reader)
    registry.registerReader('rdf', rdf_reader)
    registry.registerReader('xml', xml_reader)
    return registry
Пример #8
0
def main(global_config, **settings):
    settings.update(parse_settings(settings))
    config = Configurator(settings=settings)
    config.add_route("root", "/")
    config.scan()

    mongo = mongodb.MongoDB(
        settings["oaipmh.mongodb.dsn"],
        settings["oaipmh.mongodb.dbname"],
        options={
            "replicaSet": settings["oaipmh.mongodb.replicaset"],
            "readPreference": settings["oaipmh.mongodb.readpreference"],
        },
    )
    context = {
        "url_for_html":
        lambda acron, doc_id: urljoin(settings["oaipmh.site.baseurl"],
                                      f"/j/{acron}/a/{doc_id}"),
    }
    session = mongodb.Session(mongo, context=context)

    metadata_registry = metadata.MetadataRegistry()

    for fmt in METADATA_FORMATS:
        metadata_registry.registerWriter(fmt[0], fmt[3])

    earliest_datestamp = session.documents.earliest_datestamp() or parse_date(
        "1998-01-01")

    oaiserver = server.BatchingServer(
        OAIServer(
            session,
            meta=server_identity(settings,
                                 earliest_datestamp=earliest_datestamp),
            formats=METADATA_FORMATS,
        ),
        metadata_registry=metadata_registry,
        resumption_batch_size=settings["oaipmh.resumptiontoken.batchsize"],
    )

    config.add_request_method(lambda request: oaiserver,
                              "oaiserver",
                              reify=True)
    return config.make_wsgi_app()
Пример #9
0
class MARCXMLReader(object):
    """Returns the PyMARC record from the OAI structure for MARC XML"""
    def __call__(self, element):
        print element[0][1].text
        handler = marcxml.XmlHandler()
        marcxml.parse_xml(StringIO(tostring(element[0])), handler)
        return handler.records[0]


marcxml_reader = MARCXMLReader()

# Defining of metadata Readers in the Registry

from oaipmh import metadata

registry = metadata.MetadataRegistry()
registry.registerReader('marc21', marcxml_reader)

#### OAI-PMH Client processing

oai = Client('http://snape.mzk.cz/OAI-script', registry)

recs = oai.listRecords(metadataPrefix='marc21', set='MZK03')

for rec in recs:
    print rec[0].identifier()
    r = rec[1]  # Get pyMARC representation
    print r['856']
    print r['034']
    print r['008']
    print