diff --git a/moai/oai.py b/moai/oai.py index 5436650..a6f9d53 100644 --- a/moai/oai.py +++ b/moai/oai.py @@ -18,10 +18,10 @@ def get_writer(prefix, config, db): class OAIServer(object): """An OAI-2.0 compliant oai server. - + Underlying code is based on pyoai's oaipmh.server' """ - + def __init__(self, db, config): self.db = db self.config = config @@ -43,7 +43,7 @@ def identify(self): pkg_resources.Requirement.parse('pyoai')) moai_egg = pkg_resources.working_set.find( pkg_resources.Requirement.parse('MOAI')) - + if moai_egg and pyoai_egg: version = '%s (using pyoai%s)' % ( moai_egg.version, @@ -58,7 +58,7 @@ def identify(self): '%s' 'http://moai.infrae.com' '' % version) - + return result def listMetadataFormats(self, identifier=None): @@ -69,14 +69,14 @@ def listMetadataFormats(self, identifier=None): schema = writer.get_schema_location() result.append((prefix, schema, ns)) return result - + def listSets(self, cursor=0, batch_size=20): for set in self.db.oai_sets(cursor, batch_size): yield [set['id'], set['name'], set['description']] def listRecords(self, metadataPrefix, set=None, from_=None, until=None, cursor=0, batch_size=10): - + self._checkMetadataPrefix(metadataPrefix) for record in self._listQuery(set, from_, until, cursor, batch_size): header, metadata = self._createHeaderAndMetadata(record) @@ -84,7 +84,7 @@ def listRecords(self, metadataPrefix, set=None, from_=None, until=None, def listIdentifiers(self, metadataPrefix, set=None, from_=None, until=None, cursor=0, batch_size=10): - + self._checkMetadataPrefix(metadataPrefix) for record in self._listQuery(set, from_, until, cursor, batch_size): yield self._createHeader(record) @@ -98,7 +98,7 @@ def getRecord(self, metadataPrefix, identifier): if header is None: raise oaipmh.error.IdDoesNotExistError(identifier) return header, metadata, None - + def _checkMetadataPrefix(self, metadataPrefix): if metadataPrefix not in self.config.metadata_prefixes: raise oaipmh.error.CannotDisseminateFormatError @@ -109,25 +109,26 @@ def _createHeader(self, record): if setspec in self.config.sets_deleted: deleted = True break - return oaipmh.common.Header(record['id'], + return oaipmh.common.Header(None, + record['id'], record['modified'], record['sets'], deleted) def _createHeaderAndMetadata(self, record): header = self._createHeader(record) - metadata = oaipmh.common.Metadata(record) + metadata = oaipmh.common.Metadata(None, record) metadata.record = record return header, metadata - - def _listQuery(self, set=None, from_=None, until=None, + + def _listQuery(self, set=None, from_=None, until=None, cursor=0, batch_size=10, identifier=None): - + now = datetime.utcnow() if until != None and until > now: # until should never be in the future until = now - + if self.config.delay: # subtract delay from until_ param, if present if until is None: @@ -135,13 +136,13 @@ def _listQuery(self, set=None, from_=None, until=None, until = until.timetuple() ut = time.mktime(until)-self.filter_data.delay until = datetime.fromtimestamp(ut) - + needed_sets = self.config.sets_needed.copy() if not set is None: needed_sets.add(set) allowed_sets = self.config.sets_allowed.copy() - disallowed_sets = self.config.sets_disallowed.copy() - + disallowed_sets = self.config.sets_disallowed.copy() + return self.db.oai_query(offset=cursor, batch_size=batch_size, needed_sets=needed_sets, @@ -155,12 +156,12 @@ def _listQuery(self, set=None, from_=None, until=None, def OAIServerFactory(db, config): """Create a new OAI batching OAI Server given a config and a database""" - + metadata_registry = oaipmh.metadata.MetadataRegistry() for prefix in config.metadata_prefixes: metadata_registry.registerWriter(prefix, get_writer(prefix, config, db)) - + return oaipmh.server.BatchingServer( OAIServer(db, config), metadata_registry=metadata_registry,