pass
def get_record(self, id):
- """Must return a tuple of the form (dublin core dict, change time)
+ """Must return a tuple of the form:
+ (
+ [(dublin core element, element value), ...],
+ change time
+ )
or None if the record doesn't exist.
The dublin core data must contain an 'identifier' element, which is the same
def list_records(self, offset, limit, from_time = None, until_time = None):
"""Must return the list of records between (optional) from and
until change time, starting from record at offset, with a maximum of limit
- entries. Each entry of the list must be a tuple of the form:
- (dublin core dict, change time)
+ entries. Each entry of the list must be a tuple of the same form as returned
+ by getRecord().
If no record matches, should return an empty list. The dublin core data must
contain an 'identifier' element, which can be used as a parameter to get_record()."""
self.append_elements(container, dc, prefix='dc')
return record
+ def parse_dc(self, data):
+ valid = ['title', 'creator', 'subject', 'description', 'publisher', 'contributor',
+ 'date', 'type', 'format', 'identifier', 'source', 'language', 'relation',
+ 'coverage', 'rights']
+
+ print data
+ parsed = []
+ id = None
+ for k, v in data:
+ try:
+ valid.index(k)
+ parsed.append((k, v))
+ if k == 'identifier':
+ id = v
+ except ValueError:
+ pass
+
+ return id, parsed
+
+
def get_record(self, id):
"""Append GetRecord result"""
record = self.datasource.get_record(id)
self.error('idDoesNotExist')
else:
dc, ctime = record
- if not dc.get('identifier'):
+ dc_id, dc = self.parse_dc(dc)
+ if dc_id == None:
raise Exception("DataSource.get_record() didn't provide an 'identifier' dublin core element")
- elif dc["identifier"] != id:
+ elif dc_id != id:
raise Exception("DataSource.get_record() returned an 'identifier' dublin core element "
"which is different from the requested identifier")
container = self.root.appendChild(self.doc.createElement(self.verb))
for item in data:
dc, ctime = item
- if not dc.get('identifier'):
+ id, dc = self.parse_dc(dc)
+ if id == None:
raise Exception("DataSource.list_records() didn't provide an 'identifier' dublin core element")
- id = dc['identifier']
if ids_only:
container.appendChild(self.make_record_header(id, ctime))
else:
self.oldest = datetime(1988, 1, 1)
self.data = {
- '10': ({'title': 'Roger Rabbit', 'creator': 'Bugs Bunny'}, self.oldest),
- '20': ({'title': 'Pulp Fiction', 'creator': 'Quentin Tarantino'}, datetime(1994, 10, 14)),
- '30': ({'title': 'Children of Men', 'creator': u'Alfonso Cuarón'}, datetime(2006, 10, 18))
+ '10': ([('title', 'Roger Rabbit'), ('title', 'Roger Le Lapin'), ('creator', 'Bugs Bunny')], self.oldest),
+ '20': ([('title', 'Pulp Fiction'), ('creator', 'Quentin Tarantino')], datetime(1994, 10, 14)),
+ '30': ([('title', 'Children of Men'), ('creator', u'Alfonso Cuarón')], datetime(2006, 10, 18))
}
def get_record(self, id):
record = self.data.get(id)
if record:
- record[0]['identifier'] = id
+ dc = []
+ dc[:] = record[0][:]
+ dc.insert(0, ('identifier', id))
+ record = (dc, record[1])
return record
def count_records(self, from_time = None, until_time = None):
i = 0
n = 0
for k in self.data:
- dc, ctime = self.data[k]
- dc['identifier'] = k
+ dc = []
+ _dc, ctime = self.data[k]
+ dc[:] = _dc[:]
+ dc.insert(0, ('identifier', k))
if ((not from_time) or ctime >= from_time) and ((not until_time) or ctime <= until_time):
if (i >= offset) and (n < limit):
result.append((dc, ctime))