Beispiel #1
0
 def delete_by_tag(self, project_name, tag):
     url = "%s%s/tag/%s/" % (self.server_url, project_name, tag)
     response, n_records = self.client.request(url, 'DELETE')
     if response.status != 200:
         raise RecordStoreAccessError("%d\n%s" %
                                      (response.status, n_records))
     return int(n_records)
Beispiel #2
0
 def _get_record(self, url):
     response, content = self._get(url, 'record')
     if response.status != 200:
         if response.status == 404:
             raise KeyError("No record was found at %s" % url)
         else:
             raise RecordStoreAccessError("%d\n%s" % (response.status, content))
     return serialization.decode_record(content)
Beispiel #3
0
 def project_info(self, project_name):
     """Return a project's long name and description."""
     project_url = "%s%s/" % (self.server_url, project_name)
     response, content = self._get(project_url, 'project')
     if response.status != 200:
         raise RecordStoreAccessError("Error in accessing %s\n%s: %s" % (project_url, response.status, content))
     data = serialization.decode_project_data(content)
     return dict((k, data[k]) for k in ("name", "description"))
Beispiel #4
0
 def has_project(self, project_name):
     project_url = "%s%s/" % (self.server_url, project_name)
     response, content = self._get(project_url, 'project')
     if response.status == 200:
         return True
     elif response.status in (401, 404):
         return False
     else:
         raise RecordStoreAccessError("%d\n%s" % (response.status, content))
Beispiel #5
0
 def list_projects(self):
     response, content = self._get(self.server_url, 'project-list')
     if response.status != 200:
         raise RecordStoreAccessError(
             "Error in accessing %s\n%s: %s" %
             (self.server_url, response.status, content))
     return [
         entry['id'] for entry in serialization.decode_project_list(content)
     ]
Beispiel #6
0
 def save(self, project_name, record):
     if not self.has_project(project_name):
         self.create_project(project_name)
     url = "%s%s/%s/" % (self.server_url, project_name, record.label)
     headers = {'Content-Type': 'application/vnd.sumatra.record-v%d+json' % API_VERSION}
     data = serialization.encode_record(record)
     response, content = self.client.request(url, 'PUT', data,
                                             headers=headers)
     if response.status not in (200, 201):
         raise RecordStoreAccessError("%d\n%s" % (response.status, content))
Beispiel #7
0
 def list(self, project_name, tags=None):
     project_url = "%s%s/" % (self.server_url, project_name)
     if tags:
         if not hasattr(tags, "__iter__"):
             tags = [tags]
         project_url += "?tags=%s" % ",".join(tags)
     response, content = self._get(project_url, 'project')
     if response.status != 200:
         raise RecordStoreAccessError("Could not access %s\n%s: %s" % (project_url, response.status, content))
     record_urls = serialization.decode_project_data(content)["records"]
     records = []
     for record_url in record_urls:
         records.append(self._get_record(record_url))
     return records
Beispiel #8
0
 def delete(self, project_name, label):
     url = "%s%s/%s/" % (self.server_url, project_name, label)
     response, deleted_content = self.client.request(url, 'DELETE')
     if response.status != 204:
         raise RecordStoreAccessError("%d\n%s" %
                                      (response.status, deleted_content))
Beispiel #9
0
 def update_project_info(self, project_name, long_name='', description=''):
     """Update a project's long name and description."""
     response, content = self._put_project(project_name, long_name,
                                           description)
     if response.status != 200:
         raise RecordStoreAccessError("%d\n%s" % (response.status, content))
Beispiel #10
0
 def create_project(self, project_name, long_name='', description=''):
     """Create an empty project in the record store."""
     response, content = self._put_project(project_name, long_name,
                                           description)
     if response.status != 201:
         raise RecordStoreAccessError("%d\n%s" % (response.status, content))