def _lookup_id(id: str, table: Type[database.BaseModel], session: SqlSession) -> Type[database.BaseModel]: """lookup row by id""" row = session.query(table).filter(table.id == id).first() if not row: raise NotFoundError(f"{table.__name__} {id} not found") return row
def delete_collection(self, id: str, **kwargs) -> schemas.Collection: """delete collection""" with self.session.writer.context_session() as session: query = session.query( self.collection_table).filter(self.collection_table.id == id) data = query.first() if not data: raise NotFoundError(f"Collection {id} not found") query.delete() data.base_url = str(kwargs["request"].base_url) return schemas.Collection.from_orm(data)
def delete_item(self, id: str, **kwargs) -> schemas.Item: """Delete item.""" with self.session.writer.context_session() as session: query = session.query( self.item_table).filter(self.item_table.id == id) data = query.first() if not data: raise NotFoundError(f"Item {id} not found") query.delete() data.base_url = str(kwargs["request"].base_url) return schemas.Item.from_orm(data)
def update_collection(self, model: schemas.Collection, **kwargs) -> schemas.Collection: """update collection""" with self.session.reader.context_session() as session: query = session.query(self.collection_table).filter( self.collection_table.id == model.id) if not query.scalar(): raise NotFoundError(f"Item {model.id} not found") # SQLAlchemy orm updates don't seem to like geoalchemy types data = self.collection_table.get_database_model(model) data.pop("geometry", None) query.update(data) return model
def update_item(self, model: schemas.Item, **kwargs) -> schemas.Item: """update item""" with self.session.reader.context_session() as session: query = session.query( self.item_table).filter(self.item_table.id == model.id) if not query.scalar(): raise NotFoundError(f"Item {model.id} not found") # SQLAlchemy orm updates don't seem to like geoalchemy types data = self.item_table.get_database_model(model) data.pop("geometry", None) query.update(data) response = self.item_table.from_schema(model) response.base_url = str(kwargs["request"].base_url) return schemas.Item.from_orm(response) return model