]> git.parisson.com Git - telemeta.git/commitdiff
#67: fix ListIdentifiers
authorolivier <>
Thu, 2 Apr 2009 17:30:34 +0000 (17:30 +0000)
committerolivier <>
Thu, 2 Apr 2009 17:30:34 +0000 (17:30 +0000)
telemeta/interop/oai.py

index 6617fbf0214ea227bb724d0aaa6d8a5fae35911a..554079f33202d25c21295a086283ee55ae2db2c7 100644 (file)
@@ -247,6 +247,7 @@ class Response(object):
             'noSetHierarchy':           'This repository does not support sets.',
             'idDoesNotExist':           'No such record',
             'cannotDisseminateFormat':  'Unsupported metadata format',
+            'noRecordsMatch':           'The request returned an empty record set'
         }
 
         if not msg:
@@ -300,22 +301,32 @@ class Response(object):
                 self.error('badArgument', 'Incorrect resumption token')
                 return
 
+        if from_time:
+            self.request.setAttribute('from', self.make_time(from_time))
+        if until_time:
+            self.request.setAttribute('until', self.make_time(until_time))
+        if token:
+            self.request.setAttribute('resumptionToken', token)
+
         count = self.datasource.count_records(from_time, until_time)
         data = self.datasource.list_identifiers(offset, self.max_records_per_response, from_time, until_time)
         if (len(data) > self.max_records_per_response):
             raise Exception("DataSource.list_identifiers() returned too many records")
 
-        container = self.root.appendChild(self.doc.createElement(self.verb))
-        for item in data:
-            id, ctime = item
-            container.appendChild(self.make_record_header(id, ctime))
-        if count - offset > self.max_records_per_response:
-            token = self.root.appendChild(self.doc.createElement('resumptionToken'))
-            token.setAttribute('completeListSize', str(count))
-            token.appendChild(self.doc.createTextNode(str(offset + len(data))))
-        elif offset:
-            token = self.root.appendChild(self.doc.createElement('resumptionToken'))
-            token.setAttribute('completeListSize', str(count))
+        if len(data):
+            container = self.root.appendChild(self.doc.createElement(self.verb))
+            for item in data:
+                id, ctime = item
+                container.appendChild(self.make_record_header(id, ctime))
+            if count - offset > self.max_records_per_response:
+                token = self.root.appendChild(self.doc.createElement('resumptionToken'))
+                token.setAttribute('completeListSize', str(count))
+                token.appendChild(self.doc.createTextNode(str(offset + len(data))))
+            elif offset:
+                token = self.root.appendChild(self.doc.createElement('resumptionToken'))
+                token.setAttribute('completeListSize', str(count))
+        else:
+            self.error("noRecordsMatch")
             
     def free(self):
         """Free the resources used by this response"""