diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/config/__init__.py b/app/api/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/config/cruds/__init__.py b/app/api/config/cruds/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/config/cruds/env/create.py b/app/api/config/cruds/env/create.py new file mode 100644 index 0000000..772dd30 --- /dev/null +++ b/app/api/config/cruds/env/create.py @@ -0,0 +1,8 @@ +import os +from sqlalchemy.orm import Session +from .....schema.config.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/config/cruds/env/delete.py new file mode 100644 index 0000000..f7ecc62 --- /dev/null +++ b/app/api/config/cruds/env/delete.py @@ -0,0 +1,9 @@ +import os +from sqlalchemy.orm import Session + +from .....schema.config.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/config/cruds/env/read.py new file mode 100644 index 0000000..ea540e8 --- /dev/null +++ b/app/api/config/cruds/env/read.py @@ -0,0 +1,11 @@ +import os +from sqlalchemy.orm import Session +from sqlalchemy import select + +from .....schema.config.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/config/cruds/env/update.py new file mode 100644 index 0000000..8837017 --- /dev/null +++ b/app/api/config/cruds/env/update.py @@ -0,0 +1,8 @@ +import os +from sqlalchemy.orm import Session + +from .....schema.config.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/create.py b/app/api/config/cruds/library/create.py new file mode 100644 index 0000000..c9ab085 --- /dev/null +++ b/app/api/config/cruds/library/create.py @@ -0,0 +1,6 @@ +from sqlalchemy.orm import Session +from .....schema.config.library import LibraryConfig + +def create(session:Session, library:LibraryConfig): + session.add(library) + session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/library/delete.py b/app/api/config/cruds/library/delete.py new file mode 100644 index 0000000..ea1d9b1 --- /dev/null +++ b/app/api/config/cruds/library/delete.py @@ -0,0 +1,7 @@ +from sqlalchemy.orm import Session + +from .....schema.config.library import LibraryConfig + +def delete(session:Session, library:LibraryConfig): + session.delete(library) + session.commit() \ No newline at end of file diff --git a/app/api/config/cruds/library/read.py b/app/api/config/cruds/library/read.py new file mode 100644 index 0000000..29c9192 --- /dev/null +++ b/app/api/config/cruds/library/read.py @@ -0,0 +1,8 @@ +from sqlalchemy.orm import Session +from sqlalchemy import select + +from .....schema.config.library import LibraryConfig + +def read(session:Session, _id:int): + stmt = select(LibraryConfig).where(LibraryConfig.id == _id) + return session.scalars(stmt).one() \ No newline at end of file diff --git a/app/api/config/cruds/library/update.py b/app/api/config/cruds/library/update.py new file mode 100644 index 0000000..4fd071e --- /dev/null +++ b/app/api/config/cruds/library/update.py @@ -0,0 +1,6 @@ +from sqlalchemy.orm import Session + +from .....schema.config.library import LibraryConfig + +def update(session:Session, library:LibraryConfig): + session.commit() \ No newline at end of file diff --git a/app/api/library/__init__.py b/app/api/library/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/library/cruds/__init__.py b/app/api/library/cruds/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/library/cruds/book/create.py b/app/api/library/cruds/book/create.py new file mode 100644 index 0000000..d904239 --- /dev/null +++ b/app/api/library/cruds/book/create.py @@ -0,0 +1,6 @@ +from sqlalchemy.orm import Session +from .....schema.library.book import Book + +def create(session:Session, book:Book): + session.add(book) + session.commit() \ No newline at end of file diff --git a/app/api/library/cruds/book/delete.py b/app/api/library/cruds/book/delete.py new file mode 100644 index 0000000..420c397 --- /dev/null +++ b/app/api/library/cruds/book/delete.py @@ -0,0 +1,7 @@ +from sqlalchemy.orm import Session + +from .....schema.library.book import Book + +def delete(session:Session, book:Book): + session.delete(book) + session.commit() \ No newline at end of file diff --git a/app/api/library/cruds/book/read.py b/app/api/library/cruds/book/read.py new file mode 100644 index 0000000..bafd0c6 --- /dev/null +++ b/app/api/library/cruds/book/read.py @@ -0,0 +1,8 @@ +from sqlalchemy.orm import Session +from sqlalchemy import select + +from .....schema.library.book import Book + +def read(session:Session, _id:int): + stmt = select(Book).where(Book.id == _id) + return session.scalars(stmt).one() \ No newline at end of file diff --git a/app/api/library/cruds/book/update.py b/app/api/library/cruds/book/update.py new file mode 100644 index 0000000..2bbb26f --- /dev/null +++ b/app/api/library/cruds/book/update.py @@ -0,0 +1,6 @@ +from sqlalchemy.orm import Session + +from .....schema.library.book import Book + +def update(session:Session, book:Book): + session.commit() \ No newline at end of file diff --git a/app/api/library/cruds/tag.py b/app/api/library/cruds/tag.py new file mode 100644 index 0000000..e69de29 diff --git a/app/db/__init__.py b/app/db/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/db/config/__init__.py b/app/db/config/__init__.py new file mode 100644 index 0000000..9d088ff --- /dev/null +++ b/app/db/config/__init__.py @@ -0,0 +1 @@ +from .engine import engine \ No newline at end of file diff --git a/app/db/config/config.py b/app/db/config/config.py new file mode 100644 index 0000000..3bb62c8 --- /dev/null +++ b/app/db/config/config.py @@ -0,0 +1,2 @@ +engine_string = "sqlite://" +echo = True \ No newline at end of file diff --git a/app/db/config/engine.py b/app/db/config/engine.py new file mode 100644 index 0000000..f6fe154 --- /dev/null +++ b/app/db/config/engine.py @@ -0,0 +1,4 @@ +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/db/library/__init__.py b/app/db/library/__init__.py new file mode 100644 index 0000000..9d088ff --- /dev/null +++ b/app/db/library/__init__.py @@ -0,0 +1 @@ +from .engine import engine \ No newline at end of file diff --git a/app/db/library/config.py b/app/db/library/config.py new file mode 100644 index 0000000..3bb62c8 --- /dev/null +++ b/app/db/library/config.py @@ -0,0 +1,2 @@ +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 new file mode 100644 index 0000000..f6fe154 --- /dev/null +++ b/app/db/library/engine.py @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..e69de29 diff --git a/app/schema/base.py b/app/schema/config/base.py similarity index 100% rename from app/schema/base.py rename to app/schema/config/base.py diff --git a/app/schema/config/env.py b/app/schema/config/env.py new file mode 100644 index 0000000..92ed3d5 --- /dev/null +++ b/app/schema/config/env.py @@ -0,0 +1,22 @@ +from typing import List +from typing import Optional +from sqlalchemy import String +from sqlalchemy.orm import Mapped +from sqlalchemy.orm import mapped_column +from sqlalchemy.orm import relationship + +from .base import Base + +class Env(Base): + __tablename__ = "env" + id: Mapped[int] = mapped_column(primary_key=True) + key: Mapped[str] = mapped_column(String(255)) + value: Mapped[str] = mapped_column(String(65656)) + + libraries: Mapped[List["Library"]] = relationship( + back_populates="libraries", cascade="all, delete-orphan" + ) + + def __repr__(self) -> str: + return f"Book(id={self.id!r}, name={self.name!r}, publisher={self.publisher!r}," \ + " notes={self.notes!r}, classification={self.classification!r})" \ No newline at end of file diff --git a/app/schema/config/library.py b/app/schema/config/library.py new file mode 100644 index 0000000..535cbaf --- /dev/null +++ b/app/schema/config/library.py @@ -0,0 +1,23 @@ +from typing import List +from typing import Optional +from sqlalchemy import String +from sqlalchemy.orm import Mapped +from sqlalchemy.orm import mapped_column +from sqlalchemy.orm import relationship + +from .base import Base + +class LibraryConfig(Base): + __tablename__ = "library_config" + 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)) + + env: Mapped[List["Env"]] = relationship( + back_populates="env", cascade="all, delete-orphan" + ) + + def __repr__(self) -> str: + return f"Book(id={self.id!r}, name={self.name!r}, publisher={self.publisher!r}," \ + " notes={self.notes!r}, classification={self.classification!r})" \ No newline at end of file diff --git a/app/schema/library/__init__.py b/app/schema/library/__init__.py new file mode 100644 index 0000000..2284179 --- /dev/null +++ b/app/schema/library/__init__.py @@ -0,0 +1,3 @@ +from .base import Base +from .book import Book +from .tag import Tag \ No newline at end of file diff --git a/app/schema/library/base.py b/app/schema/library/base.py new file mode 100644 index 0000000..2278416 --- /dev/null +++ b/app/schema/library/base.py @@ -0,0 +1,4 @@ +from sqlalchemy.orm import DeclarativeBase + +class Base(DeclarativeBase): + pass \ No newline at end of file diff --git a/app/schema/book.py b/app/schema/library/book.py similarity index 92% rename from app/schema/book.py rename to app/schema/library/book.py index ba9c8a5..bfee685 100644 --- a/app/schema/book.py +++ b/app/schema/library/book.py @@ -16,7 +16,7 @@ class Book(Base): classification: Mapped[int] = mapped_column(primary_key=True) tags: Mapped[List["Tags"]] = relationship( - back_populates="book", cascade="all, delete-orphan" + back_populates="books", cascade="all, delete-orphan" ) def __repr__(self) -> str: diff --git a/app/schema/tag.py b/app/schema/library/tag.py similarity index 100% rename from app/schema/tag.py rename to app/schema/library/tag.py diff --git a/requirements.txt b/requirements.txt index 9db933a..ef535e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ flask sqlalchemy -requests \ No newline at end of file +requests +py-dotenv \ No newline at end of file