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)
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)
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"))
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))
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) ]
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))
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
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))
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))
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))