def get( self, resource_name, parent_id, object_id, id_field=DEFAULT_ID_FIELD, modified_field=DEFAULT_MODIFIED_FIELD, ): query = """ SELECT as_epoch(last_modified) AS last_modified, data FROM objects WHERE id = :object_id AND parent_id = :parent_id AND resource_name = :resource_name AND NOT deleted; """ placeholders = dict(object_id=object_id, parent_id=parent_id, resource_name=resource_name) with self.client.connect(readonly=True) as conn: result = conn.execute(query, placeholders) if result.rowcount == 0: raise exceptions.ObjectNotFoundError(object_id) else: existing = result.fetchone() obj = existing["data"] obj[id_field] = object_id obj[modified_field] = existing["last_modified"] return obj
def delete( self, resource_name, parent_id, object_id, id_field=DEFAULT_ID_FIELD, with_deleted=True, modified_field=DEFAULT_MODIFIED_FIELD, deleted_field=DEFAULT_DELETED_FIELD, auth=None, last_modified=None, ): if with_deleted: query = """ UPDATE objects SET deleted=TRUE, data=(:deleted_data)::JSONB, last_modified=from_epoch(:last_modified) WHERE id = :object_id AND parent_id = :parent_id AND resource_name = :resource_name AND NOT deleted RETURNING as_epoch(last_modified) AS last_modified; """ else: query = """ DELETE FROM objects WHERE id = :object_id AND parent_id = :parent_id AND resource_name = :resource_name AND NOT deleted RETURNING as_epoch(last_modified) AS last_modified; """ deleted_data = self.json.dumps(dict([(deleted_field, True)])) placeholders = dict( object_id=object_id, parent_id=parent_id, resource_name=resource_name, last_modified=last_modified, deleted_data=deleted_data, ) with self.client.connect() as conn: result = conn.execute(query, placeholders) if result.rowcount == 0: raise exceptions.ObjectNotFoundError(object_id) updated = result.fetchone() obj = {} obj[modified_field] = updated["last_modified"] obj[id_field] = object_id obj[deleted_field] = True return obj
def get( self, resource_name, parent_id, object_id, id_field=DEFAULT_ID_FIELD, modified_field=DEFAULT_MODIFIED_FIELD, ): objects = self._store[parent_id][resource_name] if object_id not in objects: raise exceptions.ObjectNotFoundError(object_id) return {**objects[object_id]}
def object_not_found(*args, **kwargs): raise exceptions.ObjectNotFoundError()