Page MenuHomec4science

oai2d.py
No OneTemporary

File Metadata

Created
Sat, Sep 21, 15:48

oai2d.py

## $Id$
##
## This file is part of CDS Invenio.
## Copyright (C) 2002, 2003, 2004, 2005, 2006 CERN.
##
## CDS Invenio is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License as
## published by the Free Software Foundation; either version 2 of the
## License, or (at your option) any later version.
##
## CDS Invenio is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with CDS Invenio; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
"""OAI interface for CDS Invenio/MySQL written in Python compliant with OAI-PMH2.0"""
__lastupdated__ = """$Date$"""
__version__ = "$Id$"
import os
import sys
import urllib
import time
from mod_python import apache
from invenio.dbquery import run_sql
from invenio.oai_repository_config import *
from invenio import oai_repository
from invenio.config import cachedir
def index (req):
"OAI repository interface"
## check availability
if os.path.exists("%s/RTdata/RTdata" % cachedir):
time_gap = int(time.time() - os.path.getmtime("%s/RTdata/RTdata" % cachedir))
if(time_gap < oai_sleep):
req.err_headers_out["Status-Code"] = "503"
req.err_headers_out["Retry-After"] = "%d" % (oai_sleep - time_gap)
req.status = apache.HTTP_SERVICE_UNAVAILABLE
return "Retry after %d seconds" % (oai_sleep - time_gap)
command = "touch %s/RTdata/RTdata" % cachedir
os.system(command)
## parse input parameters
args = ""
if req.method == "GET":
args = req.args
elif req.method == "POST":
params = {}
for key in req.form.keys():
params[key] = req.form[key]
args = urllib.urlencode(params)
arg = oai_repository.parse_args(args)
## check request for OAI compliancy
oai_error = oai_repository.check_args(arg)
## create OAI response
req.content_type = "text/xml"
req.send_http_header()
if oai_error == "":
## OAI Identify
if arg['verb'] == "Identify":
req.write(oai_repository.oaiidentify(args))
## OAI ListSets
elif arg['verb'] == "ListSets":
req.write(oai_repository.oailistsets(args))
## OAI ListIdentifiers
elif arg['verb'] == "ListIdentifiers":
req.write(oai_repository.oailistidentifiers(args))
## OAI ListRecords
elif arg['verb'] == "ListRecords":
req.write(oai_repository.oailistrecords(args))
## OAI GetRecord
elif arg['verb'] == "GetRecord":
req.write(oai_repository.oaigetrecord(args))
## OAI ListMetadataFormats
elif arg['verb'] == "ListMetadataFormats":
req.write(oai_repository.oailistmetadataformats(args))
## Unknown verb
else:
req.write(oai_repository.oai_error("badVerb","Illegal OAI verb"))
## OAI error
else:
req.write(oai_repository.oai_header(args,""))
req.write(oai_error)
req.write(oai_repository.oai_footer(""))
return "\n"

Event Timeline