container = self.root.appendChild(self.doc.createElement(self.verb))
container.appendChild(self.make_record(id, dc, ctime))
+ def format_id_header(self, id):
+ organization = self.identity[0][1]
+ if 'http' in id:
+ return ':'.join(['oai', organization.lower(), 'items', id.split('/')[-1]])
+ else:
+ return id
+
def list_records(self, from_time, until_time, token = None, ids_only = False):
"""Append ListIdentifiers or ListRecords result"""
offset = 0
for item in data:
dc, ctime = item
id, dc = self.parse_dc(dc)
+ id = self.format_id_header(id)
if id == None:
raise Exception("DataSource.list_records() didn't provide an 'identifier' dublin core element")
parts.append(Element('relation', id, 'hasPart', item))
resource = Resource(
+ Element('record_identifier', collection.public_id, related=collection),
Element('identifier', media_identifier(collection), related=collection),
Element('type', 'Collection'),
Element('title', collection.title),
mime_type = ''
resource = Resource(
+ Element('record_identifier', item.public_id, related=item),
Element('identifier', media_identifier(item), related=item),
Element('type', 'Sound'),
Element('title', title),
Element('publisher', settings.TELEMETA_ORGANIZATION),
date,
Date(item.collection.year_published, refinement='issued'),
- Element.multiple('coverage', item.location and item.location.fullnames(), 'spatial'),
+ Element.multiple('coverage', item.location and item.location.listnames(), 'spatial'),
Element('coverage', item.location_comment, 'spatial'),
Element('rights', item.collection.legal_rights, 'license'),
Element('rights', media_access_rights(item.collection), 'accessRights'),
def lookup_resource(media_id):
try:
- type, code = media_id.split(':', 1)
+ id = media_id.split(':')
+ type = id[-2]
+ code = id[-1]
except ValueError:
raise MalformedMediaIdentifier("Media identifier must be in type:code format")
- if (type == 'collection'):
+ if (type == 'collection') or (type == 'collections'):
try:
return MediaCollection.objects.get(code=code)
except MediaCollection.DoesNotExist:
return None
- elif (type == 'item'):
+ elif (type == 'item') or (type == 'items'):
try:
return MediaItem.objects.get(code=code)
except MediaItem.DoesNotExist:
try:
return MediaItem.objects.get(old_code=code)
except MediaItem.DoesNotExist:
- return None
+ try:
+ return MediaItem.objects.get(id=code)
+ except MediaItem.DoesNotExist:
+ return None
else:
raise MalformedMediaIdentifier("No such type in media identifier: " + type)
url(r'^oai/.*$', general_view.handle_oai_request, name="telemeta-oai"),
# Authentication
- url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'},
+ url(r'^login/$', 'ipauth.views.login', {'template_name': 'telemeta/login.html'},
name="telemeta-login"),
url(r'^logout/$', general_view.logout, name="telemeta-logout"),
def handle_oai_request(self, request):
host = request.META['HTTP_HOST']
datasource = TelemetaOAIDataSource()
- repository_name = settings.TELEMETA_DESCRIPTION
+ repository_name = settings.TELEMETA_ORGANIZATION
url = 'http://' + host + request.path
admin = settings.ADMINS[0][1]
provider = oai.DataProvider(datasource, repository_name, url, admin)