Vorbereitung Release 0.2.0 #83

Merged
tpeetz merged 178 commits from develop/0.2.0 into main 2026-01-29 22:50:42 +00:00
8 changed files with 387 additions and 8 deletions
Showing only changes of commit 20ed0b2f40 - Show all commits
+71
View File
@@ -1,4 +1,5 @@
from datetime import datetime from datetime import datetime
from typing import Any, AnyStr, Dict
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean from sqlalchemy import Column, ForeignKey, Integer, String, Boolean
from sqlalchemy.orm import relationship, mapped_column, Mapped from sqlalchemy.orm import relationship, mapped_column, Mapped
@@ -27,6 +28,18 @@ class Profile(Base, BaseMixin):
full_name += self.last_name full_name += self.last_name
return full_name return full_name
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.first_name = import_data['first_name']
self.last_name = import_data['last_name']
self.user_name = import_data['user_name']
self.email = import_data['email']
self.password = import_data['password']
self.enabled = import_data['enabled']
class Token(Base, BaseMixin): class Token(Base, BaseMixin):
__tablename__ = "token" __tablename__ = "token"
@@ -37,12 +50,31 @@ class Token(Base, BaseMixin):
profile_id = Column(String, ForeignKey("profile.id"), nullable=False) profile_id = Column(String, ForeignKey("profile.id"), nullable=False)
profile = relationship("Profile", back_populates="tokens") profile = relationship("Profile", back_populates="tokens")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.token = import_data['token']
self.name = import_data['name']
self.last_used_date = import_data['last_used_date']
self.enabled = import_data['enabled']
self.profile_id = import_data['profile_id']
self.password = import_data['password']
class Permission(Base, BaseMixin): class Permission(Base, BaseMixin):
__tablename__ = "permission" __tablename__ = "permission"
name = Column(String, nullable=False) name = Column(String, nullable=False)
assignments = relationship("Assignment") assignments = relationship("Assignment")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class Assignment(Base, BaseMixin): class Assignment(Base, BaseMixin):
__tablename__ = "assignment" __tablename__ = "assignment"
@@ -51,12 +83,28 @@ class Assignment(Base, BaseMixin):
permission_id = Column(String, ForeignKey("permission.id"), nullable=False) permission_id = Column(String, ForeignKey("permission.id"), nullable=False)
permission = relationship("Permission", back_populates="assignments") permission = relationship("Permission", back_populates="assignments")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.profile_id = import_data['profile_id']
self.permission_id = import_data['permission_id']
class ModuleData(Base, BaseMixin): class ModuleData(Base, BaseMixin):
__tablename__ = "module_data" __tablename__ = "module_data"
module_name = Column(String, nullable=False) module_name = Column(String, nullable=False)
import_data = Column(Boolean) import_data = Column(Boolean)
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.module_name = import_data['module_name']
self.import_data = import_data['import_data']
class MailAccount(Base, BaseMixin): class MailAccount(Base, BaseMixin):
__tablename__ = "mail_account" __tablename__ = "mail_account"
@@ -67,6 +115,18 @@ class MailAccount(Base, BaseMixin):
password = Column(String) password = Column(String)
start_tls = Column(Boolean) start_tls = Column(Boolean)
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.host = import_data['host']
self.port = import_data['port']
self.protocol = import_data['protocol']
self.user_name = import_data['user_name']
self.password = import_data['password']
self.start_tls = import_data['start_tls']
class Mail(Base, BaseMixin): class Mail(Base, BaseMixin):
__tablename__ = "mail" __tablename__ = "mail"
@@ -75,3 +135,14 @@ class Mail(Base, BaseMixin):
body: Mapped[str] = mapped_column() body: Mapped[str] = mapped_column()
sent_date: Mapped[datetime] = mapped_column() sent_date: Mapped[datetime] = mapped_column()
received_date: Mapped[datetime] = mapped_column() received_date: Mapped[datetime] = mapped_column()
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.folder = import_data['folder']
self.subject = import_data['subject']
self.body = import_data['body']
self.sent_date = import_data['sent_date']
self.received_date = import_data['received_date']
+49
View File
@@ -1,3 +1,4 @@
from typing import Any, AnyStr, Dict
from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
@@ -9,6 +10,13 @@ class Article(Base, BaseMixin):
title = Column(String, unique=True) title = Column(String, unique=True)
article_authors = relationship("ArticleAuthor") article_authors = relationship("ArticleAuthor")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.title = import_data['title']
class Author(Base, BaseMixin): class Author(Base, BaseMixin):
__tablename__ = 'author' __tablename__ = 'author'
@@ -17,12 +25,27 @@ class Author(Base, BaseMixin):
article_authors = relationship("ArticleAuthor") article_authors = relationship("ArticleAuthor")
book_authors = relationship("BookAuthor") book_authors = relationship("BookAuthor")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.first_name = import_data['first_name']
self.last_name = import_data['last_name']
class BookshelfPublisher(Base, BaseMixin): class BookshelfPublisher(Base, BaseMixin):
__tablename__ = 'bookshelf_publisher' __tablename__ = 'bookshelf_publisher'
name = Column(String, unique=True) name = Column(String, unique=True)
books = relationship("Book") books = relationship("Book")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class Book(Base, BaseMixin): class Book(Base, BaseMixin):
__tablename__ = 'book' __tablename__ = 'book'
@@ -33,6 +56,16 @@ class Book(Base, BaseMixin):
publisher = relationship('BookshelfPublisher', back_populates="books") publisher = relationship('BookshelfPublisher', back_populates="books")
book_authors = relationship("BookAuthor") book_authors = relationship("BookAuthor")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.isbn = import_data['isbn']
self.title = import_data['title']
self.year = import_data['year']
self.publisher_id = import_data['publisher_id']
class ArticleAuthor(Base, BaseMixin): class ArticleAuthor(Base, BaseMixin):
__tablename__ = 'article_author' __tablename__ = 'article_author'
@@ -41,6 +74,14 @@ class ArticleAuthor(Base, BaseMixin):
author_id = Column(String, ForeignKey('author.id'), nullable=False) author_id = Column(String, ForeignKey('author.id'), nullable=False)
author = relationship('Author', back_populates="article_authors") author = relationship('Author', back_populates="article_authors")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.article_id = import_data['article_id']
self.author_id = import_data['author_id']
class BookAuthor(Base, BaseMixin): class BookAuthor(Base, BaseMixin):
__tablename__ = 'book_author' __tablename__ = 'book_author'
@@ -48,3 +89,11 @@ class BookAuthor(Base, BaseMixin):
author = relationship('Author', back_populates="book_authors") author = relationship('Author', back_populates="book_authors")
book_id = Column(String, ForeignKey('book.id'), nullable=False) book_id = Column(String, ForeignKey('book.id'), nullable=False)
book = relationship('Book', back_populates="book_authors") book = relationship('Book', back_populates="book_authors")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.author_id = import_data['author_id']
self.book_id = import_data['book_id']
+84 -1
View File
@@ -1,6 +1,6 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from typing import List, Optional from typing import AnyStr, Dict, List, Optional, Any
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, func from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, func
from sqlalchemy.orm import relationship, Mapped, mapped_column from sqlalchemy.orm import relationship, Mapped, mapped_column
@@ -25,6 +25,14 @@ class Publisher(Base):
def __str__(self): def __str__(self):
return self.__repr__() return self.__repr__()
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.parent_publisher_id = import_data['parent_publisher_id']
class Comic(Base, BaseMixin): class Comic(Base, BaseMixin):
__tablename__ = 'comic' __tablename__ = 'comic'
@@ -46,6 +54,18 @@ class Comic(Base, BaseMixin):
def __str__(self): def __str__(self):
return f'{self.title}({self.id})' return f'{self.title}({self.id})'
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.title = import_data['title']
self.publisher_id = import_data['publisher_id']
self.current_order = import_data['current_order']
self.completed = import_data['completed']
if 'weblink' in import_data:
self.weblink = import_data['weblink']
class Volume(Base, BaseMixin): class Volume(Base, BaseMixin):
__tablename__ = "volume" __tablename__ = "volume"
@@ -55,6 +75,14 @@ class Volume(Base, BaseMixin):
story_arcs = relationship("StoryArc") story_arcs = relationship("StoryArc")
issues = relationship("Issue") issues = relationship("Issue")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.comic_id = import_data['comic_id']
class TradePaperback(Base, BaseMixin): class TradePaperback(Base, BaseMixin):
__tablename__ = "trade_paperback" __tablename__ = "trade_paperback"
@@ -64,6 +92,16 @@ class TradePaperback(Base, BaseMixin):
comic_id = Column(String, ForeignKey("comic.id"), nullable=False) comic_id = Column(String, ForeignKey("comic.id"), nullable=False)
comic = relationship("Comic", back_populates="trade_paperbacks") comic = relationship("Comic", back_populates="trade_paperbacks")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.issue_start = import_data['issue_start']
self.issue_end = import_data['issue_end']
self.comic_id = import_data['comic_id']
class StoryArc(Base, BaseMixin): class StoryArc(Base, BaseMixin):
__tablename__ = "story_arc" __tablename__ = "story_arc"
@@ -74,6 +112,15 @@ class StoryArc(Base, BaseMixin):
volume = relationship("Volume", back_populates="story_arcs") volume = relationship("Volume", back_populates="story_arcs")
issues = relationship("Issue") issues = relationship("Issue")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.comic_id = import_data['comic_id']
self.volume_id = import_data['volume_id']
class Issue(Base, BaseMixin): class Issue(Base, BaseMixin):
__tablename__ = "issue" __tablename__ = "issue"
@@ -87,6 +134,18 @@ class Issue(Base, BaseMixin):
story_arc_id = Column(String, ForeignKey("story_arc.id"), nullable=True) story_arc_id = Column(String, ForeignKey("story_arc.id"), nullable=True)
story_arc = relationship("StoryArc", back_populates="issues") story_arc = relationship("StoryArc", back_populates="issues")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.issue_number = import_data['issue_number']
self.in_stock = import_data['in_stock']
self.is_read = import_data['is_read']
self.comic_id = import_data['comic_id']
self.volume_id = import_data['volume_id']
self.story_arc_id = import_data['story_arc_id']
class Artist(Base, BaseMixin): class Artist(Base, BaseMixin):
__tablename__ = "artist" __tablename__ = "artist"
@@ -94,6 +153,15 @@ class Artist(Base, BaseMixin):
weblink = Column(String, nullable=True) weblink = Column(String, nullable=True)
comic_works = relationship("ComicWork") comic_works = relationship("ComicWork")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
if 'weblink' in import_data:
self.weblink = import_data['weblink']
class WorkType(Base, BaseMixin): class WorkType(Base, BaseMixin):
__tablename__ = "worktype" __tablename__ = "worktype"
@@ -106,6 +174,13 @@ class WorkType(Base, BaseMixin):
def __str__(self): def __str__(self):
return f'{self.name}({self.id})' return f'{self.name}({self.id})'
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class ComicWork(Base, BaseMixin): class ComicWork(Base, BaseMixin):
__tablename__ = "comic_work" __tablename__ = "comic_work"
@@ -116,3 +191,11 @@ class ComicWork(Base, BaseMixin):
work_type_id = Column(String, ForeignKey("worktype.id"), nullable=False) work_type_id = Column(String, ForeignKey("worktype.id"), nullable=False)
work_type = relationship("WorkType", back_populates="comic_works") work_type = relationship("WorkType", back_populates="comic_works")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.comic_id = import_data['comic_id']
self.artist_id = import_data['artist_id']
self.work_type_id = import_data['work_type_id']
+53 -1
View File
@@ -2,7 +2,7 @@ import re
import subprocess import subprocess
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Any, AnyStr, Dict
import requests import requests
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from sqlalchemy import Boolean, Column, False_, String, ForeignKey from sqlalchemy import Boolean, Column, False_, String, ForeignKey
@@ -21,6 +21,19 @@ class MediaFile(Base, BaseMixin, BaseVideoMixin):
def __str__(self): def __str__(self):
return f'{self.title}({self.id})' return f'{self.title}({self.id})'
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.cloud_link = import_data['cloud_link']
self.file_name = import_data['file_name']
self.path = import_data['path']
self.review = import_data['review']
self.title = import_data['title']
self.url = import_data['url']
self.should_download = import_data['should_download']
def update_title(self) -> None: def update_title(self) -> None:
print(f"update title for {self.url}") print(f"update title for {self.url}")
try: try:
@@ -72,6 +85,13 @@ class MediaActor(Base, BaseMixin):
name = Column(String) name = Column(String)
media_actor_files = relationship("MediaActorFile") media_actor_files = relationship("MediaActorFile")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class MediaActorFile(Base, BaseMixin): class MediaActorFile(Base, BaseMixin):
__tablename__ = 'media_actor_file' __tablename__ = 'media_actor_file'
@@ -80,6 +100,15 @@ class MediaActorFile(Base, BaseMixin):
media_file_id = Column(String, ForeignKey("media_file.id"), nullable=True) media_file_id = Column(String, ForeignKey("media_file.id"), nullable=True)
media_file = relationship("MediaFile", back_populates="media_actor_files") media_file = relationship("MediaFile", back_populates="media_actor_files")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.media_actor_id = import_data['media_actor_id']
self.media_file_id = import_data['media_file_id']
class MediaArticle(Base, BaseMixin): class MediaArticle(Base, BaseMixin):
__tablename__ = 'media_article' __tablename__ = 'media_article'
@@ -87,6 +116,16 @@ class MediaArticle(Base, BaseMixin):
title = Column(String) title = Column(String)
url = Column(String, unique=True) url = Column(String, unique=True)
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.review = import_data['review']
self.title = import_data['title']
self.url = import_data['url']
class MediaVideo(Base, BaseMixin): class MediaVideo(Base, BaseMixin):
__tablename__ = 'media_video' __tablename__ = 'media_video'
@@ -97,3 +136,16 @@ class MediaVideo(Base, BaseMixin):
title = Column(String) title = Column(String)
url = Column(String, unique=True) url = Column(String, unique=True)
should_download = Column(Boolean) should_download = Column(Boolean)
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.cloud_link = import_data['cloud_link']
self.file_name = import_data['file_name']
self.path = import_data['path']
self.review = import_data['review']
self.title = import_data['title']
self.url = import_data['url']
self.should_download = import_data['should_download']
+25
View File
@@ -1,3 +1,4 @@
from typing import Any, AnyStr, Dict
from sqlalchemy import Column, String, ForeignKey, Integer, Boolean from sqlalchemy import Column, String, ForeignKey, Integer, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
@@ -15,6 +16,13 @@ class MetaDataTable(Base, BaseMixin):
def __str__(self): def __str__(self):
return f'{self.table_name}({self.id})' return f'{self.table_name}({self.id})'
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.table_name = import_data['table_name']
class MetaDataColumn(Base, BaseMixin): class MetaDataColumn(Base, BaseMixin):
__tablename__ = 'meta_data_column' __tablename__ = 'meta_data_column'
@@ -39,3 +47,20 @@ class MetaDataColumn(Base, BaseMixin):
def __str__(self): def __str__(self):
return f'{self.column_name}({self.id})' return f'{self.column_name}({self.id})'
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.column_name = import_data['column_name']
self.column_sync_name = import_data['column_sync_name']
self.column_type = import_data['column_type']
self.column_modifier = import_data['column_modifier']
self.column_order = import_data['column_order']
self.table_id = import_data['table_id']
self.column_label = import_data['column_label']
self.filter_label = import_data['filter_label']
self.is_shown = import_data['is_shown']
self.show_filter = import_data['show_filter']
self.ref_column = import_data['ref_column']
+74
View File
@@ -1,3 +1,4 @@
from typing import AnyStr, Dict, Any
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Boolean from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
@@ -13,6 +14,16 @@ class Sport(Base, BaseMixin):
teams = relationship("Team") teams = relationship("Team")
positions = relationship("FieldPosition") positions = relationship("FieldPosition")
def __repr__(self):
return f"Sport(id={self.id}, name={self.name}, created_date={self.created_date})"
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class Team(Base, BaseMixin): class Team(Base, BaseMixin):
__tablename__ = "team" __tablename__ = "team"
@@ -22,6 +33,15 @@ class Team(Base, BaseMixin):
sport = relationship("Sport", back_populates="teams") sport = relationship("Sport", back_populates="teams")
roosters = relationship("Rooster") roosters = relationship("Rooster")
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.short_name = import_data['short_name']
self.sport_id = import_data['sport_id']
class FieldPosition(Base, BaseMixin): class FieldPosition(Base, BaseMixin):
__tablename__ = "field_position" __tablename__ = "field_position"
@@ -35,6 +55,15 @@ class FieldPosition(Base, BaseMixin):
sport = relationship("Sport", back_populates="positions") sport = relationship("Sport", back_populates="positions")
roosters = relationship("Rooster") roosters = relationship("Rooster")
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.short_name = import_data['short_name']
self.sport_id = import_data['sport_id']
class Player(Base, BaseMixin): class Player(Base, BaseMixin):
__tablename__ = "player" __tablename__ = "player"
@@ -48,6 +77,14 @@ class Player(Base, BaseMixin):
def get_full_name(self) -> str: def get_full_name(self) -> str:
return f"{self.last_name}, {self.first_name}" return f"{self.last_name}, {self.first_name}"
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.first_name = import_data['first_name']
self.last_name = import_data['last_name']
class Rooster(Base, BaseMixin): class Rooster(Base, BaseMixin):
__tablename__ = "rooster" __tablename__ = "rooster"
@@ -63,6 +100,15 @@ class Rooster(Base, BaseMixin):
position = relationship("FieldPosition", back_populates="roosters") position = relationship("FieldPosition", back_populates="roosters")
cards = relationship("Card") cards = relationship("Card")
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.team_id = import_data['team_id']
self.player_id = import_data['player_id']
self.position_id = import_data['position_id']
class Vendor(Base, BaseMixin): class Vendor(Base, BaseMixin):
__tablename__ = "vendor" __tablename__ = "vendor"
@@ -70,6 +116,13 @@ class Vendor(Base, BaseMixin):
card_sets = relationship("CardSet") card_sets = relationship("CardSet")
cards = relationship("Card") cards = relationship("Card")
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
class CardSet(Base, BaseMixin): class CardSet(Base, BaseMixin):
__tablename__ = "card_set" __tablename__ = "card_set"
@@ -83,6 +136,16 @@ class CardSet(Base, BaseMixin):
vendor = relationship("Vendor", back_populates="card_sets") vendor = relationship("Vendor", back_populates="card_sets")
cards = relationship("Card") cards = relationship("Card")
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.name = import_data['name']
self.parallel_set = import_data['parallel_set']
self.insert_set = import_data['insert_set']
self.vendor_id = import_data['vendor_id']
class Card(Base, BaseMixin): class Card(Base, BaseMixin):
__tablename__ = "card" __tablename__ = "card"
@@ -97,3 +160,14 @@ class Card(Base, BaseMixin):
rooster = relationship("Rooster", back_populates="cards") rooster = relationship("Rooster", back_populates="cards")
vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False) vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False)
vendor = relationship("Vendor", back_populates="cards") vendor = relationship("Vendor", back_populates="cards")
def import_dict(self, import_data: Dict[AnyStr, Any]):
self.id = import_data['id']
self.created_date = import_data['created_date']
self.last_modified_date = import_data['last_modified_date']
self.version = import_data['version']
self.card_number = import_data['card_number']
self.year = import_data['year']
self.card_set_id = import_data['card_set_id']
self.rooster_id = import_data['rooster_id']
self.vendor_id = import_data['vendor_id']
+24 -4
View File
@@ -1,5 +1,5 @@
""" """
import data from json file to MariaDB import data from json file to PostgreSQL
""" """
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
@@ -11,6 +11,7 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session from sqlalchemy.orm import sessionmaker, Session
from db.models.base import Base from db.models.base import Base
from db.models import registry from db.models import registry
from psycopg2.errors import NotNullViolation
from config import get_logger from config import get_logger
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
@@ -62,11 +63,26 @@ def update_item(db: Session, import_data: Dict[AnyStr, Any], item: Any, dry_run:
existing_value = getattr(item, str(key)) existing_value = getattr(item, str(key))
if existing_value != value: if existing_value != value:
if not dry_run: if not dry_run:
log.info(f"update {key}({existing_value}) with {value}") log.debug(f"update {key}({existing_value}) with {value}")
setattr(model, str(key), value) setattr(item, str(key), value)
db.add(item) db.add(item)
db.commit() db.commit()
def item_import(db: Session, import_data: Dict[AnyStr, Any], dry_run: bool, log):
log.debug(f"import {import_data}")
if not dry_run:
log.info(f"model: {repr(model)} {import_data}")
try:
new_item = model()
new_item.import_dict(import_data)
log.info(f"new item: {new_item}")
db.add(new_item)
db.commit()
except NotNullViolation as notnull:
log.info(f"import failed: {notnull} {import_data}")
except Exception as error:
log.info(f"import failed: {error}")
if __name__ == '__main__': if __name__ == '__main__':
logger = get_logger(args.verbose, "kontor") logger = get_logger(args.verbose, "kontor")
@@ -78,7 +94,10 @@ if __name__ == '__main__':
if args.cleanup: if args.cleanup:
cleanup_database(db, logger, args.dry_run) cleanup_database(db, logger, args.dry_run)
data = load_data(args.file, logger) data = load_data(args.file, logger)
for tablename in data: table_list: List = list(data.keys())
logger.info(f"Liste der Tabellen: {table_list}")
sorted_table_list: List = table_list
for tablename in sorted_table_list:
model = registry[tablename] model = registry[tablename]
existing_items = db.query(model).all() existing_items = db.query(model).all()
existing_ids = get_ids(existing_items) existing_ids = get_ids(existing_items)
@@ -92,6 +111,7 @@ if __name__ == '__main__':
existing_ids.remove(import_item['id']) existing_ids.remove(import_item['id'])
else: else:
logger.debug(f"import {import_item['id']}") logger.debug(f"import {import_item['id']}")
item_import(db, import_item, args.dry_run, logger)
logger.info(f"remaining items for {tablename}: {len(existing_ids)}") logger.info(f"remaining items for {tablename}: {len(existing_ids)}")
logger.info('kontor.import finished') logger.info('kontor.import finished')
@@ -179,12 +179,14 @@ public class SetupModuleAdmin implements ApplicationListener<ContextRefreshedEve
metaDataService.getColumn(artistTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(artistTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(artistTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(artistTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(artistTable, "name", "name", "TEXT", "UNIQUE", 5, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(artistTable, "name", "name", "TEXT", "UNIQUE", 5, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(artistTable, "weblink", "weblink", "TEXT", null, 9, Boolean.TRUE, "Link", Boolean.FALSE, null);
MetaDataTable publisherTable = metaDataService.getTable("publisher"); MetaDataTable publisherTable = metaDataService.getTable("publisher");
metaDataService.getColumn(publisherTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.TRUE, "", Boolean.FALSE, null); metaDataService.getColumn(publisherTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.TRUE, "", Boolean.FALSE, null);
metaDataService.getColumn(publisherTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(publisherTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(publisherTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(publisherTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(publisherTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(publisherTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(publisherTable, "name", "name", "TEXT", "UNIQUE", 5, Boolean.TRUE, "", Boolean.FALSE, null); metaDataService.getColumn(publisherTable, "name", "name", "TEXT", "UNIQUE", 5, Boolean.TRUE, "", Boolean.FALSE, null);
metaDataService.getColumn(publisherTable, "parent_publisher_id", "parent_publisher_id", "TEXT", null, 6, Boolean.TRUE, "Parent Company", Boolean.FALSE, null, "name");
MetaDataTable comicTable = metaDataService.getTable("comic"); MetaDataTable comicTable = metaDataService.getTable("comic");
metaDataService.getColumn(comicTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.TRUE, "ID", Boolean.FALSE, null); metaDataService.getColumn(comicTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.TRUE, "ID", Boolean.FALSE, null);
metaDataService.getColumn(comicTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(comicTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null);
@@ -194,6 +196,7 @@ public class SetupModuleAdmin implements ApplicationListener<ContextRefreshedEve
metaDataService.getColumn(comicTable, "current_order", "current_order", "BOOLEAN", null, 6, Boolean.TRUE, "Bestellung", Boolean.TRUE, "Bestellung"); metaDataService.getColumn(comicTable, "current_order", "current_order", "BOOLEAN", null, 6, Boolean.TRUE, "Bestellung", Boolean.TRUE, "Bestellung");
metaDataService.getColumn(comicTable, "title", "title", "TEXT", "UNIQUE", 7, Boolean.TRUE, "Title", Boolean.FALSE, null); metaDataService.getColumn(comicTable, "title", "title", "TEXT", "UNIQUE", 7, Boolean.TRUE, "Title", Boolean.FALSE, null);
metaDataService.getColumn(comicTable, "publisher_id", "publisher_id", "TEXT", null, 8, Boolean.TRUE, "Verlag", Boolean.FALSE, null, "name"); metaDataService.getColumn(comicTable, "publisher_id", "publisher_id", "TEXT", null, 8, Boolean.TRUE, "Verlag", Boolean.FALSE, null, "name");
metaDataService.getColumn(comicTable, "weblink", "weblink", "TEXT", null, 9, Boolean.TRUE, "Link", Boolean.FALSE, null);
MetaDataTable issueTable = metaDataService.getTable("issue"); MetaDataTable issueTable = metaDataService.getTable("issue");
metaDataService.getColumn(issueTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(issueTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(issueTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(issueTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null);
@@ -203,7 +206,8 @@ public class SetupModuleAdmin implements ApplicationListener<ContextRefreshedEve
metaDataService.getColumn(issueTable, "is_read", "is_read", "BOOLEAN", null, 6, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(issueTable, "is_read", "is_read", "BOOLEAN", null, 6, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(issueTable, "issue_number", "issue_number", "TEXT", null, 7, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(issueTable, "issue_number", "issue_number", "TEXT", null, 7, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(issueTable, "comic_id", "comic_id", "TEXT", null, 8, Boolean.FALSE, "", Boolean.FALSE, null, "title"); metaDataService.getColumn(issueTable, "comic_id", "comic_id", "TEXT", null, 8, Boolean.FALSE, "", Boolean.FALSE, null, "title");
metaDataService.getColumn(issueTable, "volume_id", "volume_id", "TEXT", null, 9, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(issueTable, "volume_id", "volume_id", "TEXT", null, 9, Boolean.FALSE, "", Boolean.FALSE, null, "name");
metaDataService.getColumn(issueTable, "story_arc_id", "story_arc_id", "TEXT", null, 10, Boolean.FALSE, "", Boolean.FALSE, null, "name");
MetaDataTable volumeTable = metaDataService.getTable("volume"); MetaDataTable volumeTable = metaDataService.getTable("volume");
metaDataService.getColumn(volumeTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(volumeTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(volumeTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(volumeTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null);
@@ -226,7 +230,8 @@ public class SetupModuleAdmin implements ApplicationListener<ContextRefreshedEve
metaDataService.getColumn(storyArcTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(storyArcTable, "last_modified_date", "modified", "TIMESTAMP", null, 3, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(storyArcTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(storyArcTable, "version", "version", "LONG", null, 4, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(storyArcTable, "name", "name", "TEXT", null, 5, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(storyArcTable, "name", "name", "TEXT", null, 5, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(storyArcTable, "comic_id", "comic_id", "TEXT", null, 6, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(storyArcTable, "comic_id", "comic_id", "TEXT", null, 6, Boolean.FALSE, "", Boolean.FALSE, null, "title");
metaDataService.getColumn(storyArcTable, "volume_id", "volume_id", "TEXT", null, 7, Boolean.FALSE, "", Boolean.FALSE, null, "name");
MetaDataTable worktypeTable = metaDataService.getTable("worktype"); MetaDataTable worktypeTable = metaDataService.getTable("worktype");
metaDataService.getColumn(worktypeTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(worktypeTable, "id", "identifier", "TEXT", "PRIMARY KEY", 1, Boolean.FALSE, "", Boolean.FALSE, null);
metaDataService.getColumn(worktypeTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null); metaDataService.getColumn(worktypeTable, "created_date", "created", "TIMESTAMP", null, 2, Boolean.FALSE, "", Boolean.FALSE, null);