Source code for ckanext.oaipmh.controller
'''Serving controller interface for OAI-PMH
'''
import logging
from ckan.lib.base import BaseController, render
from pylons import request, response
from oaipmh.server import BatchingServer, oai_dc_writer
from oaipmh import metadata
from oaipmh.metadata import oai_dc_reader
from oaipmh_server import CKANServer
from rdftools import rdf_reader, rdf_writer
log = logging.getLogger(__name__)
[docs]class OAIPMHController(BaseController):
'''Controller for OAI-PMH server implementation. Returns only the index
page if no verb is specified.
'''
[docs] 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 = metadata.MetadataRegistry()
if 'metadataPrefix' in request.params:
if request.params['metadataPrefix'] == 'oai_dc':
metadata_registry.registerReader('oai_dc',
oai_dc_reader)
metadata_registry.registerWriter('oai_dc',
oai_dc_writer)
else:
metadata_registry.registerReader('rdf', rdf_reader)
metadata_registry.registerWriter('rdf', rdf_writer)
else:
metadata_registry.registerReader('oai_dc', oai_dc_reader)
metadata_registry.registerWriter('oai_dc', oai_dc_writer)
serv = BatchingServer(client,
metadata_registry=metadata_registry)
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')