mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-07 12:00:46 +00:00
chore: Add pylint for storage (#1298)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""Database storage implementation using SQLAlchemy."""
|
||||
from contextlib import contextmanager
|
||||
from typing import Dict, List, Optional, Type, Union
|
||||
from typing import Dict, Iterator, List, Optional, Type, Union
|
||||
|
||||
from sqlalchemy import URL
|
||||
from sqlalchemy.orm import DeclarativeMeta, Session
|
||||
@@ -17,8 +18,8 @@ from .db_manager import BaseModel, BaseQuery, DatabaseManager
|
||||
|
||||
|
||||
def _copy_public_properties(src: BaseModel, dest: BaseModel):
|
||||
"""Simple copy public properties from src to dest"""
|
||||
for column in src.__table__.columns:
|
||||
"""Copy public properties from src to dest."""
|
||||
for column in src.__table__.columns: # type: ignore
|
||||
if column.name != "id":
|
||||
value = getattr(src, column.name)
|
||||
if value is not None:
|
||||
@@ -26,6 +27,8 @@ def _copy_public_properties(src: BaseModel, dest: BaseModel):
|
||||
|
||||
|
||||
class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
"""Database storage implementation using SQLAlchemy."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
db_url_or_db: Union[str, URL, DatabaseManager],
|
||||
@@ -36,6 +39,7 @@ class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
base: Optional[DeclarativeMeta] = None,
|
||||
query_class=BaseQuery,
|
||||
):
|
||||
"""Create a SQLAlchemyStorage instance."""
|
||||
super().__init__(serializer=serializer, adapter=adapter)
|
||||
self.db_manager = DatabaseManager.build_from(
|
||||
db_url_or_db, engine_args, base, query_class
|
||||
@@ -43,16 +47,19 @@ class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
self._model_class = model_class
|
||||
|
||||
@contextmanager
|
||||
def session(self) -> Session:
|
||||
def session(self) -> Iterator[Session]:
|
||||
"""Return a session."""
|
||||
with self.db_manager.session() as session:
|
||||
yield session
|
||||
|
||||
def save(self, data: T) -> None:
|
||||
"""Save data to the storage."""
|
||||
with self.session() as session:
|
||||
model_instance = self.adapter.to_storage_format(data)
|
||||
session.add(model_instance)
|
||||
|
||||
def update(self, data: T) -> None:
|
||||
"""Update data in the storage."""
|
||||
with self.session() as session:
|
||||
query = self.adapter.get_query_for_identifier(
|
||||
self._model_class, data.identifier, session=session
|
||||
@@ -66,6 +73,7 @@ class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
return
|
||||
|
||||
def save_or_update(self, data: T) -> None:
|
||||
"""Save or update data in the storage."""
|
||||
with self.session() as session:
|
||||
query = self.adapter.get_query_for_identifier(
|
||||
self._model_class, data.identifier, session=session
|
||||
@@ -79,6 +87,7 @@ class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
self.save(data)
|
||||
|
||||
def load(self, resource_id: ResourceIdentifier, cls: Type[T]) -> Optional[T]:
|
||||
"""Load data by identifier from the storage."""
|
||||
with self.session() as session:
|
||||
query = self.adapter.get_query_for_identifier(
|
||||
self._model_class, resource_id, session=session
|
||||
@@ -89,6 +98,7 @@ class SQLAlchemyStorage(StorageInterface[T, BaseModel]):
|
||||
return None
|
||||
|
||||
def delete(self, resource_id: ResourceIdentifier) -> None:
|
||||
"""Delete data by identifier from the storage."""
|
||||
with self.session() as session:
|
||||
query = self.adapter.get_query_for_identifier(
|
||||
self._model_class, resource_id, session=session
|
||||
|
Reference in New Issue
Block a user