chore: Add pylint for storage (#1298)

This commit is contained in:
Fangyin Cheng
2024-03-15 15:42:46 +08:00
committed by GitHub
parent a207640ff2
commit 8897d6e8fd
50 changed files with 784 additions and 667 deletions

View File

@@ -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