diff --git a/kontor-api/src/models/media/file.py b/kontor-api/src/models/media/file.py index cb6fc52..7912637 100644 --- a/kontor-api/src/models/media/file.py +++ b/kontor-api/src/models/media/file.py @@ -25,8 +25,8 @@ def get_file_details(mediafile: MediaFile) -> MediaFileResponse | None: url=str(mediafile.url), review=(mediafile.review == 1), should_download=(mediafile.should_download == 1)) - print(f"id: {mediafile.id}: review: {response.review} <- {mediafile.review}") - print(f"id: {mediafile.id}: download: {response.should_download} <- {mediafile.should_download}") + #print(f"id: {mediafile.id}: review: {response.review} <- {mediafile.review}") + #print(f"id: {mediafile.id}: download: {response.should_download} <- {mediafile.should_download}") return response def set_file(model: MediaFileResponse, mediafile: MediaFile) -> None: diff --git a/kontor-api/src/schema/__init__.py b/kontor-api/src/schema/__init__.py index e69de29..e8a1685 100644 --- a/kontor-api/src/schema/__init__.py +++ b/kontor-api/src/schema/__init__.py @@ -0,0 +1,9 @@ +from .admin import User, Token, Role, AuthorizationMatrix, ModuleData, MailAccount, Mail +from .bookshelf import Article, Book, Author, BookshelfPublisher, ArticleAuthor, BookAuthor +from .comic import Comic, Artist, Publisher, Issue, StoryArc, TradePaperback, Volume, ComicWork, WorkType +from .metadata import MetaDataTable, MetaDataColumn +from .tysc import Card, CardSet, Sport, Team, FieldPosition, Rooster, Player, Vendor +from .media import MediaFile, MediaArticle, MediaVideo +from .base import Base +from .database import KontorDB, ColumnEntry + diff --git a/kontor-api/src/schema/admin.py b/kontor-api/src/schema/admin.py index 2cbfff4..c5b3e99 100644 --- a/kontor-api/src/schema/admin.py +++ b/kontor-api/src/schema/admin.py @@ -1,6 +1,7 @@ from datetime import datetime -from sqlalchemy import Column, ForeignKey, Integer, String, Boolean +from sqlalchemy import Column, ForeignKey, Integer, String +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship, mapped_column, Mapped from .base import Base, BaseMixin @@ -13,7 +14,7 @@ class User(Base, BaseMixin): user_name = Column(String(255), nullable=False) email = Column(String(255)) password = Column(String(255)) - enabled = Column(Boolean) + enabled = Column(BIT(1)) matrix = relationship("AuthorizationMatrix") tokens = relationship("Token") @@ -33,7 +34,7 @@ class Token(Base, BaseMixin): token = Column(String(255), nullable=False, unique=True) name = Column(String(255)) last_used_date: Mapped[datetime] = mapped_column() - enabled = Column(Boolean) + enabled = Column(BIT(1)) user_id = Column(String(255), ForeignKey("user.id"), nullable=False) user = relationship("User", back_populates="tokens") @@ -55,7 +56,7 @@ class AuthorizationMatrix(Base, BaseMixin): class ModuleData(Base, BaseMixin): __tablename__ = "module_data" module_name = Column(String(255), nullable=False) - import_data = Column(Boolean) + import_data = Column(BIT(1)) class MailAccount(Base, BaseMixin): @@ -65,7 +66,7 @@ class MailAccount(Base, BaseMixin): protocol = Column(String(255)) user_name = Column(String(255)) password = Column(String(255)) - start_tls = Column(Boolean) + start_tls = Column(BIT(1)) class Mail(Base, BaseMixin): diff --git a/kontor-api/src/schema/base.py b/kontor-api/src/schema/base.py index 5ef8183..4a354e7 100644 --- a/kontor-api/src/schema/base.py +++ b/kontor-api/src/schema/base.py @@ -1,7 +1,8 @@ import uuid from datetime import datetime -from sqlalchemy import func, Column, String, Boolean +from sqlalchemy import func, Column, String +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column @@ -24,7 +25,7 @@ class BaseVideoMixin: cloud_link = Column(String(255)) file_name = Column(String(255)) path = Column(String(255)) - review = Column(Boolean) + review = Column(BIT(1)) title = Column(String(255)) url = Column(String(255), unique=True) - should_download = Column(Boolean) + should_download = Column(BIT(1)) diff --git a/kontor-api/src/schema/comic.py b/kontor-api/src/schema/comic.py index 45cb8c3..1052d79 100644 --- a/kontor-api/src/schema/comic.py +++ b/kontor-api/src/schema/comic.py @@ -1,4 +1,5 @@ -from sqlalchemy import Column, ForeignKey, Integer, String, Boolean +from sqlalchemy import Column, ForeignKey, Integer, String +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship from .base import Base, BaseMixin @@ -21,8 +22,8 @@ class Comic(Base, BaseMixin): title = Column(String(length=255), unique=True) publisher_id = Column(String, ForeignKey('publisher.id'), nullable=False) publisher = relationship("Publisher", back_populates="comics") - current_order = Column(Boolean) - completed = Column(Boolean) + current_order = Column(BIT(1)) + completed = Column(BIT(1)) issues = relationship("Issue") story_arcs = relationship("StoryArc") trade_paperbacks = relationship("TradePaperback") @@ -63,8 +64,8 @@ class StoryArc(Base, BaseMixin): class Issue(Base, BaseMixin): __tablename__ = "issue" issue_number = Column(String(255)) - in_stock = Column(Boolean) - is_read = Column(Boolean) + in_stock = Column(BIT(1)) + is_read = Column(BIT(1)) comic_id = Column(String, ForeignKey("comic.id"), nullable=False) comic = relationship("Comic", back_populates="issues") volume_id = Column(String, ForeignKey("volume.id"), nullable=True) diff --git a/kontor-api/src/schema/database.py b/kontor-api/src/schema/database.py index 6e4bf16..c242eb0 100644 --- a/kontor-api/src/schema/database.py +++ b/kontor-api/src/schema/database.py @@ -4,8 +4,9 @@ from datetime import datetime from enum import Enum, auto from logging import Logger from pathlib import Path +from typing import Any -from sqlalchemy import Engine, select +from sqlalchemy import select from sqlalchemy.exc import IntegrityError from sqlalchemy.orm import sessionmaker @@ -34,7 +35,6 @@ class StatusType(Enum): CLOUD_LINK = auto() CLOUD_LINK_ID = auto() - class ExportType(Enum): JSON = "JSON" YAML = "YAML" @@ -43,7 +43,7 @@ class ExportType(Enum): class KontorDB: - def __init__(self, db_engine: Engine, log: Logger): + def __init__(self, db_engine: Any, log: Logger): self.engine = db_engine self.registry = {} self.init_registry() @@ -131,6 +131,7 @@ class KontorDB: def get_columns(self, table_name: str) -> dict: columns = {} + order = 0 __session__ = sessionmaker(self.engine) table_info = self.get_table_by_name(table_name) _filters = {'table_id': table_info['id']} @@ -182,7 +183,7 @@ class KontorDB: # self.log.info("data: %s", data) return data - def export_db(self, export_type: ExportType, export_file_name: str) -> dict: + def export_db(self, export_type: str, export_file_name: str) -> dict: results = {} db = {} export_table_list = self.get_table_names() @@ -216,14 +217,14 @@ class KontorDB: db[table] = entries results[table] = len(entries) match export_type: - case ExportType.JSON: + case "JSON": json_dump = json.dumps(db, indent=4) with open(export_file_name, "w") as dump_file: dump_file.write(json_dump) - case ExportType.YAML: - pass - case ExportType.SQLITE: - pass + case "YAML": + export_file = Path(export_file_name) + case "SQLite": + export_file = Path(export_file_name) self.log.info(f"{len(results)} tables exported") return results @@ -278,7 +279,7 @@ class KontorDB: except IntegrityError as error: self.log.info(f"Could not add item, due to: {error.detail}") if len(existing_ids) > 0: - print(f"remaining items: {existing_ids}") + print(f"remaining items for {table_name}: {existing_ids}") remaining.extend(existing_ids) result['updated'] = updated result['added'] = added @@ -334,13 +335,8 @@ class KontorDB: media_file.last_modified_date = datetime.now() media_file.version = 0 media_file.url = link -<<<<<<< HEAD media_file.review = 1 media_file.should_download = 1 -======= - media_file.review = True - media_file.should_download = True ->>>>>>> d9d178f (add schema from kontor-schema) try: session.add(media_file) session.commit() @@ -356,6 +352,7 @@ class KontorDB: _filter = { 'review': True} with __session__() as session: links = session.query(MediaFile).filter_by(**_filter).all() + self.log.info("%d entries found for updating titles", len(links)) for link in links: url = link.url if url is None: @@ -365,7 +362,7 @@ class KontorDB: update_list[link.id] = link.title return update_list - def get_download_list(self) -> list: + def get_download_list(self) -> list[uuid.UUID]: download_list = [] __session__ = sessionmaker(self.engine) _filter = { 'should_download': True} diff --git a/kontor-api/src/schema/media.py b/kontor-api/src/schema/media.py index d3a9723..d1c568f 100644 --- a/kontor-api/src/schema/media.py +++ b/kontor-api/src/schema/media.py @@ -5,7 +5,8 @@ from pathlib import Path import requests from bs4 import BeautifulSoup -from sqlalchemy import Column, String, ForeignKey, Boolean +from sqlalchemy import Column, String, ForeignKey +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship from .base import Base, BaseMixin, BaseVideoMixin @@ -43,12 +44,12 @@ class MediaFile(Base, BaseMixin, BaseVideoMixin): lines_list = output.splitlines() file_name = self.__parse_output__(lines_list) if file_name is None: - self.review = True - self.should_download = True + self.review = 1 + self.should_download = 1 self.file_name = None else: download_file = Path(file_name) - self.should_download = False + self.should_download = 0 self.file_name = download_file.name self.cloud_link = str(download_file.absolute()) self.last_modified_date = datetime.now() @@ -77,16 +78,23 @@ class MediaActorFile(Base, BaseMixin): __tablename__ = 'media_actor_file' media_actor_id = Column(String(255), ForeignKey("media_actor.id"), nullable=False) media_actor = relationship("MediaActor", back_populates="media_actor_files") - media_file_id = Column(String(255), ForeignKey("media_file.id"), nullable=False) + media_file_id = Column(String(255), ForeignKey("media_file.id"), nullable=True) media_file = relationship("MediaFile", back_populates="media_actor_files") class MediaArticle(Base, BaseMixin): __tablename__ = 'media_article' - review = Column(Boolean) + review = Column(BIT(1)) title = Column(String(255)) url = Column(String(255), unique=True) -class MediaVideo(Base, BaseMixin, BaseVideoMixin): +class MediaVideo(Base, BaseMixin): __tablename__ = 'media_video' + cloud_link = Column(String(255)) + file_name = Column(String(255)) + path = Column(String(255)) + review = Column(BIT(1)) + title = Column(String(255)) + url = Column(String(255), unique=True) + should_download = Column(BIT(1)) diff --git a/kontor-api/src/schema/metadata.py b/kontor-api/src/schema/metadata.py index 9ac5aa4..950cebe 100644 --- a/kontor-api/src/schema/metadata.py +++ b/kontor-api/src/schema/metadata.py @@ -1,4 +1,5 @@ -from sqlalchemy import Column, String, ForeignKey, Integer, Boolean +from sqlalchemy import Column, String, ForeignKey, Integer +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship from .base import Base, BaseMixin @@ -27,8 +28,8 @@ class MetaDataColumn(Base, BaseMixin): table = relationship("MetaDataTable", back_populates="table_columns") column_label = Column(String(255)) filter_label = Column(String(255)) - is_shown = Column(Boolean) - show_filter = Column(Boolean) + is_shown = Column(BIT(1)) + show_filter = Column(BIT(1)) ref_column = Column(String, nullable=True) def __repr__(self): diff --git a/kontor-api/src/schema/tysc.py b/kontor-api/src/schema/tysc.py index 5ab4baa..32c88f1 100644 --- a/kontor-api/src/schema/tysc.py +++ b/kontor-api/src/schema/tysc.py @@ -1,4 +1,5 @@ -from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Boolean +from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint +from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship from .base import Base, BaseMixin @@ -77,8 +78,8 @@ class CardSet(Base, BaseMixin): UniqueConstraint("name", "vendor_id"), ) name = Column(String(255), index=True) - parallel_set = Column(Boolean) - insert_set = Column(Boolean) + parallel_set = Column(BIT(1)) + insert_set = Column(BIT(1)) vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False, index=True) vendor = relationship("Vendor", back_populates="card_sets") cards = relationship("Card")