From dc819b167465fa634cc5229069f8c422008f6aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ur=C3=ADa?= Date: Fri, 13 Feb 2026 13:35:18 +0100 Subject: [PATCH] [REF] Refactor --- app/api/{config => }/actions/__init__.py | 0 app/api/{config => }/actions/install.py | 4 +- app/api/config/cruds/__init__.py | 0 app/api/{config => cruds}/__init__.py | 0 app/api/{config => }/cruds/env/create.py | 4 +- app/api/{config => }/cruds/env/delete.py | 4 +- app/api/{config => }/cruds/env/read.py | 4 +- app/api/{config => }/cruds/env/update.py | 3 +- .../{config => }/cruds/library/__init__.py | 0 app/api/{config => }/cruds/library/create.py | 2 +- app/api/{config => }/cruds/library/delete.py | 2 +- app/api/{config => }/cruds/library/read.py | 2 +- app/api/{config => }/cruds/library/update.py | 2 +- app/api/{config => }/cruds/path/create.py | 2 +- app/api/{config => }/cruds/path/delete.py | 2 +- app/api/{config => }/cruds/path/read.py | 2 +- app/api/{config => }/cruds/path/update.py | 2 +- app/db/library/__init__.py | 1 - app/db/library/config.py | 2 - app/db/library/engine.py | 4 -- app/schema/config/__init__.py | 4 -- app/schema/config/base.py | 4 -- app/schema/library/__init__.py | 7 +- app/schema/library/book.py | 10 +-- app/schema/{config => library}/env.py | 0 app/schema/{config => library}/library.py | 8 ++- app/schema/{config => library}/path.py | 0 tests/test_config.py | 35 --------- tests/test_db.py | 71 +++++++++++++++++++ 29 files changed, 101 insertions(+), 80 deletions(-) rename app/api/{config => }/actions/__init__.py (100%) rename app/api/{config => }/actions/install.py (75%) delete mode 100644 app/api/config/cruds/__init__.py rename app/api/{config => cruds}/__init__.py (100%) rename app/api/{config => }/cruds/env/create.py (57%) rename app/api/{config => }/cruds/env/delete.py (59%) rename app/api/{config => }/cruds/env/read.py (70%) rename app/api/{config => }/cruds/env/update.py (58%) rename app/api/{config => }/cruds/library/__init__.py (100%) rename app/api/{config => }/cruds/library/create.py (88%) rename app/api/{config => }/cruds/library/delete.py (73%) rename app/api/{config => }/cruds/library/read.py (80%) rename app/api/{config => }/cruds/library/update.py (68%) rename app/api/{config => }/cruds/path/create.py (74%) rename app/api/{config => }/cruds/path/delete.py (74%) rename app/api/{config => }/cruds/path/read.py (84%) rename app/api/{config => }/cruds/path/update.py (72%) delete mode 100644 app/db/library/__init__.py delete mode 100644 app/db/library/config.py delete mode 100644 app/db/library/engine.py delete mode 100644 app/schema/config/__init__.py delete mode 100644 app/schema/config/base.py rename app/schema/{config => library}/env.py (100%) rename app/schema/{config => library}/library.py (83%) rename app/schema/{config => library}/path.py (100%) delete mode 100644 tests/test_config.py create mode 100644 tests/test_db.py diff --git a/app/api/config/actions/__init__.py b/app/api/actions/__init__.py similarity index 100% rename from app/api/config/actions/__init__.py rename to app/api/actions/__init__.py diff --git a/app/api/config/actions/install.py b/app/api/actions/install.py similarity index 75% rename from app/api/config/actions/install.py rename to app/api/actions/install.py index 4cabefb..4d8653f 100644 --- a/app/api/config/actions/install.py +++ b/app/api/actions/install.py @@ -1,8 +1,8 @@ from sqlalchemy import create_engine from sqlalchemy.orm import Session -from ....schema.config.base import Base -from ....db.config.config import get_engine_configuration +from ...schema.library.base import Base +from ...db.config.config import get_engine_configuration def install(): engine_string, echo = get_engine_configuration() diff --git a/app/api/config/cruds/__init__.py b/app/api/config/cruds/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/api/config/__init__.py b/app/api/cruds/__init__.py similarity index 100% rename from app/api/config/__init__.py rename to app/api/cruds/__init__.py diff --git a/app/api/config/cruds/env/create.py b/app/api/cruds/env/create.py similarity index 57% rename from app/api/config/cruds/env/create.py rename to app/api/cruds/env/create.py index 772dd30..67cfe2e 100644 --- a/app/api/config/cruds/env/create.py +++ b/app/api/cruds/env/create.py @@ -1,8 +1,6 @@ -import os from sqlalchemy.orm import Session -from .....schema.config.env import Env +from ....schema.library.env import Env def create(session:Session, env:Env): session.add(env) - os.environ[env.key] = env.value session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/env/delete.py b/app/api/cruds/env/delete.py similarity index 59% rename from app/api/config/cruds/env/delete.py rename to app/api/cruds/env/delete.py index f7ecc62..6beae7e 100644 --- a/app/api/config/cruds/env/delete.py +++ b/app/api/cruds/env/delete.py @@ -1,9 +1,7 @@ -import os from sqlalchemy.orm import Session -from .....schema.config.env import Env +from ....schema.library.env import Env def delete(session:Session, env:Env): session.delete(env) - delete(os.environ[env.key]) session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/env/read.py b/app/api/cruds/env/read.py similarity index 70% rename from app/api/config/cruds/env/read.py rename to app/api/cruds/env/read.py index ea540e8..93a186e 100644 --- a/app/api/config/cruds/env/read.py +++ b/app/api/cruds/env/read.py @@ -1,11 +1,9 @@ -import os from sqlalchemy.orm import Session from sqlalchemy import select -from .....schema.config.env import Env +from ....schema.library.env import Env def read(session:Session, _id:int): stmt = select(Env).where(Env.id == _id) env:Env = session.scalars(stmt).one() - os.environ[env.key] = env.value return env \ No newline at end of file diff --git a/app/api/config/cruds/env/update.py b/app/api/cruds/env/update.py similarity index 58% rename from app/api/config/cruds/env/update.py rename to app/api/cruds/env/update.py index 8837017..01a5282 100644 --- a/app/api/config/cruds/env/update.py +++ b/app/api/cruds/env/update.py @@ -1,8 +1,7 @@ import os from sqlalchemy.orm import Session -from .....schema.config.env import Env +from ....schema.library.env import Env def update(session:Session, env:Env): - os.environ[env.key] = env.value session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/library/__init__.py b/app/api/cruds/library/__init__.py similarity index 100% rename from app/api/config/cruds/library/__init__.py rename to app/api/cruds/library/__init__.py diff --git a/app/api/config/cruds/library/create.py b/app/api/cruds/library/create.py similarity index 88% rename from app/api/config/cruds/library/create.py rename to app/api/cruds/library/create.py index c78222f..6d9eb36 100644 --- a/app/api/config/cruds/library/create.py +++ b/app/api/cruds/library/create.py @@ -1,5 +1,5 @@ from sqlalchemy.orm import Session -from .....schema.config.library import Library +from ....schema.library.library import Library import logging logger = logging.getLogger(__name__) diff --git a/app/api/config/cruds/library/delete.py b/app/api/cruds/library/delete.py similarity index 73% rename from app/api/config/cruds/library/delete.py rename to app/api/cruds/library/delete.py index 0f2ade9..001c9be 100644 --- a/app/api/config/cruds/library/delete.py +++ b/app/api/cruds/library/delete.py @@ -1,6 +1,6 @@ from sqlalchemy.orm import Session -from .....schema.config.library import Library +from ....schema.library.library import Library def delete(session:Session, library:Library): session.delete(library) diff --git a/app/api/config/cruds/library/read.py b/app/api/cruds/library/read.py similarity index 80% rename from app/api/config/cruds/library/read.py rename to app/api/cruds/library/read.py index 8960725..49cee27 100644 --- a/app/api/config/cruds/library/read.py +++ b/app/api/cruds/library/read.py @@ -1,7 +1,7 @@ from sqlalchemy.orm import Session from sqlalchemy import select -from .....schema.config.library import Library +from ....schema.library.library import Library def read(session:Session, _id:int): stmt = select(Library).where(Library.id == _id) diff --git a/app/api/config/cruds/library/update.py b/app/api/cruds/library/update.py similarity index 68% rename from app/api/config/cruds/library/update.py rename to app/api/cruds/library/update.py index d35651d..a7a03c2 100644 --- a/app/api/config/cruds/library/update.py +++ b/app/api/cruds/library/update.py @@ -1,6 +1,6 @@ from sqlalchemy.orm import Session -from .....schema.config.library import Library +from ....schema.library.library import Library def update(session:Session, library:Library): session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/path/create.py b/app/api/cruds/path/create.py similarity index 74% rename from app/api/config/cruds/path/create.py rename to app/api/cruds/path/create.py index 87cea76..b50af17 100644 --- a/app/api/config/cruds/path/create.py +++ b/app/api/cruds/path/create.py @@ -1,5 +1,5 @@ from sqlalchemy.orm import Session -from .....schema.config.path import Path +from ....schema.library.path import Path def create(session:Session, path:Path): session.add(path) diff --git a/app/api/config/cruds/path/delete.py b/app/api/cruds/path/delete.py similarity index 74% rename from app/api/config/cruds/path/delete.py rename to app/api/cruds/path/delete.py index 3bd4444..688231b 100644 --- a/app/api/config/cruds/path/delete.py +++ b/app/api/cruds/path/delete.py @@ -1,6 +1,6 @@ from sqlalchemy.orm import Session -from .....schema.config.path import Path +from ....schema.library.path import Path def delete(session:Session, path:Path): session.delete(path) diff --git a/app/api/config/cruds/path/read.py b/app/api/cruds/path/read.py similarity index 84% rename from app/api/config/cruds/path/read.py rename to app/api/cruds/path/read.py index a5b9e67..97c56dd 100644 --- a/app/api/config/cruds/path/read.py +++ b/app/api/cruds/path/read.py @@ -2,7 +2,7 @@ import os from sqlalchemy.orm import Session from sqlalchemy import select -from .....schema.config.path import Path +from ....schema.library.path import Path def read(session:Session, _id:int): stmt = select(Path).where(Path.id == _id) diff --git a/app/api/config/cruds/path/update.py b/app/api/cruds/path/update.py similarity index 72% rename from app/api/config/cruds/path/update.py rename to app/api/cruds/path/update.py index e9c0534..93c4dd4 100644 --- a/app/api/config/cruds/path/update.py +++ b/app/api/cruds/path/update.py @@ -1,7 +1,7 @@ import os from sqlalchemy.orm import Session -from .....schema.config.path import Path +from ....schema.library.path import Path def update(session:Session, path:Path): session.commit() \ No newline at end of file diff --git a/app/db/library/__init__.py b/app/db/library/__init__.py deleted file mode 100644 index 9d088ff..0000000 --- a/app/db/library/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .engine import engine \ No newline at end of file diff --git a/app/db/library/config.py b/app/db/library/config.py deleted file mode 100644 index 3bb62c8..0000000 --- a/app/db/library/config.py +++ /dev/null @@ -1,2 +0,0 @@ -engine_string = "sqlite://" -echo = True \ No newline at end of file diff --git a/app/db/library/engine.py b/app/db/library/engine.py deleted file mode 100644 index f6fe154..0000000 --- a/app/db/library/engine.py +++ /dev/null @@ -1,4 +0,0 @@ -from sqlalchemy import create_engine -from .config import engine_string, echo - -engine = create_engine(engine_string, echo=echo) \ No newline at end of file diff --git a/app/schema/config/__init__.py b/app/schema/config/__init__.py deleted file mode 100644 index 6b3335a..0000000 --- a/app/schema/config/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .base import Base -from .env import Env -from .library import Library -from .path import Path \ No newline at end of file diff --git a/app/schema/config/base.py b/app/schema/config/base.py deleted file mode 100644 index 2278416..0000000 --- a/app/schema/config/base.py +++ /dev/null @@ -1,4 +0,0 @@ -from sqlalchemy.orm import DeclarativeBase - -class Base(DeclarativeBase): - pass \ No newline at end of file diff --git a/app/schema/library/__init__.py b/app/schema/library/__init__.py index 2284179..69eb8c5 100644 --- a/app/schema/library/__init__.py +++ b/app/schema/library/__init__.py @@ -1,3 +1,6 @@ from .base import Base -from .book import Book -from .tag import Tag \ No newline at end of file +from .env import Env +#from .tag import Tag +from .path import Path +from .library import Library +from .book import Book \ No newline at end of file diff --git a/app/schema/library/book.py b/app/schema/library/book.py index bfee685..0cf5038 100644 --- a/app/schema/library/book.py +++ b/app/schema/library/book.py @@ -1,6 +1,6 @@ from typing import List from typing import Optional -from sqlalchemy import String +from sqlalchemy import String, ForeignKey from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column from sqlalchemy.orm import relationship @@ -10,14 +10,16 @@ from .base import Base class Book(Base): __tablename__ = "book" id: Mapped[int] = mapped_column(primary_key=True) + hash: Mapped[str] = mapped_column(String(255)) + file_name: Mapped[str] = mapped_column(String(255)) + file_path: Mapped[str] = mapped_column(String(65656)) name: Mapped[str] = mapped_column(String(255)) publisher: Mapped[str] = mapped_column(String(255)) notes: Mapped[str] = mapped_column(String(65656)) classification: Mapped[int] = mapped_column(primary_key=True) - tags: Mapped[List["Tags"]] = relationship( - back_populates="books", cascade="all, delete-orphan" - ) + library_id: Mapped[int] = mapped_column(ForeignKey("library.id")) + library: Mapped[int] = relationship("Library", back_populates="books") def __repr__(self) -> str: return f"Book(id={self.id!r}, name={self.name!r}, publisher={self.publisher!r}," \ diff --git a/app/schema/config/env.py b/app/schema/library/env.py similarity index 100% rename from app/schema/config/env.py rename to app/schema/library/env.py diff --git a/app/schema/config/library.py b/app/schema/library/library.py similarity index 83% rename from app/schema/config/library.py rename to app/schema/library/library.py index b20c01b..57c7211 100644 --- a/app/schema/config/library.py +++ b/app/schema/library/library.py @@ -12,7 +12,6 @@ class Library(Base): id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(255)) notes: Mapped[str] = mapped_column(String(65656)) - connection_string: Mapped[str] = mapped_column(String(65656)) envs: Mapped[List["Env"]] = relationship( back_populates="library", cascade="all, delete-orphan" @@ -22,6 +21,9 @@ class Library(Base): back_populates="library", cascade="all, delete-orphan" ) + books: Mapped[List["Book"]] = relationship( + back_populates="library", cascade="all, delete-orphan" + ) + def __repr__(self) -> str: - return f"Library(id={self.id!r}, name={self.name!r}, notes={self.notes!r}," \ - f" connection_string={self.connection_string!r})" \ No newline at end of file + return f"Library(id={self.id!r}, name={self.name!r}, notes={self.notes!r}" \ No newline at end of file diff --git a/app/schema/config/path.py b/app/schema/library/path.py similarity index 100% rename from app/schema/config/path.py rename to app/schema/library/path.py diff --git a/tests/test_config.py b/tests/test_config.py deleted file mode 100644 index 6dc9f55..0000000 --- a/tests/test_config.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import unittest - -from sqlalchemy.orm import Session -from sqlalchemy.orm import sessionmaker - -from app.api.config.actions import install -from app.api.config.cruds.library import create, read -from app.schema.config import Library - -import logging -logger = logging.getLogger(__name__) - -class TestConfig(unittest.TestCase): - - def setUp(self): - os.environ["DEV_URIA_BIBLIOGAME_CONFIG_DB"] = "sqlite:///" - os.environ["DEV_URIA_BIBLIOGAME_DEBUG"] = "true" - self.engine = install() - self.library = Library( - name="Library Test", - notes="My duckling library test", - connection_string="sqlite:///" - ) - self.Session = sessionmaker(bind=self.engine) - self.session = self.Session() - create(self.session, self.library) - return super().setUp() - - def test_install(self): - library_string = str(read(self.session, 1)) - self.assertEqual(library_string, str(self.library)) - -if __name__ == "__main__": - unittest.main() \ No newline at end of file diff --git a/tests/test_db.py b/tests/test_db.py new file mode 100644 index 0000000..307878f --- /dev/null +++ b/tests/test_db.py @@ -0,0 +1,71 @@ +import os +import unittest + +from sqlalchemy.orm import sessionmaker + +from app.api.actions import install +from app.api.cruds.library import create, read +from app.schema.library import Library, Path, Env + +import logging +logger = logging.getLogger(__name__) + +class TestDB(unittest.TestCase): + + def setUp(self): + os.environ["DEV_URIA_BIBLIOGAME_CONFIG_DB"] = "sqlite:///" + os.environ["DEV_URIA_BIBLIOGAME_DEBUG"] = "true" + self.engine = install() + self.library = Library( + name="Library Test", + notes="My duckling library test", + paths=[ + Path( + path="/home/ivan/Documentos/ttprpg" + ) + ], + envs=[ + Env( + key="ENVIRONMENT_VARIABLE", + value="Clearly an environment variable" + ) + ] + ) + self.Session = sessionmaker(bind=self.engine) + self.session = self.Session() + create(self.session, self.library) + return super().setUp() + + def test_install(self): + library_string = str(read(self.session, 1)) + self.assertEqual(library_string, str(self.library)) + + def test_read_name(self): + library = read(self.session, 1) + logger.debug(f"Name: {library.name}") + self.assertEqual(library.name, self.library.name) + self.assertEqual(library.name, "Library Test") + + def test_read_notes(self): + library = read(self.session, 1) + logger.debug(f"Notes: {library.notes}") + self.assertEqual(library.notes, self.library.notes) + self.assertEqual(library.notes, "My duckling library test") + + def test_read_path(self): + library = read(self.session, 1) + logger.debug(f"PATH: {library.paths[0].path}") + self.assertEqual(library.paths[0].path, self.library.paths[0].path) + self.assertEqual(library.paths[0].path, "/home/ivan/Documentos/ttprpg") + + def test_read_env(self): + library = read(self.session, 1) + logger.debug(f"ENV: {library.envs[0].key} - {library.envs[0].value}") + self.assertEqual(library.envs[0].key, self.library.envs[0].key) + self.assertEqual(library.envs[0].value, self.library.envs[0].value) + self.assertEqual(library.envs[0].key, "ENVIRONMENT_VARIABLE") + self.assertEqual(library.envs[0].value, "Clearly an environment variable") + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file