[pyoai][Emiliano D'Alterio] Merged GIT pull request #6 (https://...
[email protected] Thu, 03 Oct 2013 12:11:04 +0200
| Newsgroups | gmane.comp.web.zope.silva.cvs |
|---|---|
| Message-ID | <[email protected]> |
author: Emiliano D'Alterio
date: Thu Oct 03 12:11:00 2013 +0200
revision: 162:ca55d79083e3 in pyoai
branch:
details: https://hg.infrae.com/pyoai?cmd=changeset;node=ca55d79083e3
modified: src/oaipmh/client.py src/oaipmh/common.py src/oaipmh/metadata.py
added:
removed:
log: Merged GIT pull request #6 (https://github.com/infrae/pyoai/pull/6).
diffstat:
src/oaipmh/client.py | 27 +++++++++++++++++----------
src/oaipmh/common.py | 18 +++++++++++++-----
src/oaipmh/metadata.py | 2 +-
3 files changed, 31 insertions(+), 16 deletions(-)
diffs (120 lines):
diff -r 2056f88f5365 -r ca55d79083e3 src/oaipmh/client.py
--- a/src/oaipmh/client.py Wed Aug 28 13:13:04 2013 +0200
+++ b/src/oaipmh/client.py Thu Oct 03 12:11:00 2013 +0200
@@ -8,6 +8,7 @@
from types import SliceType
from lxml import etree
import time
+import codecs
from oaipmh import common, metadata, validation, error
from oaipmh.datestamp import datestamp_to_datetime, datetime_to_datestamp
@@ -299,24 +300,30 @@
class Client(BaseClient):
def __init__(
- self, base_url, metadata_registry=None, credentials=None):
+ self, base_url, metadata_registry=None, credentials=None, local_file=False):
BaseClient.__init__(self, metadata_registry)
self._base_url = base_url
+ self._local_file = local_file
if credentials is not None:
self._credentials = base64.encodestring('%s:%s' % credentials)
else:
self._credentials = None
def makeRequest(self, **kw):
- """Actually retrieve XML from the server.
+ """Either load a local XML file or actually retrieve XML from a server.
"""
- # XXX include From header?
- headers = {'User-Agent': 'pyoai'}
- if self._credentials is not None:
- headers['Authorization'] = 'Basic ' + self._credentials.strip()
- request = urllib2.Request(
- self._base_url, data=urlencode(kw), headers=headers)
- return retrieveFromUrlWaiting(request)
+ if self._local_file:
+ with codecs.open(self._base_url, 'r', 'utf-8') as xmlfile:
+ text = xmlfile.read()
+ return text.encode('ascii', 'replace')
+ else:
+ # XXX include From header?
+ headers = {'User-Agent': 'pyoai'}
+ if self._credentials is not None:
+ headers['Authorization'] = 'Basic ' + self._credentials.strip()
+ request = urllib2.Request(
+ self._base_url, data=urlencode(kw), headers=headers)
+ return retrieveFromUrlWaiting(request)
def buildHeader(header_node, namespaces):
e = etree.XPathEvaluator(header_node,
@@ -326,7 +333,7 @@
str(e('string(oai:datestamp/text())')))
setspec = [str(s) for s in e('oai:setSpec/text()')]
deleted = e("@status = 'deleted'")
- return common.Header(identifier, datestamp, setspec, deleted)
+ return common.Header(header_node, identifier, datestamp, setspec, deleted)
def ResumptionListGenerator(firstBatch, nextBatch):
result, token = firstBatch()
diff -r 2056f88f5365 -r ca55d79083e3 src/oaipmh/common.py
--- a/src/oaipmh/common.py Wed Aug 28 13:13:04 2013 +0200
+++ b/src/oaipmh/common.py Thu Oct 03 12:11:00 2013 +0200
@@ -3,7 +3,8 @@
from oaipmh import error
class Header(object):
- def __init__(self, identifier, datestamp, setspec, deleted):
+ def __init__(self, element, identifier, datestamp, setspec, deleted):
+ self._element = element
# force identifier to be a string, it might be
# an lxml.etree._ElementStringResult...
try:
@@ -13,10 +14,13 @@
self._datestamp = datestamp
self._setspec = setspec
self._deleted = deleted
-
+
+ def element(self):
+ return self._element
+
def identifier(self):
return self._identifier
-
+
def datestamp(self):
return self._datestamp
@@ -27,12 +31,16 @@
return self._deleted
class Metadata(object):
- def __init__(self, map):
+ def __init__(self, element, map):
+ self._element = element
self._map = map
+ def element(self):
+ return self._element
+
def getMap(self):
return self._map
-
+
def getField(self, name):
return self._map[name]
diff -r 2056f88f5365 -r ca55d79083e3 src/oaipmh/metadata.py
--- a/src/oaipmh/metadata.py Wed Aug 28 13:13:04 2013 +0200
+++ b/src/oaipmh/metadata.py Thu Oct 03 12:11:00 2013 +0200
@@ -80,7 +80,7 @@
else:
raise Error, "Unknown field type: %s" % field_type
map[field_name] = value
- return common.Metadata(map)
+ return common.Metadata(element, map)
oai_dc_reader = MetadataReader(
fields={