From 934ef826c9ddcfe20908947e6503f93e55c80ab7 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Mon, 21 Apr 2025 17:39:20 +0200 Subject: [PATCH] Resolve "evaluate uv" --- Makefile | 9 + bottle-docker/app/src/userDAO.py | 5 +- django/kontor/homeoffice/admin.py | 1 - django/kontor/homeoffice/tests.py | 1 - django/kontor/library/tests.py | 1 - django/kontor/medien/admin.py | 1 - django/kontor/tradingcards/admin.py | 1 - django/kontor/tradingcards/models.py | 1 - django/kontor/tradingcards/tests.py | 1 - django/kontor/tysc/tests.py | 1 - fastapi/Makefile | 26 - .../config/kontor-docker/database-config.yaml | 12 - .../config/kontor-docker/logging-config.yaml | 42 - flask/kontor/auth/models.py | 2 +- flask/kontor/comics/api.py | 1 - flask/kontor/comics/routes.py | 2 +- flask/kontor/media/api.py | 1 - flask/kontor/media/routes.py | 2 +- kontor-api/.python-version | 1 + {fastapi => kontor-api}/Dockerfile | 1 - kontor-api/Makefile | 17 + .../app/__init__.py => kontor-api/README.md | 0 kontor-api/pyproject.toml | 19 + {fastapi => kontor-api}/requirements.txt | 0 .../app/models => kontor-api/src}/__init__.py | 0 {fastapi/app => kontor-api/src}/main.py | 2 +- .../src/models}/__init__.py | 0 .../src/models/comics}/__init__.py | 0 .../src}/models/comics/artist.py | 2 +- .../src}/models/comics/comic.py | 2 +- .../src/models/media}/__init__.py | 0 .../src}/models/media/file.py | 2 +- .../src/models/tysc/__init__.py | 0 .../src/models/tysc/sport.py | 1 - kontor-api/src/routers/__init__.py | 0 .../app => kontor-api/src}/routers/comic.py | 6 +- .../app => kontor-api/src}/routers/media.py | 4 +- .../app => kontor-api/src}/routers/tysc.py | 4 +- .../app => kontor-api/src}/schema/__init__.py | 0 .../app => kontor-api/src}/schema/admin.py | 3 +- .../app => kontor-api/src}/schema/base.py | 0 .../src}/schema/bookshelf.py | 3 +- .../app => kontor-api/src}/schema/comic.py | 2 +- .../app => kontor-api/src}/schema/database.py | 0 .../app => kontor-api/src}/schema/media.py | 2 +- .../app => kontor-api/src}/schema/metadata.py | 2 +- .../app => kontor-api/src}/schema/tysc.py | 2 +- kontor-api/tests/__init__.py | 0 {fastapi => kontor-api}/tests/test_main.py | 3 +- kontor-api/uv.lock | 738 ++++++++++++++++++ kontor-gui/gui/comic_window.py | 2 +- kontor-gui/gui/main_window.py | 8 +- kontor-gui/gui/media_window.py | 3 +- kontor-gui/gui/meta_data_window.py | 3 +- kontor-gui/gui/model_config.py | 2 +- kontor-gui/gui/worker.py | 3 +- .../build/lib/kontor_schema/__init__.py | 6 +- kontor-schema/build/lib/kontor_schema/base.py | 2 +- .../build/lib/kontor_schema/bookshelf.py | 3 +- .../build/lib/kontor_schema/comic.py | 2 +- .../build/lib/kontor_schema/media.py | 2 +- .../build/lib/kontor_schema/metadata.py | 2 +- kontor-schema/build/lib/kontor_schema/tysc.py | 2 +- kontor-schema/kontor_schema/admin.py | 2 +- kontor-schema/kontor_schema/bookshelf.py | 3 +- kontor-schema/kontor_schema/comic.py | 2 +- kontor-schema/kontor_schema/media.py | 2 +- kontor-schema/kontor_schema/metadata.py | 2 +- kontor-schema/kontor_schema/tysc.py | 2 +- kontor-spring/.factorypath | 3 + {springboot => kontor-spring}/.gitattributes | 0 {springboot => kontor-spring}/.gitignore | 0 {springboot => kontor-spring}/Dockerfile | 0 kontor-spring/Makefile | 8 + {springboot => kontor-spring}/README.md | 0 {springboot => kontor-spring}/build.gradle | 0 .../docker-compose.yml | 0 .../frontend/themes/kontor/styles.css | 0 .../frontend/themes/kontor/theme.json | 0 .../gradle.properties | 0 .../gradle/libs.versions.toml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 {springboot => kontor-spring}/gradlew | 0 {springboot => kontor-spring}/gradlew.bat | 0 {springboot => kontor-spring}/settings.gradle | 0 .../src/docs/asciidoc/kontor-spring.adoc | 0 .../kontor/comics/views/ArtistViewTest.java | 0 .../kontor/comics/views/ArtistformTest.java | 0 .../kontor/comics/views/ComicViewTest.java | 0 .../comics/views/ComicWorkViewTest.java | 0 .../kontor/comics/views/IssueViewTest.java | 0 .../comics/views/PublisherViewTest.java | 0 .../kontor/comics/views/StoryArcViewTest.java | 0 .../comics/views/TradePaperbackViewTest.java | 0 .../kontor/comics/views/VolumeViewTest.java | 0 .../kontor/comics/views/WorktypeViewTest.java | 0 .../kontor/tysc/views/CardSetViewTest.java | 0 .../kontor/tysc/views/CardViewTest.java | 0 .../tysc/views/FieldPositionViewTest.java | 0 .../kontor/tysc/views/PlayerViewTest.java | 0 .../kontor/tysc/views/RoosterViewTest.java | 0 .../kontor/tysc/views/SportViewTest.java | 0 .../kontor/tysc/views/TeamViewTest.java | 0 .../kontor/tysc/views/VendorViewTest.java | 0 .../resources/application.properties | 0 .../java/de/thpeetz/kontor/Application.java | 0 .../thpeetz/kontor/admin/AdminConstants.java | 0 .../thpeetz/kontor/admin/MailProperties.java | 0 .../kontor/admin/SetupModuleAdmin.java | 0 .../admin/data/AuthorizationMatrix.java | 0 .../kontor/admin/data/MetaDataColumn.java | 0 .../kontor/admin/data/MetaDataTable.java | 0 .../thpeetz/kontor/admin/data/ModuleData.java | 0 .../de/thpeetz/kontor/admin/data/Role.java | 0 .../de/thpeetz/kontor/admin/data/Token.java | 0 .../de/thpeetz/kontor/admin/data/User.java | 0 .../AuthorizationMatrixRepository.java | 0 .../repository/MailAccountRepository.java | 0 .../repository/MetaDataColumnRepository.java | 0 .../repository/MetaDataTableRepository.java | 0 .../repository/ModuleDataRepository.java | 0 .../admin/repository/RoleRepository.java | 0 .../admin/repository/UserRepository.java | 0 .../kontor/admin/services/AdminService.java | 0 .../services/KontorUserDetailsService.java | 0 .../kontor/admin/services/MailService.java | 0 .../admin/services/MetaDataService.java | 0 .../kontor/admin/services/ModuleService.java | 0 .../kontor/admin/views/AdminLayout.java | 0 .../kontor/admin/views/AuthorizationForm.java | 0 .../kontor/admin/views/AuthorizationView.java | 0 .../thpeetz/kontor/admin/views/LoginView.java | 0 .../kontor/admin/views/MetaDataForm.java | 0 .../kontor/admin/views/MetaDataView.java | 0 .../kontor/admin/views/ModuleDataForm.java | 0 .../kontor/admin/views/ModuleDataView.java | 0 .../thpeetz/kontor/admin/views/RoleForm.java | 0 .../thpeetz/kontor/admin/views/RoleView.java | 0 .../thpeetz/kontor/admin/views/UserForm.java | 0 .../kontor/admin/views/UserProfileView.java | 0 .../thpeetz/kontor/admin/views/UserView.java | 0 .../kontor/bookshelf/BookshelfConstants.java | 0 .../bookshelf/SetupModuleBookshelf.java | 0 .../kontor/bookshelf/data/Article.java | 0 .../kontor/bookshelf/data/ArticleAuthor.java | 0 .../data/ArticleAuthorRepository.java | 0 .../bookshelf/data/ArticleRepository.java | 0 .../thpeetz/kontor/bookshelf/data/Author.java | 0 .../bookshelf/data/AuthorRepository.java | 0 .../thpeetz/kontor/bookshelf/data/Book.java | 0 .../kontor/bookshelf/data/BookAuthor.java | 0 .../bookshelf/data/BookAuthorRepository.java | 0 .../kontor/bookshelf/data/BookRepository.java | 0 .../bookshelf/data/BookshelfPublisher.java | 0 .../data/BookshelfPublisherRepository.java | 0 .../bookshelf/services/BookshelfService.java | 0 .../kontor/bookshelf/views/ArticleForm.java | 0 .../kontor/bookshelf/views/ArticleView.java | 0 .../kontor/bookshelf/views/AuthorForm.java | 0 .../kontor/bookshelf/views/AuthorView.java | 0 .../kontor/bookshelf/views/BookForm.java | 0 .../kontor/bookshelf/views/BookView.java | 0 .../bookshelf/views/BookshelfLayout.java | 0 .../views/BookshelfPublisherView.java | 0 .../kontor/bookshelf/views/PublisherForm.java | 0 .../thpeetz/kontor/comics/ComicConstants.java | 0 .../kontor/comics/SetupModuleComics.java | 0 .../de/thpeetz/kontor/comics/data/Artist.java | 0 .../kontor/comics/data/ArtistRepository.java | 0 .../de/thpeetz/kontor/comics/data/Comic.java | 0 .../kontor/comics/data/ComicRepository.java | 0 .../thpeetz/kontor/comics/data/ComicWork.java | 0 .../comics/data/ComicWorkRepository.java | 0 .../de/thpeetz/kontor/comics/data/Issue.java | 0 .../kontor/comics/data/IssueRepository.java | 0 .../thpeetz/kontor/comics/data/Publisher.java | 0 .../comics/data/PublisherRepository.java | 0 .../thpeetz/kontor/comics/data/StoryArc.java | 0 .../comics/data/StoryArcRepository.java | 0 .../kontor/comics/data/TradePaperback.java | 0 .../comics/data/TradePaperbackRepository.java | 0 .../de/thpeetz/kontor/comics/data/Volume.java | 0 .../kontor/comics/data/VolumeRepository.java | 0 .../thpeetz/kontor/comics/data/Worktype.java | 0 .../comics/data/WorktypeRepository.java | 0 .../kontor/comics/services/ComicService.java | 0 .../kontor/comics/views/ArtistForm.java | 0 .../kontor/comics/views/ArtistView.java | 0 .../kontor/comics/views/ComicForm.java | 0 .../kontor/comics/views/ComicLayout.java | 0 .../kontor/comics/views/ComicView.java | 0 .../kontor/comics/views/ComicWorkForm.java | 0 .../kontor/comics/views/ComicWorkView.java | 0 .../kontor/comics/views/IssueForm.java | 0 .../kontor/comics/views/IssueView.java | 0 .../kontor/comics/views/PublisherForm.java | 0 .../kontor/comics/views/PublisherView.java | 0 .../kontor/comics/views/StoryArcForm.java | 0 .../kontor/comics/views/StoryArcView.java | 0 .../comics/views/TradePaperBackForm.java | 0 .../comics/views/TradePaperbackView.java | 0 .../kontor/comics/views/VolumeForm.java | 0 .../kontor/comics/views/VolumeView.java | 0 .../kontor/comics/views/WorktypeForm.java | 0 .../kontor/comics/views/WorktypeView.java | 0 .../kontor/common/data/AbstractEntity.java | 0 .../common/data/AbstractLinkEntity.java | 0 .../kontor/common/views/AvatarMenuBar.java | 0 .../common/views/ColumnToggleContextMenu.java | 0 .../kontor/common/views/KontorLayoutUtil.java | 0 .../kontor/common/views/MainLayout.java | 0 .../thpeetz/kontor/common/views/MainView.java | 0 .../common/views/SeparateMainLayout.java | 0 .../kontor/common/views/StatusIcon.java | 0 .../data/services/DataManagementService.java | 0 .../kontor/data/views/DataManagementView.java | 0 .../thpeetz/kontor/data/views/ImportArea.java | 0 .../thpeetz/kontor/data/views/UploadArea.java | 0 .../thpeetz/kontor/mailclient/data/Mail.java | 0 .../kontor/mailclient/data/MailAccount.java | 0 .../kontor/mailclient/views/EmailView.java | 0 .../thpeetz/kontor/media/MediaConstants.java | 0 .../kontor/media/SetupModuleMedia.java | 0 .../thpeetz/kontor/media/data/MediaActor.java | 0 .../kontor/media/data/MediaActorFile.java | 0 .../media/data/MediaActorFileRepository.java | 0 .../media/data/MediaActorRepository.java | 0 .../kontor/media/data/MediaArticle.java | 0 .../media/data/MediaArticleRepository.java | 0 .../thpeetz/kontor/media/data/MediaFile.java | 0 .../media/data/MediaFileRepository.java | 0 .../thpeetz/kontor/media/data/MediaVideo.java | 0 .../media/data/MediaVideoRepository.java | 0 .../media/services/MediaArticleService.java | 0 .../media/services/MediaFileService.java | 0 .../media/services/MediaVideoService.java | 0 .../media/views/MediaActorFileForm.java | 0 .../media/views/MediaActorFileView.java | 0 .../kontor/media/views/MediaActorForm.java | 0 .../kontor/media/views/MediaActorView.java | 0 .../kontor/media/views/MediaArticleForm.java | 0 .../kontor/media/views/MediaArticleView.java | 0 .../kontor/media/views/MediaFileForm.java | 0 .../kontor/media/views/MediaFileView.java | 0 .../kontor/media/views/MediaVideoForm.java | 0 .../kontor/media/views/MediaVideoView.java | 0 .../kontor/security/SecurityConfig.java | 0 .../kontor/security/SecurityService.java | 0 .../thpeetz/kontor/tysc/SetupModuleTysc.java | 0 .../de/thpeetz/kontor/tysc/TyscConstants.java | 0 .../de/thpeetz/kontor/tysc/data/Card.java | 0 .../de/thpeetz/kontor/tysc/data/CardSet.java | 0 .../kontor/tysc/data/FieldPosition.java | 0 .../de/thpeetz/kontor/tysc/data/Player.java | 0 .../de/thpeetz/kontor/tysc/data/Rooster.java | 0 .../de/thpeetz/kontor/tysc/data/Sport.java | 0 .../de/thpeetz/kontor/tysc/data/Team.java | 0 .../de/thpeetz/kontor/tysc/data/Vendor.java | 0 .../tysc/repository/CardRepository.java | 0 .../tysc/repository/CardSetRepository.java | 0 .../repository/FieldPositionRepository.java | 0 .../tysc/repository/PlayerRepository.java | 0 .../tysc/repository/RoosterRepository.java | 0 .../tysc/repository/SportRepository.java | 0 .../tysc/repository/TeamRepository.java | 0 .../tysc/repository/VendorRepository.java | 0 .../kontor/tysc/services/CardService.java | 0 .../kontor/tysc/services/SportService.java | 0 .../thpeetz/kontor/tysc/views/CardForm.java | 0 .../kontor/tysc/views/CardSetForm.java | 0 .../kontor/tysc/views/CardSetView.java | 0 .../thpeetz/kontor/tysc/views/CardView.java | 0 .../thpeetz/kontor/tysc/views/PlayerForm.java | 0 .../thpeetz/kontor/tysc/views/PlayerView.java | 0 .../kontor/tysc/views/PositionForm.java | 0 .../kontor/tysc/views/PositionView.java | 0 .../kontor/tysc/views/RoosterForm.java | 0 .../kontor/tysc/views/RoosterView.java | 0 .../thpeetz/kontor/tysc/views/SportForm.java | 0 .../thpeetz/kontor/tysc/views/SportView.java | 0 .../thpeetz/kontor/tysc/views/TeamForm.java | 0 .../thpeetz/kontor/tysc/views/TeamView.java | 0 .../thpeetz/kontor/tysc/views/TyscLayout.java | 0 .../thpeetz/kontor/tysc/views/VendorForm.java | 0 .../thpeetz/kontor/tysc/views/VendorView.java | 0 .../META-INF/resources/images/offline.png | Bin .../resources/META-INF/resources/offline.html | 0 .../src/main/resources/application.yml | 0 .../src/main/resources/banner.txt | 0 .../src/main/resources/logback-spring.xml | 0 .../de/thpeetz/kontor/ApplicationTests.java | 0 .../kontor/bookshelf/TestConstants.java | 0 .../data/ArticleAuthorRepositoryTest.java | 0 .../bookshelf/data/ArticleAuthorTest.java | 0 .../bookshelf/data/ArticleRepositoryTest.java | 0 .../kontor/bookshelf/data/ArticleTest.java | 0 .../bookshelf/data/AuthorRepositoryTest.java | 0 .../kontor/bookshelf/data/AuthorTest.java | 0 .../data/BookAuthorRepositoryTest.java | 0 .../kontor/bookshelf/data/BookAuthorTest.java | 0 .../bookshelf/data/BookRepositoryTest.java | 0 .../kontor/bookshelf/data/BookTest.java | 0 .../BookshelfPublisherRepositoryTest.java | 0 .../data/BookshelfPublisherTest.java | 0 .../services/BookshelfServiceTest.java | 0 .../kontor/comics/ComicConstantsTest.java | 0 .../thpeetz/kontor/comics/TestConstants.java | 0 .../comics/data/ArtistRepositoryTest.java | 0 .../kontor/comics/data/ArtistTest.java | 0 .../comics/data/ComicRepositoryTest.java | 0 .../thpeetz/kontor/comics/data/ComicTest.java | 0 .../comics/data/ComicWorkRepositoryTest.java | 0 .../kontor/comics/data/ComicWorkTest.java | 0 .../comics/data/IssueRepositoryTest.java | 0 .../thpeetz/kontor/comics/data/IssueTest.java | 0 .../comics/data/PublisherRepositoryTest.java | 0 .../kontor/comics/data/PublisherTest.java | 0 .../comics/data/StoryArcRepositoryTest.java | 0 .../kontor/comics/data/StoryArcTest.java | 0 .../data/TradePaperbackRepositoryTest.java | 0 .../comics/data/TradePaperbackTest.java | 0 .../comics/data/VolumeRepositoryTest.java | 0 .../kontor/comics/data/VolumeTest.java | 0 .../comics/data/WorktypeRepositoryTest.java | 0 .../kontor/comics/data/WorktypeTest.java | 0 .../comics/services/ComicServiceTest.java | 0 .../thpeetz/kontor/media/TestConstants.java | 0 .../kontor/media/data/MediaArticleTest.java | 0 .../kontor/media/data/MediaFileTest.java | 0 .../kontor/media/data/MediaVideoTest.java | 0 .../services/MediaArticleServiceTest.java | 0 .../media/services/MediaFileServiceTest.java | 0 .../media/services/MediaVideoServiceTest.java | 0 .../de/thpeetz/kontor/tysc/TestConstants.java | 0 .../thpeetz/kontor/tysc/data/CardSetTest.java | 0 .../de/thpeetz/kontor/tysc/data/CardTest.java | 0 .../kontor/tysc/data/FieldPositionTest.java | 0 .../thpeetz/kontor/tysc/data/PlayerTest.java | 0 .../thpeetz/kontor/tysc/data/RoosterTest.java | 0 .../thpeetz/kontor/tysc/data/SportTest.java | 0 .../de/thpeetz/kontor/tysc/data/TeamTest.java | 0 .../thpeetz/kontor/tysc/data/VendorTest.java | 0 .../tysc/repository/CardRepositoryTest.java | 0 .../repository/CardSetRepositoryTest.java | 0 .../FieldPositionRepositoryTest.java | 0 .../tysc/repository/PlayerRepositoryTest.java | 0 .../repository/RoosterRepositoryTest.java | 0 .../tysc/repository/SportRepositoryTest.java | 0 .../tysc/repository/TeamRepositoryTest.java | 0 .../tysc/repository/VendorRepositoryTest.java | 0 .../kontor/tysc/services/CardServiceTest.java | 0 .../tysc/services/SportServiceTest.java | 0 .../src/test/resources/application.properties | 0 python/kontor-cli/kontor/controllers/base.py | 2 +- python/kontor-cli/tests/test_kontor.py | 1 - python/tests/test_kontor.py | 1 - scripts/copy_to_mariadb.py | 1 - scripts/json_to_mariadb.py | 1 - scripts/schema/admin.py | 2 +- scripts/schema/bookshelf.py | 3 +- scripts/schema/comic.py | 2 +- scripts/schema/media.py | 2 +- scripts/schema/metadata.py | 2 +- scripts/schema/tysc.py | 2 +- .../META-INF/resources/icons/icon.png | Bin 45967 -> 0 bytes 366 files changed, 849 insertions(+), 160 deletions(-) create mode 100644 Makefile delete mode 100644 fastapi/Makefile delete mode 100644 fastapi/config/kontor-docker/database-config.yaml delete mode 100644 fastapi/config/kontor-docker/logging-config.yaml create mode 100644 kontor-api/.python-version rename {fastapi => kontor-api}/Dockerfile (89%) create mode 100644 kontor-api/Makefile rename fastapi/app/__init__.py => kontor-api/README.md (100%) create mode 100644 kontor-api/pyproject.toml rename {fastapi => kontor-api}/requirements.txt (100%) rename {fastapi/app/models => kontor-api/src}/__init__.py (100%) rename {fastapi/app => kontor-api/src}/main.py (82%) rename {fastapi/app/models/comics => kontor-api/src/models}/__init__.py (100%) rename {fastapi/app/routers => kontor-api/src/models/comics}/__init__.py (100%) rename {fastapi/app => kontor-api/src}/models/comics/artist.py (96%) rename {fastapi/app => kontor-api/src}/models/comics/comic.py (97%) rename {fastapi/tests => kontor-api/src/models/media}/__init__.py (100%) rename {fastapi/app => kontor-api/src}/models/media/file.py (95%) rename fastapi/setup.py => kontor-api/src/models/tysc/__init__.py (100%) rename fastapi/app/models/tysc.py => kontor-api/src/models/tysc/sport.py (99%) create mode 100644 kontor-api/src/routers/__init__.py rename {fastapi/app => kontor-api/src}/routers/comic.py (92%) rename {fastapi/app => kontor-api/src}/routers/media.py (97%) rename {fastapi/app => kontor-api/src}/routers/tysc.py (83%) rename {fastapi/app => kontor-api/src}/schema/__init__.py (100%) rename {fastapi/app => kontor-api/src}/schema/admin.py (95%) rename {fastapi/app => kontor-api/src}/schema/base.py (100%) rename {fastapi/app => kontor-api/src}/schema/bookshelf.py (94%) rename {fastapi/app => kontor-api/src}/schema/comic.py (97%) rename {fastapi/app => kontor-api/src}/schema/database.py (100%) rename {fastapi/app => kontor-api/src}/schema/media.py (97%) rename {fastapi/app => kontor-api/src}/schema/metadata.py (94%) rename {fastapi/app => kontor-api/src}/schema/tysc.py (97%) create mode 100644 kontor-api/tests/__init__.py rename {fastapi => kontor-api}/tests/test_main.py (92%) create mode 100644 kontor-api/uv.lock create mode 100644 kontor-spring/.factorypath rename {springboot => kontor-spring}/.gitattributes (100%) rename {springboot => kontor-spring}/.gitignore (100%) rename {springboot => kontor-spring}/Dockerfile (100%) create mode 100644 kontor-spring/Makefile rename {springboot => kontor-spring}/README.md (100%) rename {springboot => kontor-spring}/build.gradle (100%) rename {springboot => kontor-spring}/docker-compose.yml (100%) rename {springboot => kontor-spring}/frontend/themes/kontor/styles.css (100%) rename {springboot => kontor-spring}/frontend/themes/kontor/theme.json (100%) rename {springboot => kontor-spring}/gradle.properties (100%) rename {springboot => kontor-spring}/gradle/libs.versions.toml (100%) rename {springboot => kontor-spring}/gradle/wrapper/gradle-wrapper.jar (100%) rename {springboot => kontor-spring}/gradle/wrapper/gradle-wrapper.properties (100%) rename {springboot => kontor-spring}/gradlew (100%) rename {springboot => kontor-spring}/gradlew.bat (100%) rename {springboot => kontor-spring}/settings.gradle (100%) rename {springboot => kontor-spring}/src/docs/asciidoc/kontor-spring.adoc (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistformTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicWorkViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/IssueViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/PublisherViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/StoryArcViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/TradePaperbackViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/VolumeViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/comics/views/WorktypeViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardSetViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/FieldPositionViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/PlayerViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/RoosterViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/SportViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/TeamViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/java/de/thpeetz/kontor/tysc/views/VendorViewTest.java (100%) rename {springboot => kontor-spring}/src/integrationTest/resources/application.properties (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/Application.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/MailProperties.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/SetupModuleAdmin.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/AuthorizationMatrix.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/MetaDataColumn.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/MetaDataTable.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/ModuleData.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/Role.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/Token.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/data/User.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/AuthorizationMatrixRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/MailAccountRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataColumnRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataTableRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/ModuleDataRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/RoleRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/repository/UserRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/services/AdminService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/services/KontorUserDetailsService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/services/MailService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/services/MetaDataService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/services/ModuleService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/AdminLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/LoginView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/MetaDataForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/RoleForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/RoleView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/UserForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/UserProfileView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/admin/views/UserView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/BookshelfConstants.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/SetupModuleBookshelf.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/Article.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthor.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/Author.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/AuthorRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/Book.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthor.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/BookRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisher.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/services/BookshelfService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/BookForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/BookView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfPublisherView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/bookshelf/views/PublisherForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Artist.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Comic.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/ComicWork.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Issue.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Publisher.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/StoryArc.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/TradePaperback.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Volume.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ArtistForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ArtistView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ComicForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ComicLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/PublisherForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/PublisherView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/StoryArcForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/StoryArcView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/TradePaperBackForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/TradePaperbackView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/VolumeForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/VolumeView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/WorktypeForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/comics/views/WorktypeView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/data/AbstractEntity.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/data/AbstractLinkEntity.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/AvatarMenuBar.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/KontorLayoutUtil.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/MainLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/MainView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/SeparateMainLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/data/services/DataManagementService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/data/views/DataManagementView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/data/views/ImportArea.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/data/views/UploadArea.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/mailclient/data/Mail.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/mailclient/data/MailAccount.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/mailclient/views/EmailView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/MediaConstants.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/SetupModuleMedia.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaActor.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaActorFile.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaActorFileRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaActorRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaArticle.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaArticleRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaFile.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaFileRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaVideo.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/data/MediaVideoRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/services/MediaArticleService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/services/MediaFileService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/services/MediaVideoService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaActorForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaActorView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaArticleForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaFileForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaVideoForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/security/SecurityConfig.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/security/SecurityService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/SetupModuleTysc.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/TyscConstants.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Card.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/CardSet.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/FieldPosition.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Player.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Rooster.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Sport.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Team.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/data/Vendor.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/CardRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/CardSetRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/PlayerRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/RoosterRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/SportRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/TeamRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/repository/VendorRepository.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/services/CardService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/services/SportService.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/CardForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/CardSetForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/CardSetView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/CardView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/PlayerForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/PlayerView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/PositionForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/PositionView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/RoosterForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/RoosterView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/SportForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/SportView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/TeamForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/TeamView.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/TyscLayout.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/VendorForm.java (100%) rename {springboot => kontor-spring}/src/main/java/de/thpeetz/kontor/tysc/views/VendorView.java (100%) rename {springboot => kontor-spring}/src/main/resources/META-INF/resources/images/offline.png (100%) rename {springboot => kontor-spring}/src/main/resources/META-INF/resources/offline.html (100%) rename {springboot => kontor-spring}/src/main/resources/application.yml (100%) rename {springboot => kontor-spring}/src/main/resources/banner.txt (100%) rename {springboot => kontor-spring}/src/main/resources/logback-spring.xml (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/ApplicationTests.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/TestConstants.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/bookshelf/services/BookshelfServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/ComicConstantsTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/TestConstants.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/comics/services/ComicServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/TestConstants.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/data/MediaArticleTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/data/MediaFileTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/data/MediaVideoTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/services/MediaArticleServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/services/MediaFileServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/media/services/MediaVideoServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/TestConstants.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/CardSetTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/CardTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/FieldPositionTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/PlayerTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/RoosterTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/SportTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/TeamTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/data/VendorTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/CardRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/CardSetRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/PlayerRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/RoosterRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/SportRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/TeamRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/repository/VendorRepositoryTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/services/CardServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/java/de/thpeetz/kontor/tysc/services/SportServiceTest.java (100%) rename {springboot => kontor-spring}/src/test/resources/application.properties (100%) delete mode 100644 springboot/src/main/resources/META-INF/resources/icons/icon.png diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bc51f4a --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +kontor_api := kontor-api +kontor_spring := kontor-spring + +.PHONY: all $(kontor_spring) $(kontor_api) +all: $(kontor_spring) $(kontor_api) + +$(kontor_spring) $(kontor_api): + $(MAKE) --directory=$@ $(TARGET) + diff --git a/bottle-docker/app/src/userDAO.py b/bottle-docker/app/src/userDAO.py index df5a107..62b19e3 100644 --- a/bottle-docker/app/src/userDAO.py +++ b/bottle-docker/app/src/userDAO.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import hmac import random import string import hashlib @@ -29,7 +28,7 @@ class UserDAO: def make_pw_hash(self, pw,salt=None): if salt == None: - salt = self.make_salt(); + salt = self.make_salt() return hashlib.sha256(pw + salt).hexdigest()+","+ salt # Validates a user login. Returns user record or None @@ -68,7 +67,7 @@ class UserDAO: except pymongo.errors.OperationFailure: print("oops, mongo error") return False - except pymongo.errors.DuplicateKeyError as e: + except pymongo.errors.DuplicateKeyError: print("oops, username is already taken") return False diff --git a/django/kontor/homeoffice/admin.py b/django/kontor/homeoffice/admin.py index 8c38f3f..b97a94f 100755 --- a/django/kontor/homeoffice/admin.py +++ b/django/kontor/homeoffice/admin.py @@ -1,3 +1,2 @@ -from django.contrib import admin # Register your models here. diff --git a/django/kontor/homeoffice/tests.py b/django/kontor/homeoffice/tests.py index 7ce503c..4929020 100755 --- a/django/kontor/homeoffice/tests.py +++ b/django/kontor/homeoffice/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/django/kontor/library/tests.py b/django/kontor/library/tests.py index 7ce503c..4929020 100644 --- a/django/kontor/library/tests.py +++ b/django/kontor/library/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/django/kontor/medien/admin.py b/django/kontor/medien/admin.py index 8c38f3f..b97a94f 100755 --- a/django/kontor/medien/admin.py +++ b/django/kontor/medien/admin.py @@ -1,3 +1,2 @@ -from django.contrib import admin # Register your models here. diff --git a/django/kontor/tradingcards/admin.py b/django/kontor/tradingcards/admin.py index 8c38f3f..b97a94f 100755 --- a/django/kontor/tradingcards/admin.py +++ b/django/kontor/tradingcards/admin.py @@ -1,3 +1,2 @@ -from django.contrib import admin # Register your models here. diff --git a/django/kontor/tradingcards/models.py b/django/kontor/tradingcards/models.py index bd4b2ab..2c38a73 100755 --- a/django/kontor/tradingcards/models.py +++ b/django/kontor/tradingcards/models.py @@ -1,5 +1,4 @@ from __future__ import unicode_literals -from django.db import models # Create your models here. diff --git a/django/kontor/tradingcards/tests.py b/django/kontor/tradingcards/tests.py index 7ce503c..4929020 100755 --- a/django/kontor/tradingcards/tests.py +++ b/django/kontor/tradingcards/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/django/kontor/tysc/tests.py b/django/kontor/tysc/tests.py index 7ce503c..4929020 100644 --- a/django/kontor/tysc/tests.py +++ b/django/kontor/tysc/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/fastapi/Makefile b/fastapi/Makefile deleted file mode 100644 index 5c1c393..0000000 --- a/fastapi/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -.PHONY: clean virtualenv test docker dist dist-upload - -clean: - find . -name '*.py[co]' -delete - -virtualenv: - virtualenv --prompt '|> kontor-fastapi <| ' env - env/bin/pip install -r requirements.txt - env/bin/python setup.py develop - @echo - @echo "VirtualENV Setup Complete. Now run: source env/bin/activate" - @echo - -test: - pytest -v --cov --cov-report=term --cov-report=html:coverage-report - -docker: clean - docker build -t kontor-api:latest . - -dist: clean - rm -rf dist/* - python setup.py sdist - python setup.py bdist_wheel - -dist-upload: - twine upload dist/* diff --git a/fastapi/config/kontor-docker/database-config.yaml b/fastapi/config/kontor-docker/database-config.yaml deleted file mode 100644 index ff385c1..0000000 --- a/fastapi/config/kontor-docker/database-config.yaml +++ /dev/null @@ -1,12 +0,0 @@ -version: 1 - -sqlite: - file: /home/tpeetz/.sync/media/kontor.db - -mariadb: - host: mariadb - port: 3306 - user: kontor - password: kontor - database: kontor - diff --git a/fastapi/config/kontor-docker/logging-config.yaml b/fastapi/config/kontor-docker/logging-config.yaml deleted file mode 100644 index b85d9f1..0000000 --- a/fastapi/config/kontor-docker/logging-config.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: 1 -disable_existing_loggers: False - -formatters: - simple: - format: '[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s' - datefmt: '%Y-%m-%d %H:%M:%S' - -handlers: - console: - class: logging.StreamHandler - level: DEBUG - formatter: simple - stream: ext://sys.stdout - - file: - class: logging.FileHandler - level: INFO - formatter: simple - filename: /root/kontor-api.log - mode: a - -loggers: - development: - level: DEBUG - handlers: [console, file] - propagate: no - - staging: - level: INFO - handlers: [console, file] - propagate: no - - production: - level: WARNING - handlers: [file] - propagate: no - -root: - level: DEBUG - handlers: [console] - diff --git a/flask/kontor/auth/models.py b/flask/kontor/auth/models.py index fc3b8d4..b037f02 100644 --- a/flask/kontor/auth/models.py +++ b/flask/kontor/auth/models.py @@ -1,4 +1,4 @@ -from kontor.extensions import db, ma +from kontor.extensions import db from sqlalchemy.sql import func diff --git a/flask/kontor/comics/api.py b/flask/kontor/comics/api.py index 22bca28..163e0c2 100644 --- a/flask/kontor/comics/api.py +++ b/flask/kontor/comics/api.py @@ -1,4 +1,3 @@ -from flask import Blueprint, render_template, jsonify from kontor.comics import comics_api from kontor.models import Comic, comics_schema, Publisher, comic_schema, publisher_schema, publishers_schema diff --git a/flask/kontor/comics/routes.py b/flask/kontor/comics/routes.py index 0b0f53e..28b93fe 100644 --- a/flask/kontor/comics/routes.py +++ b/flask/kontor/comics/routes.py @@ -1,4 +1,4 @@ -from flask import Blueprint, render_template +from flask import render_template from kontor.comics import comics_bp from kontor.models import Comic diff --git a/flask/kontor/media/api.py b/flask/kontor/media/api.py index be9b875..d46fa00 100644 --- a/flask/kontor/media/api.py +++ b/flask/kontor/media/api.py @@ -1,4 +1,3 @@ -from flask import Blueprint, render_template, jsonify from kontor import app from kontor.media import media_api diff --git a/flask/kontor/media/routes.py b/flask/kontor/media/routes.py index a32f5e3..fb47a55 100644 --- a/flask/kontor/media/routes.py +++ b/flask/kontor/media/routes.py @@ -1,4 +1,4 @@ -from flask import Blueprint, render_template +from flask import render_template from kontor.media import media_bp from kontor.media.models import MediaFile diff --git a/kontor-api/.python-version b/kontor-api/.python-version new file mode 100644 index 0000000..24ee5b1 --- /dev/null +++ b/kontor-api/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/fastapi/Dockerfile b/kontor-api/Dockerfile similarity index 89% rename from fastapi/Dockerfile rename to kontor-api/Dockerfile index c6e1bbd..88b17e7 100644 --- a/fastapi/Dockerfile +++ b/kontor-api/Dockerfile @@ -2,7 +2,6 @@ FROM python:3.11 WORKDIR /code -COPY ./requirements.txt /code/requirements.txt COPY ./config/kontor-docker/logging-config.yaml /root/.config/kontor-docker/logging-config.yaml COPY ./config/kontor-docker/database-config.yaml /root/.config/kontor-docker/database-config.yaml diff --git a/kontor-api/Makefile b/kontor-api/Makefile new file mode 100644 index 0000000..80e2fce --- /dev/null +++ b/kontor-api/Makefile @@ -0,0 +1,17 @@ +.PHONY: clean virtualenv test docker + +clean: + find . -name '*.py[co]' -delete + +virtualenv: + uv sync + @echo + @echo "VirtualENV Setup Complete. Now run: source env/bin/activate" + @echo + +test: + pytest -v --cov --cov-report=term --cov-report=html:coverage-report + +docker: clean + docker build -t kontor-api:latest . + diff --git a/fastapi/app/__init__.py b/kontor-api/README.md similarity index 100% rename from fastapi/app/__init__.py rename to kontor-api/README.md diff --git a/kontor-api/pyproject.toml b/kontor-api/pyproject.toml new file mode 100644 index 0000000..31b5ab1 --- /dev/null +++ b/kontor-api/pyproject.toml @@ -0,0 +1,19 @@ +[project] +name = "kontor-api" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.13" +dependencies = [ + "beautifulsoup4>=4.13.4", + "fastapi[standard]>=0.115.12", + "httpx==0.24.1", + "mariadb>=1.1.12", + "pathlib>=1.0.1", + "platformdirs>=4.3.7", + "pytest==7.4.0", + "pyyaml>=6.0.2", + "requests>=2.32.3", + "sqlalchemy>=2.0.40", + "sqlmodel>=0.0.24", +] diff --git a/fastapi/requirements.txt b/kontor-api/requirements.txt similarity index 100% rename from fastapi/requirements.txt rename to kontor-api/requirements.txt diff --git a/fastapi/app/models/__init__.py b/kontor-api/src/__init__.py similarity index 100% rename from fastapi/app/models/__init__.py rename to kontor-api/src/__init__.py diff --git a/fastapi/app/main.py b/kontor-api/src/main.py similarity index 82% rename from fastapi/app/main.py rename to kontor-api/src/main.py index 1c51f0b..27d9c1b 100644 --- a/fastapi/app/main.py +++ b/kontor-api/src/main.py @@ -1,6 +1,6 @@ from fastapi import FastAPI -from .routers import comic, media, tysc +from src.routers import comic, media, tysc app = FastAPI() diff --git a/fastapi/app/models/comics/__init__.py b/kontor-api/src/models/__init__.py similarity index 100% rename from fastapi/app/models/comics/__init__.py rename to kontor-api/src/models/__init__.py diff --git a/fastapi/app/routers/__init__.py b/kontor-api/src/models/comics/__init__.py similarity index 100% rename from fastapi/app/routers/__init__.py rename to kontor-api/src/models/comics/__init__.py diff --git a/fastapi/app/models/comics/artist.py b/kontor-api/src/models/comics/artist.py similarity index 96% rename from fastapi/app/models/comics/artist.py rename to kontor-api/src/models/comics/artist.py index 2d0868a..0dea1b5 100644 --- a/fastapi/app/models/comics/artist.py +++ b/kontor-api/src/models/comics/artist.py @@ -3,7 +3,7 @@ from uuid import UUID from pydantic import BaseModel -from app.schema import Artist +from src.schema import Artist class ArtistCreation(BaseModel): diff --git a/fastapi/app/models/comics/comic.py b/kontor-api/src/models/comics/comic.py similarity index 97% rename from fastapi/app/models/comics/comic.py rename to kontor-api/src/models/comics/comic.py index 3737ad2..76824b2 100644 --- a/fastapi/app/models/comics/comic.py +++ b/kontor-api/src/models/comics/comic.py @@ -3,7 +3,7 @@ from uuid import UUID from pydantic import BaseModel -from app.schema import Comic +from src.schema import Comic class ComicResponse(BaseModel): diff --git a/fastapi/tests/__init__.py b/kontor-api/src/models/media/__init__.py similarity index 100% rename from fastapi/tests/__init__.py rename to kontor-api/src/models/media/__init__.py diff --git a/fastapi/app/models/media/file.py b/kontor-api/src/models/media/file.py similarity index 95% rename from fastapi/app/models/media/file.py rename to kontor-api/src/models/media/file.py index 3871a79..f8407ee 100644 --- a/fastapi/app/models/media/file.py +++ b/kontor-api/src/models/media/file.py @@ -1,6 +1,6 @@ from uuid import UUID -from app.schema.media import MediaFile +from src.schema.media import MediaFile from pydantic import BaseModel diff --git a/fastapi/setup.py b/kontor-api/src/models/tysc/__init__.py similarity index 100% rename from fastapi/setup.py rename to kontor-api/src/models/tysc/__init__.py diff --git a/fastapi/app/models/tysc.py b/kontor-api/src/models/tysc/sport.py similarity index 99% rename from fastapi/app/models/tysc.py rename to kontor-api/src/models/tysc/sport.py index 9eac5c6..8ddbfb3 100644 --- a/fastapi/app/models/tysc.py +++ b/kontor-api/src/models/tysc/sport.py @@ -6,4 +6,3 @@ from pydantic import BaseModel class SportResponse(BaseModel): id: UUID name: str - diff --git a/kontor-api/src/routers/__init__.py b/kontor-api/src/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fastapi/app/routers/comic.py b/kontor-api/src/routers/comic.py similarity index 92% rename from fastapi/app/routers/comic.py rename to kontor-api/src/routers/comic.py index efd9457..2132b87 100644 --- a/fastapi/app/routers/comic.py +++ b/kontor-api/src/routers/comic.py @@ -3,9 +3,9 @@ from typing import List from fastapi import APIRouter, HTTPException, status from sqlalchemy import select -from app.models.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details -from app.models.comics.artist import ArtistCreation, ArtistDetailResponse, ArtistResponse, get_artist_details -from app.schema import Comic, SessionDep, Artist +from src.models.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details +from src.models.comics.artist import ArtistCreation, ArtistDetailResponse, ArtistResponse, get_artist_details +from src.schema import Comic, SessionDep, Artist router = APIRouter( prefix="/comic", diff --git a/fastapi/app/routers/media.py b/kontor-api/src/routers/media.py similarity index 97% rename from fastapi/app/routers/media.py rename to kontor-api/src/routers/media.py index 11f3143..fb09443 100644 --- a/fastapi/app/routers/media.py +++ b/kontor-api/src/routers/media.py @@ -5,8 +5,8 @@ from uuid import uuid4, UUID from fastapi import APIRouter, status, HTTPException from sqlalchemy import select, Sequence -from app.models.media.file import MediaFileResponse, Link, get_file_details -from app.schema import MediaFile, SessionDep +from src.models.media.file import MediaFileResponse, Link, get_file_details +from src.schema import MediaFile, SessionDep router = APIRouter( prefix="/media", diff --git a/fastapi/app/routers/tysc.py b/kontor-api/src/routers/tysc.py similarity index 83% rename from fastapi/app/routers/tysc.py rename to kontor-api/src/routers/tysc.py index d5dad69..54db6b9 100644 --- a/fastapi/app/routers/tysc.py +++ b/kontor-api/src/routers/tysc.py @@ -1,8 +1,8 @@ from typing import List from fastapi import APIRouter -from app.models.tysc import SportResponse -from app.schema import Sport, SessionDep +from src.models.tysc.sport import SportResponse +from src.schema import Sport, SessionDep router = APIRouter( prefix="/tysc", diff --git a/fastapi/app/schema/__init__.py b/kontor-api/src/schema/__init__.py similarity index 100% rename from fastapi/app/schema/__init__.py rename to kontor-api/src/schema/__init__.py diff --git a/fastapi/app/schema/admin.py b/kontor-api/src/schema/admin.py similarity index 95% rename from fastapi/app/schema/admin.py rename to kontor-api/src/schema/admin.py index 3cf1f1f..dd89d68 100644 --- a/fastapi/app/schema/admin.py +++ b/kontor-api/src/schema/admin.py @@ -1,7 +1,6 @@ from datetime import datetime -from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String -from sqlalchemy.dialects.mysql import BIT +from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship, mapped_column, Mapped from .base import Base, BaseMixin diff --git a/fastapi/app/schema/base.py b/kontor-api/src/schema/base.py similarity index 100% rename from fastapi/app/schema/base.py rename to kontor-api/src/schema/base.py diff --git a/fastapi/app/schema/bookshelf.py b/kontor-api/src/schema/bookshelf.py similarity index 94% rename from fastapi/app/schema/bookshelf.py rename to kontor-api/src/schema/bookshelf.py index ab0fe5a..91e0ae4 100644 --- a/fastapi/app/schema/bookshelf.py +++ b/kontor-api/src/schema/bookshelf.py @@ -1,5 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String -from sqlalchemy.dialects.mysql import BIT +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/fastapi/app/schema/comic.py b/kontor-api/src/schema/comic.py similarity index 97% rename from fastapi/app/schema/comic.py rename to kontor-api/src/schema/comic.py index 51bee95..cbdc803 100644 --- a/fastapi/app/schema/comic.py +++ b/kontor-api/src/schema/comic.py @@ -1,4 +1,4 @@ -from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/fastapi/app/schema/database.py b/kontor-api/src/schema/database.py similarity index 100% rename from fastapi/app/schema/database.py rename to kontor-api/src/schema/database.py diff --git a/fastapi/app/schema/media.py b/kontor-api/src/schema/media.py similarity index 97% rename from fastapi/app/schema/media.py rename to kontor-api/src/schema/media.py index 2b6c421..e5ffdd8 100644 --- a/fastapi/app/schema/media.py +++ b/kontor-api/src/schema/media.py @@ -5,7 +5,7 @@ from pathlib import Path import requests from bs4 import BeautifulSoup -from sqlalchemy import Boolean, Column, DateTime, Integer, String, ForeignKey +from sqlalchemy import Boolean, Column, String, ForeignKey from sqlalchemy.orm import relationship from .base import Base, BaseMixin, BaseVideoMixin diff --git a/fastapi/app/schema/metadata.py b/kontor-api/src/schema/metadata.py similarity index 94% rename from fastapi/app/schema/metadata.py rename to kontor-api/src/schema/metadata.py index c08b225..9ac5aa4 100644 --- a/fastapi/app/schema/metadata.py +++ b/kontor-api/src/schema/metadata.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime, Integer, Boolean +from sqlalchemy import Column, String, ForeignKey, Integer, Boolean from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/fastapi/app/schema/tysc.py b/kontor-api/src/schema/tysc.py similarity index 97% rename from fastapi/app/schema/tysc.py rename to kontor-api/src/schema/tysc.py index 11918b1..3660f69 100644 --- a/fastapi/app/schema/tysc.py +++ b/kontor-api/src/schema/tysc.py @@ -1,4 +1,4 @@ -from sqlalchemy import Boolean, Column, DateTime, Integer, String, ForeignKey, UniqueConstraint +from sqlalchemy import Boolean, Column, Integer, String, ForeignKey, UniqueConstraint from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/kontor-api/tests/__init__.py b/kontor-api/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fastapi/tests/test_main.py b/kontor-api/tests/test_main.py similarity index 92% rename from fastapi/tests/test_main.py rename to kontor-api/tests/test_main.py index ca2e501..850d509 100644 --- a/fastapi/tests/test_main.py +++ b/kontor-api/tests/test_main.py @@ -1,6 +1,7 @@ from fastapi.testclient import TestClient import pytest -from app.main import app +from src.main import app + @pytest.fixture(name="client") def client_fixture(): diff --git a/kontor-api/uv.lock b/kontor-api/uv.lock new file mode 100644 index 0000000..969f5ce --- /dev/null +++ b/kontor-api/uv.lock @@ -0,0 +1,738 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 }, +] + +[[package]] +name = "email-validator" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 }, +] + +[[package]] +name = "fastapi" +version = "0.115.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/55/ae499352d82338331ca1e28c7f4a63bfd09479b16395dce38cf50a39e2c2/fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681", size = 295236 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 }, +] + +[package.optional-dependencies] +standard = [ + { name = "email-validator" }, + { name = "fastapi-cli", extra = ["standard"] }, + { name = "httpx" }, + { name = "jinja2" }, + { name = "python-multipart" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cli" +version = "0.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich-toolkit" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/73/82a5831fbbf8ed75905bacf5b2d9d3dfd6f04d6968b29fe6f72a5ae9ceb1/fastapi_cli-0.0.7.tar.gz", hash = "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e", size = 16753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/e6/5daefc851b514ce2287d8f5d358ae4341089185f78f3217a69d0ce3a390c/fastapi_cli-0.0.7-py3-none-any.whl", hash = "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4", size = 10705 }, +] + +[package.optional-dependencies] +standard = [ + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "greenlet" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/9c/666d8c71b18d0189cf801c0e0b31c4bfc609ac823883286045b1f3ae8994/greenlet-3.2.0.tar.gz", hash = "sha256:1d2d43bd711a43db8d9b9187500e6432ddb4fafe112d082ffabca8660a9e01a7", size = 183685 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/43/c0b655d4d7eae19282b028bcec449e5c80626ad0d8d0ca3703f9b1c29258/greenlet-3.2.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:b86a3ccc865ae601f446af042707b749eebc297928ea7bd0c5f60c56525850be", size = 269131 }, + { url = "https://files.pythonhosted.org/packages/7c/7d/c8f51c373c7f7ac0f73d04a6fd77ab34f6f643cb41a0d186d05ba96708e7/greenlet-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:144283ad88ed77f3ebd74710dd419b55dd15d18704b0ae05935766a93f5671c5", size = 637323 }, + { url = "https://files.pythonhosted.org/packages/89/65/c3ee41b2e56586737d6e124b250583695628ffa6b324855b3a1267a8d1d9/greenlet-3.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5be69cd50994b8465c3ad1467f9e63001f76e53a89440ad4440d1b6d52591280", size = 651430 }, + { url = "https://files.pythonhosted.org/packages/f0/07/33bd7a3dcde1db7259371d026ce76be1eb653d2d892334fc79a500b3c5ee/greenlet-3.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47aeadd1e8fbdef8fdceb8fb4edc0cbb398a57568d56fd68f2bc00d0d809e6b6", size = 645798 }, + { url = "https://files.pythonhosted.org/packages/35/5b/33c221a6a867030b0b770513a1b78f6c30e04294131dafdc8da78906bbe6/greenlet-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18adc14ab154ca6e53eecc9dc50ff17aeb7ba70b7e14779b26e16d71efa90038", size = 648271 }, + { url = "https://files.pythonhosted.org/packages/4d/dd/d6452248fa6093504e3b7525dc2bdc4e55a4296ec6ee74ba241a51d852e2/greenlet-3.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8622b33d8694ec373ad55050c3d4e49818132b44852158442e1931bb02af336", size = 606779 }, + { url = "https://files.pythonhosted.org/packages/9d/24/160f04d2589bcb15b8661dcd1763437b22e01643626899a4139bf98f02af/greenlet-3.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e8ac9a2c20fbff3d0b853e9ef705cdedb70d9276af977d1ec1cde86a87a4c821", size = 1117968 }, + { url = "https://files.pythonhosted.org/packages/6c/ff/c6e3f3a5168fef5209cfd9498b2b5dd77a0bf29dfc686a03dcc614cf4432/greenlet-3.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:cd37273dc7ca1d5da149b58c8b3ce0711181672ba1b09969663905a765affe21", size = 1145510 }, + { url = "https://files.pythonhosted.org/packages/dc/62/5215e374819052e542b5bde06bd7d4a171454b6938c96a2384f21cb94279/greenlet-3.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8a8940a8d301828acd8b9f3f85db23069a692ff2933358861b19936e29946b95", size = 296004 }, + { url = "https://files.pythonhosted.org/packages/62/6d/dc9c909cba5cbf4b0833fce69912927a8ca74791c23c47b9fd4f28092108/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee59db626760f1ca8da697a086454210d36a19f7abecc9922a2374c04b47735b", size = 629900 }, + { url = "https://files.pythonhosted.org/packages/5e/a9/f3f304fbbbd604858ff3df303d7fa1d8f7f9e45a6ef74481aaf03aaac021/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7154b13ef87a8b62fc05419f12d75532d7783586ad016c57b5de8a1c6feeb517", size = 635270 }, + { url = "https://files.pythonhosted.org/packages/34/92/4b7b4e2e23ecc723cceef9fe3898e78c8e14e106cc7ba2f276a66161da3e/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:199453d64b02d0c9d139e36d29681efd0e407ed8e2c0bf89d88878d6a787c28f", size = 632534 }, + { url = "https://files.pythonhosted.org/packages/da/7f/91f0ecbe72c9d789fb7f400b39da9d1e87fcc2cf8746a9636479ba79ab01/greenlet-3.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0010e928e1901d36625f21d008618273f9dda26b516dbdecf873937d39c9dff0", size = 628826 }, + { url = "https://files.pythonhosted.org/packages/9f/59/e449a44ce52b13751f55376d85adc155dd311608f6d2aa5b6bd2c8d15486/greenlet-3.2.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6005f7a86de836a1dc4b8d824a2339cdd5a1ca7cb1af55ea92575401f9952f4c", size = 593697 }, + { url = "https://files.pythonhosted.org/packages/bb/09/cca3392927c5c990b7a8ede64ccd0712808438d6490d63ce6b8704d6df5f/greenlet-3.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:17fd241c0d50bacb7ce8ff77a30f94a2d0ca69434ba2e0187cf95a5414aeb7e1", size = 1105762 }, + { url = "https://files.pythonhosted.org/packages/4d/b9/3d201f819afc3b7a8cd7ebe645f1a17799603e2d62c968154518f79f4881/greenlet-3.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:7b17a26abc6a1890bf77d5d6b71c0999705386b00060d15c10b8182679ff2790", size = 1125173 }, + { url = "https://files.pythonhosted.org/packages/80/7b/773a30602234597fc2882091f8e1d1a38ea0b4419d99ca7ed82c827e2c3a/greenlet-3.2.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:397b6bbda06f8fe895893d96218cd6f6d855a6701dc45012ebe12262423cec8b", size = 269908 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "httpcore" +version = "0.17.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "h11" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/ad/c98ecdbfe04417e71e143bf2f2fb29128e4787d78d1cedba21bd250c7e7a/httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888", size = 62676 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/2c/2bde7ff8dd2064395555220cbf7cba79991172bf5315a07eb3ac7688d9f1/httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87", size = 74513 }, +] + +[[package]] +name = "httptools" +version = "0.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/9a/ce5e1f7e131522e6d3426e8e7a490b3a01f39a6696602e1c4f33f9e94277/httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", size = 240639 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/a3/9fe9ad23fd35f7de6b91eeb60848986058bd8b5a5c1e256f5860a160cc3e/httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", size = 197214 }, + { url = "https://files.pythonhosted.org/packages/ea/d9/82d5e68bab783b632023f2fa31db20bebb4e89dfc4d2293945fd68484ee4/httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", size = 102431 }, + { url = "https://files.pythonhosted.org/packages/96/c1/cb499655cbdbfb57b577734fde02f6fa0bbc3fe9fb4d87b742b512908dff/httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", size = 473121 }, + { url = "https://files.pythonhosted.org/packages/af/71/ee32fd358f8a3bb199b03261f10921716990808a675d8160b5383487a317/httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", size = 473805 }, + { url = "https://files.pythonhosted.org/packages/8a/0a/0d4df132bfca1507114198b766f1737d57580c9ad1cf93c1ff673e3387be/httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", size = 448858 }, + { url = "https://files.pythonhosted.org/packages/1e/6a/787004fdef2cabea27bad1073bf6a33f2437b4dbd3b6fb4a9d71172b1c7c/httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", size = 452042 }, + { url = "https://files.pythonhosted.org/packages/4d/dc/7decab5c404d1d2cdc1bb330b1bf70e83d6af0396fd4fc76fc60c0d522bf/httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", size = 87682 }, +] + +[[package]] +name = "httpx" +version = "0.24.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/2a/114d454cb77657dbf6a293e69390b96318930ace9cd96b51b99682493276/httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd", size = 81858 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/91/e41f64f03d2a13aee7e8c819d82ee3aa7cdc484d18c0ae859742597d5aa0/httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd", size = 75377 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "kontor-api" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "fastapi", extra = ["standard"] }, + { name = "httpx" }, + { name = "mariadb" }, + { name = "pathlib" }, + { name = "platformdirs" }, + { name = "pytest" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, + { name = "sqlmodel" }, +] + +[package.metadata] +requires-dist = [ + { name = "beautifulsoup4", specifier = ">=4.13.4" }, + { name = "fastapi", extras = ["standard"], specifier = ">=0.115.12" }, + { name = "httpx", specifier = "==0.24.1" }, + { name = "mariadb", specifier = ">=1.1.12" }, + { name = "pathlib", specifier = ">=1.0.1" }, + { name = "platformdirs", specifier = ">=4.3.7" }, + { name = "pytest", specifier = "==7.4.0" }, + { name = "pyyaml", specifier = ">=6.0.2" }, + { name = "requests", specifier = ">=2.32.3" }, + { name = "sqlalchemy", specifier = ">=2.0.40" }, + { name = "sqlmodel", specifier = ">=0.0.24" }, +] + +[[package]] +name = "mariadb" +version = "1.1.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/bb/4bbc803fbdafedbfba015f7cc1ab1e87a6d1de36725ba058c53e2f8a45ad/mariadb-1.1.12.tar.gz", hash = "sha256:50b02ff2c78b1b4f4628a054e3c8c7dd92972137727a5cc309a64c9ed20c878c", size = 85934 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/1b/b6eca3870ac1b5577a10d3b49ba42ac263c2e5718c9224cc1c8463940422/mariadb-1.1.12-cp313-cp313-win32.whl", hash = "sha256:ba43c42130d41352f32a5786c339cc931d05472ef7640fa3764d428dc294b88e", size = 184338 }, + { url = "https://files.pythonhosted.org/packages/fb/ff/c29a543ee1f9009755bc304138f61cd9b0ee1f14533e446513f84ccf143a/mariadb-1.1.12-cp313-cp313-win_amd64.whl", hash = "sha256:b69bc18418e72fcf359d17736cdc3f601a271203aff13ef7c57a415c8fd52ab0", size = 201272 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, +] + +[[package]] +name = "pathlib" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz", hash = "sha256:6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f", size = 49298 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl", hash = "sha256:f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147", size = 14363 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/2d/7d512a3913d60623e7eb945c6d1b4f0bddf1d0b7ada5225274c87e5b53d1/platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351", size = 21291 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", size = 18499 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "pydantic" +version = "2.11.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/2e/ca897f093ee6c5f3b0bee123ee4465c50e75431c3d5b6a3b44a47134e891/pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3", size = 785513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/1d/407b29780a289868ed696d1616f4aad49d6388e5a77f567dcd2629dcd7b8/pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f", size = 443591 }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/19/ed6a078a5287aea7922de6841ef4c06157931622c89c2a47940837b5eecd/pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df", size = 434395 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/24/eed3466a4308d79155f1cdd5c7432c80ddcc4530ba8623b79d5ced021641/pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a", size = 2033551 }, + { url = "https://files.pythonhosted.org/packages/ab/14/df54b1a0bc9b6ded9b758b73139d2c11b4e8eb43e8ab9c5847c0a2913ada/pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266", size = 1852785 }, + { url = "https://files.pythonhosted.org/packages/fa/96/e275f15ff3d34bb04b0125d9bc8848bf69f25d784d92a63676112451bfb9/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3", size = 1897758 }, + { url = "https://files.pythonhosted.org/packages/b7/d8/96bc536e975b69e3a924b507d2a19aedbf50b24e08c80fb00e35f9baaed8/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a", size = 1986109 }, + { url = "https://files.pythonhosted.org/packages/90/72/ab58e43ce7e900b88cb571ed057b2fcd0e95b708a2e0bed475b10130393e/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516", size = 2129159 }, + { url = "https://files.pythonhosted.org/packages/dc/3f/52d85781406886c6870ac995ec0ba7ccc028b530b0798c9080531b409fdb/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764", size = 2680222 }, + { url = "https://files.pythonhosted.org/packages/f4/56/6e2ef42f363a0eec0fd92f74a91e0ac48cd2e49b695aac1509ad81eee86a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d", size = 2006980 }, + { url = "https://files.pythonhosted.org/packages/4c/c0/604536c4379cc78359f9ee0aa319f4aedf6b652ec2854953f5a14fc38c5a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4", size = 2120840 }, + { url = "https://files.pythonhosted.org/packages/1f/46/9eb764814f508f0edfb291a0f75d10854d78113fa13900ce13729aaec3ae/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde", size = 2072518 }, + { url = "https://files.pythonhosted.org/packages/42/e3/fb6b2a732b82d1666fa6bf53e3627867ea3131c5f39f98ce92141e3e3dc1/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e", size = 2248025 }, + { url = "https://files.pythonhosted.org/packages/5c/9d/fbe8fe9d1aa4dac88723f10a921bc7418bd3378a567cb5e21193a3c48b43/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd", size = 2254991 }, + { url = "https://files.pythonhosted.org/packages/aa/99/07e2237b8a66438d9b26482332cda99a9acccb58d284af7bc7c946a42fd3/pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f", size = 1915262 }, + { url = "https://files.pythonhosted.org/packages/8a/f4/e457a7849beeed1e5defbcf5051c6f7b3c91a0624dd31543a64fc9adcf52/pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40", size = 1956626 }, + { url = "https://files.pythonhosted.org/packages/20/d0/e8d567a7cff7b04e017ae164d98011f1e1894269fe8e90ea187a3cbfb562/pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523", size = 1909590 }, + { url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963 }, + { url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896 }, + { url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pytest" +version = "7.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/f3/dadfbdbf6b6c8b5bd02adb1e08bc9fbb45ba51c68b0893fa536378cdf485/pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a", size = 1349733 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/b2/741130cbcf2bbfa852ed95a60dc311c9e232c7ed25bac3d9b8880a8df4ae/pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32", size = 323580 }, +] + +[[package]] +name = "python-dotenv" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "rich" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 }, +] + +[[package]] +name = "rich-toolkit" +version = "0.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/ea/13945d58d556a28dfb0f774ad5c8af759527390e59505a40d164bf8ce1ce/rich_toolkit-0.14.1.tar.gz", hash = "sha256:9248e2d087bfc01f3e4c5c8987e05f7fa744d00dd22fa2be3aa6e50255790b3f", size = 104416 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/e8/61c5b12d1567fdba41a6775db12a090d88b8305424ee7c47259c70d33cb4/rich_toolkit-0.14.1-py3-none-any.whl", hash = "sha256:dc92c0117d752446d04fdc828dbca5873bcded213a091a5d3742a2beec2e6559", size = 24177 }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.40" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "(python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/c3/3f2bfa5e4dcd9938405fe2fab5b6ab94a9248a4f9536ea2fd497da20525f/sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", size = 9664299 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/18/4e3a86cc0232377bc48c373a9ba6a1b3fb79ba32dbb4eda0b357f5a2c59d/sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01", size = 2107887 }, + { url = "https://files.pythonhosted.org/packages/cb/60/9fa692b1d2ffc4cbd5f47753731fd332afed30137115d862d6e9a1e962c7/sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705", size = 2098367 }, + { url = "https://files.pythonhosted.org/packages/4c/9f/84b78357ca641714a439eb3fbbddb17297dacfa05d951dbf24f28d7b5c08/sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364", size = 3184806 }, + { url = "https://files.pythonhosted.org/packages/4b/7d/e06164161b6bfce04c01bfa01518a20cccbd4100d5c951e5a7422189191a/sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0", size = 3198131 }, + { url = "https://files.pythonhosted.org/packages/6d/51/354af20da42d7ec7b5c9de99edafbb7663a1d75686d1999ceb2c15811302/sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db", size = 3131364 }, + { url = "https://files.pythonhosted.org/packages/7a/2f/48a41ff4e6e10549d83fcc551ab85c268bde7c03cf77afb36303c6594d11/sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26", size = 3159482 }, + { url = "https://files.pythonhosted.org/packages/33/ac/e5e0a807163652a35be878c0ad5cfd8b1d29605edcadfb5df3c512cdf9f3/sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500", size = 2080704 }, + { url = "https://files.pythonhosted.org/packages/1c/cb/f38c61f7f2fd4d10494c1c135ff6a6ddb63508d0b47bccccd93670637309/sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad", size = 2104564 }, + { url = "https://files.pythonhosted.org/packages/d1/7c/5fc8e802e7506fe8b55a03a2e1dab156eae205c91bee46305755e086d2e2/sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", size = 1903894 }, +] + +[[package]] +name = "sqlmodel" +version = "0.0.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "sqlalchemy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/4b/c2ad0496f5bdc6073d9b4cef52be9c04f2b37a5773441cc6600b1857648b/sqlmodel-0.0.24.tar.gz", hash = "sha256:cc5c7613c1a5533c9c7867e1aab2fd489a76c9e8a061984da11b4e613c182423", size = 116780 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/91/484cd2d05569892b7fef7f5ceab3bc89fb0f8a8c0cde1030d383dbc5449c/sqlmodel-0.0.24-py3-none-any.whl", hash = "sha256:6778852f09370908985b667d6a3ab92910d0d5ec88adcaf23dbc242715ff7193", size = 28622 }, +] + +[[package]] +name = "starlette" +version = "0.46.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 }, +] + +[[package]] +name = "typer" +version = "0.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/6f/3991f0f1c7fcb2df31aef28e0594d8d54b05393a0e4e34c65e475c2a5d41/typer-0.15.2.tar.gz", hash = "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5", size = 100711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl", hash = "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc", size = 45061 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 }, +] + +[[package]] +name = "urllib3" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, +] + +[[package]] +name = "uvicorn" +version = "0.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/ae/9bbb19b9e1c450cf9ecaef06463e40234d98d95bf572fab11b4f19ae5ded/uvicorn-0.34.2.tar.gz", hash = "sha256:0e929828f6186353a80b58ea719861d2629d766293b6d19baf086ba31d4f3328", size = 76815 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/4b/4cef6ce21a2aaca9d852a6e84ef4f135d99fcd74fa75105e2fc0c8308acd/uvicorn-0.34.2-py3-none-any.whl", hash = "sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403", size = 62483 }, +] + +[package.optional-dependencies] +standard = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "httptools" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "uvloop" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123 }, + { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325 }, + { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806 }, + { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068 }, + { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428 }, + { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018 }, +] + +[[package]] +name = "watchfiles" +version = "1.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/e2/8ed598c42057de7aa5d97c472254af4906ff0a59a66699d426fc9ef795d7/watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9", size = 94537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/62/435766874b704f39b2fecd8395a29042db2b5ec4005bd34523415e9bd2e0/watchfiles-1.0.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d", size = 401531 }, + { url = "https://files.pythonhosted.org/packages/6e/a6/e52a02c05411b9cb02823e6797ef9bbba0bfaf1bb627da1634d44d8af833/watchfiles-1.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763", size = 392417 }, + { url = "https://files.pythonhosted.org/packages/3f/53/c4af6819770455932144e0109d4854437769672d7ad897e76e8e1673435d/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40", size = 453423 }, + { url = "https://files.pythonhosted.org/packages/cb/d1/8e88df58bbbf819b8bc5cfbacd3c79e01b40261cad0fc84d1e1ebd778a07/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563", size = 458185 }, + { url = "https://files.pythonhosted.org/packages/ff/70/fffaa11962dd5429e47e478a18736d4e42bec42404f5ee3b92ef1b87ad60/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04", size = 486696 }, + { url = "https://files.pythonhosted.org/packages/39/db/723c0328e8b3692d53eb273797d9a08be6ffb1d16f1c0ba2bdbdc2a3852c/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f", size = 522327 }, + { url = "https://files.pythonhosted.org/packages/cd/05/9fccc43c50c39a76b68343484b9da7b12d42d0859c37c61aec018c967a32/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a", size = 499741 }, + { url = "https://files.pythonhosted.org/packages/23/14/499e90c37fa518976782b10a18b18db9f55ea73ca14641615056f8194bb3/watchfiles-1.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827", size = 453995 }, + { url = "https://files.pythonhosted.org/packages/61/d9/f75d6840059320df5adecd2c687fbc18960a7f97b55c300d20f207d48aef/watchfiles-1.0.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a", size = 629693 }, + { url = "https://files.pythonhosted.org/packages/fc/17/180ca383f5061b61406477218c55d66ec118e6c0c51f02d8142895fcf0a9/watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936", size = 624677 }, + { url = "https://files.pythonhosted.org/packages/bf/15/714d6ef307f803f236d69ee9d421763707899d6298d9f3183e55e366d9af/watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc", size = 277804 }, + { url = "https://files.pythonhosted.org/packages/a8/b4/c57b99518fadf431f3ef47a610839e46e5f8abf9814f969859d1c65c02c7/watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11", size = 291087 }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440 }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098 }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329 }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 }, +] diff --git a/kontor-gui/gui/comic_window.py b/kontor-gui/gui/comic_window.py index c4a9064..d032998 100644 --- a/kontor-gui/gui/comic_window.py +++ b/kontor-gui/gui/comic_window.py @@ -1,5 +1,5 @@ from PySide6.QtCore import Signal, QSortFilterProxyModel -from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow, \ +from PySide6.QtWidgets import QWidget, QVBoxLayout, QTabWidget, QTableView, QMdiSubWindow, \ QHeaderView from gui.model_config import KontorModelConfig diff --git a/kontor-gui/gui/main_window.py b/kontor-gui/gui/main_window.py index e30727a..336e2be 100644 --- a/kontor-gui/gui/main_window.py +++ b/kontor-gui/gui/main_window.py @@ -1,6 +1,6 @@ -from PySide6.QtCore import Qt, QThreadPool +from PySide6.QtCore import Qt from PySide6.QtGui import QAction, QIcon, QGuiApplication -from PySide6.QtWidgets import QWidget, QVBoxLayout, QMenu, QMessageBox, QTabWidget, QTableView, QProgressBar, QMdiArea +from PySide6.QtWidgets import QMenu, QMessageBox, QProgressBar, QMdiArea from PySide6.QtWidgets import QLabel, QMainWindow from sqlalchemy import Engine from kontor_schema import KontorDB @@ -10,8 +10,6 @@ from .media_window import MediaWindow from .meta_data_window import MetaDataWindow from .progress import ProgressUpdate from .dialogs import ExportKontorDialog, ImportKontorDialog -from .model_config import KontorModelConfig -from .table_model import KontorTableModel from .worker import VideoDownloader @@ -129,7 +127,7 @@ class MainWindow(QMainWindow): self.statusBar.addPermanentWidget(self.status_progress) def about(self): - QMessageBox.about(self, "Über Kontor", f"Python: 3.11\nKontor: 0.1.0") + QMessageBox.about(self, "Über Kontor", "Python: 3.11\nKontor: 0.1.0") def show_comic_window(self): if 'comic' not in self._subwindows: diff --git a/kontor-gui/gui/media_window.py b/kontor-gui/gui/media_window.py index 080d5cd..f084c76 100644 --- a/kontor-gui/gui/media_window.py +++ b/kontor-gui/gui/media_window.py @@ -1,6 +1,5 @@ from PySide6.QtCore import Signal, QSortFilterProxyModel -from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView, QHeaderView, QLabel, \ - QHBoxLayout, QFormLayout, QLineEdit +from PySide6.QtWidgets import QMdiSubWindow, QWidget, QVBoxLayout, QTabWidget, QTableView from .model_config import KontorModelConfig from .table_details import KontorTableDetailsView diff --git a/kontor-gui/gui/meta_data_window.py b/kontor-gui/gui/meta_data_window.py index 5c4af30..567abeb 100644 --- a/kontor-gui/gui/meta_data_window.py +++ b/kontor-gui/gui/meta_data_window.py @@ -1,6 +1,5 @@ from PySide6.QtCore import Signal, QSortFilterProxyModel -from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMenu, QTableView, QMdiSubWindow, \ - QHeaderView +from PySide6.QtWidgets import QWidget, QVBoxLayout, QTabWidget, QTableView, QMdiSubWindow from gui.model_config import KontorModelConfig from gui.table_model import KontorTableModel diff --git a/kontor-gui/gui/model_config.py b/kontor-gui/gui/model_config.py index 1259fc3..6a4e00b 100644 --- a/kontor-gui/gui/model_config.py +++ b/kontor-gui/gui/model_config.py @@ -1,4 +1,4 @@ -from PySide6.QtWidgets import QHBoxLayout, QCheckBox, QMdiSubWindow +from PySide6.QtWidgets import QHBoxLayout, QCheckBox from kontor_schema import KontorDB, ColumnEntry diff --git a/kontor-gui/gui/worker.py b/kontor-gui/gui/worker.py index 96ecf12..5f0d4d6 100644 --- a/kontor-gui/gui/worker.py +++ b/kontor-gui/gui/worker.py @@ -1,6 +1,5 @@ -import sys -from PySide6.QtCore import QObject, Signal, QRunnable, Slot, QThread +from PySide6.QtCore import Signal, QThread class VideoDownloader(QThread): diff --git a/kontor-schema/build/lib/kontor_schema/__init__.py b/kontor-schema/build/lib/kontor_schema/__init__.py index e8d7a61..3c7ff98 100644 --- a/kontor-schema/build/lib/kontor_schema/__init__.py +++ b/kontor-schema/build/lib/kontor_schema/__init__.py @@ -159,7 +159,7 @@ class KontorDB: entry[column_name] = str(value) else: entry[column_name] = value - except AttributeError as error: + except AttributeError: self.log.debug("could not get value") entries.append(entry) db[table] = entries @@ -278,7 +278,7 @@ class KontorDB: self.log.info(error.orig) def update_title(self, dry_run=False): - self.log.info(f"get links to review of media_file") + self.log.info("get links to review of media_file") __session__ = sessionmaker(self.engine) with __session__() as session: links = session.query(MediaFile).filter(MediaFile.review == 1).all() @@ -304,7 +304,7 @@ class KontorDB: session.commit() def download_file(self, dry_run=False): - self.log.info(f"download marked files of media_file") + self.log.info("download marked files of media_file") __session__ = sessionmaker(self.engine) with __session__() as session: links = session.query(MediaFile).filter(MediaFile.should_download == 1).all() diff --git a/kontor-schema/build/lib/kontor_schema/base.py b/kontor-schema/build/lib/kontor_schema/base.py index c976167..21186d4 100644 --- a/kontor-schema/build/lib/kontor_schema/base.py +++ b/kontor-schema/build/lib/kontor_schema/base.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import Integer, func, String +from sqlalchemy import func from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column diff --git a/kontor-schema/build/lib/kontor_schema/bookshelf.py b/kontor-schema/build/lib/kontor_schema/bookshelf.py index ab0fe5a..91e0ae4 100644 --- a/kontor-schema/build/lib/kontor_schema/bookshelf.py +++ b/kontor-schema/build/lib/kontor_schema/bookshelf.py @@ -1,5 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String -from sqlalchemy.dialects.mysql import BIT +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/kontor-schema/build/lib/kontor_schema/comic.py b/kontor-schema/build/lib/kontor_schema/comic.py index fe6ec19..1052d79 100644 --- a/kontor-schema/build/lib/kontor_schema/comic.py +++ b/kontor-schema/build/lib/kontor_schema/comic.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/build/lib/kontor_schema/media.py b/kontor-schema/build/lib/kontor_schema/media.py index d9d1bf2..2f8e865 100644 --- a/kontor-schema/build/lib/kontor_schema/media.py +++ b/kontor-schema/build/lib/kontor_schema/media.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy import Column, String from sqlalchemy.dialects.mysql import BIT from .base import Base, BaseMixin diff --git a/kontor-schema/build/lib/kontor_schema/metadata.py b/kontor-schema/build/lib/kontor_schema/metadata.py index 21d4d49..3a7d7de 100644 --- a/kontor-schema/build/lib/kontor_schema/metadata.py +++ b/kontor-schema/build/lib/kontor_schema/metadata.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime, Integer, Boolean +from sqlalchemy import Column, String, ForeignKey, Integer from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/build/lib/kontor_schema/tysc.py b/kontor-schema/build/lib/kontor_schema/tysc.py index ef8bc5d..32c88f1 100644 --- a/kontor-schema/build/lib/kontor_schema/tysc.py +++ b/kontor-schema/build/lib/kontor_schema/tysc.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, Integer, String, ForeignKey, UniqueConstraint +from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/kontor_schema/admin.py b/kontor-schema/kontor_schema/admin.py index 8dd33bd..c5b3e99 100644 --- a/kontor-schema/kontor_schema/admin.py +++ b/kontor-schema/kontor_schema/admin.py @@ -1,6 +1,6 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship, mapped_column, Mapped diff --git a/kontor-schema/kontor_schema/bookshelf.py b/kontor-schema/kontor_schema/bookshelf.py index ab0fe5a..91e0ae4 100644 --- a/kontor-schema/kontor_schema/bookshelf.py +++ b/kontor-schema/kontor_schema/bookshelf.py @@ -1,5 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String -from sqlalchemy.dialects.mysql import BIT +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/kontor-schema/kontor_schema/comic.py b/kontor-schema/kontor_schema/comic.py index fe6ec19..1052d79 100644 --- a/kontor-schema/kontor_schema/comic.py +++ b/kontor-schema/kontor_schema/comic.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/kontor_schema/media.py b/kontor-schema/kontor_schema/media.py index bb2661e..f17eb43 100644 --- a/kontor-schema/kontor_schema/media.py +++ b/kontor-schema/kontor_schema/media.py @@ -5,7 +5,7 @@ from pathlib import Path import requests from bs4 import BeautifulSoup -from sqlalchemy import Column, DateTime, Integer, String, ForeignKey +from sqlalchemy import Column, String, ForeignKey from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/kontor_schema/metadata.py b/kontor-schema/kontor_schema/metadata.py index f9538bb..950cebe 100644 --- a/kontor-schema/kontor_schema/metadata.py +++ b/kontor-schema/kontor_schema/metadata.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime, Integer, Boolean +from sqlalchemy import Column, String, ForeignKey, Integer from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-schema/kontor_schema/tysc.py b/kontor-schema/kontor_schema/tysc.py index ef8bc5d..32c88f1 100644 --- a/kontor-schema/kontor_schema/tysc.py +++ b/kontor-schema/kontor_schema/tysc.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, Integer, String, ForeignKey, UniqueConstraint +from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/kontor-spring/.factorypath b/kontor-spring/.factorypath new file mode 100644 index 0000000..5751075 --- /dev/null +++ b/kontor-spring/.factorypath @@ -0,0 +1,3 @@ + + + diff --git a/springboot/.gitattributes b/kontor-spring/.gitattributes similarity index 100% rename from springboot/.gitattributes rename to kontor-spring/.gitattributes diff --git a/springboot/.gitignore b/kontor-spring/.gitignore similarity index 100% rename from springboot/.gitignore rename to kontor-spring/.gitignore diff --git a/springboot/Dockerfile b/kontor-spring/Dockerfile similarity index 100% rename from springboot/Dockerfile rename to kontor-spring/Dockerfile diff --git a/kontor-spring/Makefile b/kontor-spring/Makefile new file mode 100644 index 0000000..55728ed --- /dev/null +++ b/kontor-spring/Makefile @@ -0,0 +1,8 @@ +.PYHONY: all + +all: + ./gradlew build + +docker: + ./gradlew dockerImage + diff --git a/springboot/README.md b/kontor-spring/README.md similarity index 100% rename from springboot/README.md rename to kontor-spring/README.md diff --git a/springboot/build.gradle b/kontor-spring/build.gradle similarity index 100% rename from springboot/build.gradle rename to kontor-spring/build.gradle diff --git a/springboot/docker-compose.yml b/kontor-spring/docker-compose.yml similarity index 100% rename from springboot/docker-compose.yml rename to kontor-spring/docker-compose.yml diff --git a/springboot/frontend/themes/kontor/styles.css b/kontor-spring/frontend/themes/kontor/styles.css similarity index 100% rename from springboot/frontend/themes/kontor/styles.css rename to kontor-spring/frontend/themes/kontor/styles.css diff --git a/springboot/frontend/themes/kontor/theme.json b/kontor-spring/frontend/themes/kontor/theme.json similarity index 100% rename from springboot/frontend/themes/kontor/theme.json rename to kontor-spring/frontend/themes/kontor/theme.json diff --git a/springboot/gradle.properties b/kontor-spring/gradle.properties similarity index 100% rename from springboot/gradle.properties rename to kontor-spring/gradle.properties diff --git a/springboot/gradle/libs.versions.toml b/kontor-spring/gradle/libs.versions.toml similarity index 100% rename from springboot/gradle/libs.versions.toml rename to kontor-spring/gradle/libs.versions.toml diff --git a/springboot/gradle/wrapper/gradle-wrapper.jar b/kontor-spring/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from springboot/gradle/wrapper/gradle-wrapper.jar rename to kontor-spring/gradle/wrapper/gradle-wrapper.jar diff --git a/springboot/gradle/wrapper/gradle-wrapper.properties b/kontor-spring/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from springboot/gradle/wrapper/gradle-wrapper.properties rename to kontor-spring/gradle/wrapper/gradle-wrapper.properties diff --git a/springboot/gradlew b/kontor-spring/gradlew similarity index 100% rename from springboot/gradlew rename to kontor-spring/gradlew diff --git a/springboot/gradlew.bat b/kontor-spring/gradlew.bat similarity index 100% rename from springboot/gradlew.bat rename to kontor-spring/gradlew.bat diff --git a/springboot/settings.gradle b/kontor-spring/settings.gradle similarity index 100% rename from springboot/settings.gradle rename to kontor-spring/settings.gradle diff --git a/springboot/src/docs/asciidoc/kontor-spring.adoc b/kontor-spring/src/docs/asciidoc/kontor-spring.adoc similarity index 100% rename from springboot/src/docs/asciidoc/kontor-spring.adoc rename to kontor-spring/src/docs/asciidoc/kontor-spring.adoc diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistformTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistformTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistformTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ArtistformTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicWorkViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicWorkViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicWorkViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/ComicWorkViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/IssueViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/IssueViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/IssueViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/IssueViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/PublisherViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/PublisherViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/PublisherViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/PublisherViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/StoryArcViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/StoryArcViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/StoryArcViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/StoryArcViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/TradePaperbackViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/TradePaperbackViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/TradePaperbackViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/TradePaperbackViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/VolumeViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/VolumeViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/VolumeViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/VolumeViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/WorktypeViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/WorktypeViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/comics/views/WorktypeViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/comics/views/WorktypeViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardSetViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardSetViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardSetViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardSetViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/CardViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/FieldPositionViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/FieldPositionViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/FieldPositionViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/FieldPositionViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/PlayerViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/PlayerViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/PlayerViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/PlayerViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/RoosterViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/RoosterViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/RoosterViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/RoosterViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/SportViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/SportViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/SportViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/SportViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/TeamViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/TeamViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/TeamViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/TeamViewTest.java diff --git a/springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/VendorViewTest.java b/kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/VendorViewTest.java similarity index 100% rename from springboot/src/integrationTest/java/de/thpeetz/kontor/tysc/views/VendorViewTest.java rename to kontor-spring/src/integrationTest/java/de/thpeetz/kontor/tysc/views/VendorViewTest.java diff --git a/springboot/src/integrationTest/resources/application.properties b/kontor-spring/src/integrationTest/resources/application.properties similarity index 100% rename from springboot/src/integrationTest/resources/application.properties rename to kontor-spring/src/integrationTest/resources/application.properties diff --git a/springboot/src/main/java/de/thpeetz/kontor/Application.java b/kontor-spring/src/main/java/de/thpeetz/kontor/Application.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/Application.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/Application.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/AdminConstants.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/MailProperties.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/MailProperties.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/MailProperties.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/MailProperties.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/SetupModuleAdmin.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/SetupModuleAdmin.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/SetupModuleAdmin.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/SetupModuleAdmin.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/AuthorizationMatrix.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/AuthorizationMatrix.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/AuthorizationMatrix.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/AuthorizationMatrix.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/MetaDataColumn.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/MetaDataColumn.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/MetaDataColumn.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/MetaDataColumn.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/MetaDataTable.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/MetaDataTable.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/MetaDataTable.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/MetaDataTable.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/ModuleData.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/ModuleData.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/ModuleData.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/ModuleData.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/Role.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/Role.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/Role.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/Role.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/Token.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/Token.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/Token.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/Token.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/data/User.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/User.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/data/User.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/data/User.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/AuthorizationMatrixRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/AuthorizationMatrixRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/AuthorizationMatrixRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/AuthorizationMatrixRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/MailAccountRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MailAccountRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/MailAccountRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MailAccountRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataColumnRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataColumnRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataColumnRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataColumnRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataTableRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataTableRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataTableRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/MetaDataTableRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/ModuleDataRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/ModuleDataRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/ModuleDataRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/ModuleDataRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/RoleRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/RoleRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/RoleRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/RoleRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/repository/UserRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/UserRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/repository/UserRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/repository/UserRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/services/AdminService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/AdminService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/services/AdminService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/AdminService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/services/KontorUserDetailsService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/KontorUserDetailsService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/services/KontorUserDetailsService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/KontorUserDetailsService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/services/MailService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/MailService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/services/MailService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/MailService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/services/MetaDataService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/MetaDataService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/services/MetaDataService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/MetaDataService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/services/ModuleService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/ModuleService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/services/ModuleService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/services/ModuleService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/AdminLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AdminLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/AdminLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AdminLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/AuthorizationView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/LoginView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/LoginView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/LoginView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/LoginView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/MetaDataView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/ModuleDataView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/RoleForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/RoleForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/RoleForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/RoleForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/RoleView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/RoleView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/RoleView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/RoleView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/UserForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/UserForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/UserProfileView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserProfileView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/UserProfileView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserProfileView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/admin/views/UserView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/admin/views/UserView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/admin/views/UserView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/BookshelfConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/BookshelfConstants.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/BookshelfConstants.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/BookshelfConstants.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/SetupModuleBookshelf.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/SetupModuleBookshelf.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/SetupModuleBookshelf.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/SetupModuleBookshelf.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Article.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Article.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Article.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Article.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthor.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthor.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthor.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/ArticleRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Author.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Author.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Author.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Author.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/AuthorRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/AuthorRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/AuthorRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/AuthorRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Book.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Book.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/Book.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/Book.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthor.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthor.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthor.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisher.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisher.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisher.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisher.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/services/BookshelfService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/services/BookshelfService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/services/BookshelfService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/services/BookshelfService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/ArticleView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/AuthorView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfPublisherView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfPublisherView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfPublisherView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/BookshelfPublisherView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/PublisherForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/PublisherForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/bookshelf/views/PublisherForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/bookshelf/views/PublisherForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/ComicConstants.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/SetupModuleComics.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Artist.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Artist.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Artist.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ArtistRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Comic.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Comic.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Comic.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Comic.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicWork.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWork.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicWork.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWork.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/ComicWorkRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Issue.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Issue.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/IssueRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Publisher.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Publisher.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Publisher.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Publisher.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/PublisherRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/StoryArc.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArc.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/StoryArc.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArc.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/StoryArcRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/TradePaperback.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperback.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/TradePaperback.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperback.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/TradePaperbackRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Volume.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Volume.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/VolumeRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Worktype.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/WorktypeRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/services/ComicService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ArtistForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ArtistForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ArtistForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ArtistForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ArtistView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ArtistView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ArtistView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ArtistView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/ComicWorkView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/PublisherForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/PublisherForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/PublisherForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/PublisherForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/PublisherView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/PublisherView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/PublisherView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/PublisherView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/StoryArcForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/StoryArcForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/StoryArcForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/StoryArcForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/StoryArcView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/StoryArcView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/StoryArcView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/StoryArcView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/TradePaperBackForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/TradePaperBackForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/TradePaperBackForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/TradePaperBackForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/TradePaperbackView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/TradePaperbackView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/TradePaperbackView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/TradePaperbackView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/VolumeForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/VolumeForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/VolumeForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/VolumeForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/VolumeView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/VolumeView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/VolumeView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/VolumeView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/WorktypeForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/WorktypeForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/WorktypeForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/WorktypeForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/comics/views/WorktypeView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/WorktypeView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/comics/views/WorktypeView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/WorktypeView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/data/AbstractEntity.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/data/AbstractEntity.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/data/AbstractEntity.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/data/AbstractEntity.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/data/AbstractLinkEntity.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/data/AbstractLinkEntity.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/data/AbstractLinkEntity.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/data/AbstractLinkEntity.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/AvatarMenuBar.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/AvatarMenuBar.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/AvatarMenuBar.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/AvatarMenuBar.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/ColumnToggleContextMenu.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/KontorLayoutUtil.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/KontorLayoutUtil.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/KontorLayoutUtil.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/KontorLayoutUtil.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/MainLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/MainLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/MainLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/MainLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/MainView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/MainView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/MainView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/MainView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/SeparateMainLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/SeparateMainLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/SeparateMainLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/SeparateMainLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java b/kontor-spring/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/common/views/StatusIcon.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/data/services/DataManagementService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/data/services/DataManagementService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/data/services/DataManagementService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/data/services/DataManagementService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/data/views/DataManagementView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/data/views/DataManagementView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/data/views/DataManagementView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/data/views/DataManagementView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/data/views/ImportArea.java b/kontor-spring/src/main/java/de/thpeetz/kontor/data/views/ImportArea.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/data/views/ImportArea.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/data/views/ImportArea.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/data/views/UploadArea.java b/kontor-spring/src/main/java/de/thpeetz/kontor/data/views/UploadArea.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/data/views/UploadArea.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/data/views/UploadArea.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/mailclient/data/Mail.java b/kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/data/Mail.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/mailclient/data/Mail.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/data/Mail.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/mailclient/data/MailAccount.java b/kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/data/MailAccount.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/mailclient/data/MailAccount.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/data/MailAccount.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/mailclient/views/EmailView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/views/EmailView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/mailclient/views/EmailView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/mailclient/views/EmailView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/MediaConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/MediaConstants.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/MediaConstants.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/MediaConstants.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/SetupModuleMedia.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/SetupModuleMedia.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/SetupModuleMedia.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/SetupModuleMedia.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActor.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActor.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActor.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorFile.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorFile.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorFile.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorFile.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorFileRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorFileRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorFileRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorFileRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaActorRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaActorRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaArticle.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaArticle.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaArticle.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaArticle.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaArticleRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaArticleRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaArticleRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaArticleRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaFile.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaFile.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaFile.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaFile.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaFileRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaFileRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaFileRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaFileRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaVideo.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaVideo.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaVideo.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaVideo.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/data/MediaVideoRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaVideoRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/data/MediaVideoRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/data/MediaVideoRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/services/MediaArticleService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaArticleService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/services/MediaArticleService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaArticleService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/services/MediaFileService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaFileService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/services/MediaFileService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaFileService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/services/MediaVideoService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaVideoService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/services/MediaVideoService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/services/MediaVideoService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorFileView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaActorView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaActorView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaArticleForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaArticleForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaArticleView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaFileForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaFileForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaFileView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaVideoForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaVideoForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/media/views/MediaVideoView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/security/SecurityConfig.java b/kontor-spring/src/main/java/de/thpeetz/kontor/security/SecurityConfig.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/security/SecurityConfig.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/security/SecurityConfig.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/security/SecurityService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/security/SecurityService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/security/SecurityService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/security/SecurityService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/SetupModuleTysc.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/SetupModuleTysc.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/SetupModuleTysc.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/SetupModuleTysc.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/TyscConstants.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/TyscConstants.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/TyscConstants.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/TyscConstants.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Card.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Card.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Card.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Card.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/CardSet.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/CardSet.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/CardSet.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/CardSet.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/FieldPosition.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/FieldPosition.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/FieldPosition.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/FieldPosition.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Player.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Player.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Player.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Player.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Rooster.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Rooster.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Rooster.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Rooster.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Sport.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Sport.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Sport.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Sport.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Team.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Team.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Team.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Team.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/data/Vendor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Vendor.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/data/Vendor.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/data/Vendor.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/CardRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/CardRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/CardRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/CardRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/CardSetRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/CardSetRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/CardSetRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/CardSetRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/PlayerRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/PlayerRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/PlayerRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/PlayerRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/RoosterRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/RoosterRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/RoosterRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/RoosterRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/SportRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/SportRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/SportRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/SportRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/TeamRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/TeamRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/TeamRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/TeamRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/repository/VendorRepository.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/VendorRepository.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/repository/VendorRepository.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/repository/VendorRepository.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/services/CardService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/services/CardService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/services/CardService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/services/CardService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/services/SportService.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/services/SportService.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/services/SportService.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/services/SportService.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardSetForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardSetForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardSetForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardSetForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardSetView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardSetView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardSetView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardSetView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/CardView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/CardView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/PlayerForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PlayerForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/PlayerForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PlayerForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/PlayerView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PlayerView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/PlayerView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PlayerView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/PositionForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PositionForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/PositionForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PositionForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/PositionView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PositionView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/PositionView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/PositionView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/RoosterForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/RoosterForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/RoosterForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/RoosterForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/RoosterView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/RoosterView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/RoosterView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/RoosterView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/SportForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/SportForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/SportForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/SportForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/SportView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/SportView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/SportView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/SportView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/TeamForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TeamForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/TeamForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TeamForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/TeamView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TeamView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/TeamView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TeamView.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/TyscLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TyscLayout.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/TyscLayout.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/TyscLayout.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/VendorForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/VendorForm.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/VendorForm.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/VendorForm.java diff --git a/springboot/src/main/java/de/thpeetz/kontor/tysc/views/VendorView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/VendorView.java similarity index 100% rename from springboot/src/main/java/de/thpeetz/kontor/tysc/views/VendorView.java rename to kontor-spring/src/main/java/de/thpeetz/kontor/tysc/views/VendorView.java diff --git a/springboot/src/main/resources/META-INF/resources/images/offline.png b/kontor-spring/src/main/resources/META-INF/resources/images/offline.png similarity index 100% rename from springboot/src/main/resources/META-INF/resources/images/offline.png rename to kontor-spring/src/main/resources/META-INF/resources/images/offline.png diff --git a/springboot/src/main/resources/META-INF/resources/offline.html b/kontor-spring/src/main/resources/META-INF/resources/offline.html similarity index 100% rename from springboot/src/main/resources/META-INF/resources/offline.html rename to kontor-spring/src/main/resources/META-INF/resources/offline.html diff --git a/springboot/src/main/resources/application.yml b/kontor-spring/src/main/resources/application.yml similarity index 100% rename from springboot/src/main/resources/application.yml rename to kontor-spring/src/main/resources/application.yml diff --git a/springboot/src/main/resources/banner.txt b/kontor-spring/src/main/resources/banner.txt similarity index 100% rename from springboot/src/main/resources/banner.txt rename to kontor-spring/src/main/resources/banner.txt diff --git a/springboot/src/main/resources/logback-spring.xml b/kontor-spring/src/main/resources/logback-spring.xml similarity index 100% rename from springboot/src/main/resources/logback-spring.xml rename to kontor-spring/src/main/resources/logback-spring.xml diff --git a/springboot/src/test/java/de/thpeetz/kontor/ApplicationTests.java b/kontor-spring/src/test/java/de/thpeetz/kontor/ApplicationTests.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/ApplicationTests.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/ApplicationTests.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/TestConstants.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/TestConstants.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/TestConstants.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/TestConstants.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleAuthorTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/ArticleTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/AuthorTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookAuthorTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/data/BookshelfPublisherTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/bookshelf/services/BookshelfServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/services/BookshelfServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/bookshelf/services/BookshelfServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/bookshelf/services/BookshelfServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/ComicConstantsTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/ComicConstantsTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/ComicConstantsTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/ComicConstantsTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/TestConstants.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/TestConstants.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/TestConstants.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/TestConstants.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ArtistTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/ComicWorkTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/IssueTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/PublisherTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/StoryArcTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/TradePaperbackTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/VolumeTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/data/WorktypeTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/comics/services/ComicServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/comics/services/ComicServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/comics/services/ComicServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/comics/services/ComicServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/TestConstants.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/TestConstants.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/TestConstants.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/TestConstants.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/data/MediaArticleTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaArticleTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/data/MediaArticleTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaArticleTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/data/MediaFileTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaFileTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/data/MediaFileTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaFileTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/data/MediaVideoTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaVideoTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/data/MediaVideoTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/data/MediaVideoTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/services/MediaArticleServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaArticleServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/services/MediaArticleServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaArticleServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/services/MediaFileServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaFileServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/services/MediaFileServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaFileServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/media/services/MediaVideoServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaVideoServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/media/services/MediaVideoServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/media/services/MediaVideoServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/TestConstants.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/TestConstants.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/TestConstants.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/TestConstants.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/CardSetTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/CardSetTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/CardSetTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/CardSetTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/CardTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/CardTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/CardTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/CardTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/FieldPositionTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/FieldPositionTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/FieldPositionTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/FieldPositionTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/PlayerTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/PlayerTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/PlayerTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/PlayerTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/RoosterTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/RoosterTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/RoosterTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/RoosterTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/SportTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/SportTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/SportTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/SportTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/TeamTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/TeamTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/TeamTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/TeamTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/data/VendorTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/VendorTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/data/VendorTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/data/VendorTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/CardRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/CardRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/CardRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/CardRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/CardSetRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/CardSetRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/CardSetRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/CardSetRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/FieldPositionRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/PlayerRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/PlayerRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/PlayerRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/PlayerRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/RoosterRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/RoosterRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/RoosterRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/RoosterRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/SportRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/SportRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/SportRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/SportRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/TeamRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/TeamRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/TeamRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/TeamRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/repository/VendorRepositoryTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/VendorRepositoryTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/repository/VendorRepositoryTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/repository/VendorRepositoryTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/services/CardServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/services/CardServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/services/CardServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/services/CardServiceTest.java diff --git a/springboot/src/test/java/de/thpeetz/kontor/tysc/services/SportServiceTest.java b/kontor-spring/src/test/java/de/thpeetz/kontor/tysc/services/SportServiceTest.java similarity index 100% rename from springboot/src/test/java/de/thpeetz/kontor/tysc/services/SportServiceTest.java rename to kontor-spring/src/test/java/de/thpeetz/kontor/tysc/services/SportServiceTest.java diff --git a/springboot/src/test/resources/application.properties b/kontor-spring/src/test/resources/application.properties similarity index 100% rename from springboot/src/test/resources/application.properties rename to kontor-spring/src/test/resources/application.properties diff --git a/python/kontor-cli/kontor/controllers/base.py b/python/kontor-cli/kontor/controllers/base.py index 931db26..e06f5a9 100644 --- a/python/kontor-cli/kontor/controllers/base.py +++ b/python/kontor-cli/kontor/controllers/base.py @@ -1,5 +1,5 @@ -from cement import Controller, ex +from cement import Controller from cement.utils.version import get_version_banner from ..core.version import get_version diff --git a/python/kontor-cli/tests/test_kontor.py b/python/kontor-cli/tests/test_kontor.py index 3c1bd67..a005f30 100644 --- a/python/kontor-cli/tests/test_kontor.py +++ b/python/kontor-cli/tests/test_kontor.py @@ -1,5 +1,4 @@ -from pytest import raises from kontor.main import KontorTest def test_kontor(): diff --git a/python/tests/test_kontor.py b/python/tests/test_kontor.py index 3c1bd67..a005f30 100644 --- a/python/tests/test_kontor.py +++ b/python/tests/test_kontor.py @@ -1,5 +1,4 @@ -from pytest import raises from kontor.main import KontorTest def test_kontor(): diff --git a/scripts/copy_to_mariadb.py b/scripts/copy_to_mariadb.py index 38d0f24..059936a 100644 --- a/scripts/copy_to_mariadb.py +++ b/scripts/copy_to_mariadb.py @@ -2,7 +2,6 @@ copy data from SQLite to MariaDB """ import sqlite3 -import mariadb from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from config import get_logger, get_database_cursors, get_meta_data, get_scripts diff --git a/scripts/json_to_mariadb.py b/scripts/json_to_mariadb.py index 9920998..22fa8be 100644 --- a/scripts/json_to_mariadb.py +++ b/scripts/json_to_mariadb.py @@ -3,7 +3,6 @@ copy data from SQLite to MariaDB """ from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from pathlib import Path -from typing import Dict from config import get_logger, get_database_cursors import mariadb import json diff --git a/scripts/schema/admin.py b/scripts/schema/admin.py index 8dd33bd..c5b3e99 100644 --- a/scripts/schema/admin.py +++ b/scripts/schema/admin.py @@ -1,6 +1,6 @@ from datetime import datetime -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship, mapped_column, Mapped diff --git a/scripts/schema/bookshelf.py b/scripts/schema/bookshelf.py index ab0fe5a..91e0ae4 100644 --- a/scripts/schema/bookshelf.py +++ b/scripts/schema/bookshelf.py @@ -1,5 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String -from sqlalchemy.dialects.mysql import BIT +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin diff --git a/scripts/schema/comic.py b/scripts/schema/comic.py index fe6ec19..1052d79 100644 --- a/scripts/schema/comic.py +++ b/scripts/schema/comic.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String +from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/scripts/schema/media.py b/scripts/schema/media.py index 266fe48..d1c568f 100644 --- a/scripts/schema/media.py +++ b/scripts/schema/media.py @@ -5,7 +5,7 @@ from pathlib import Path import requests from bs4 import BeautifulSoup -from sqlalchemy import Column, DateTime, Integer, String, ForeignKey +from sqlalchemy import Column, String, ForeignKey from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/scripts/schema/metadata.py b/scripts/schema/metadata.py index f9538bb..950cebe 100644 --- a/scripts/schema/metadata.py +++ b/scripts/schema/metadata.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, String, ForeignKey, DateTime, Integer, Boolean +from sqlalchemy import Column, String, ForeignKey, Integer from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/scripts/schema/tysc.py b/scripts/schema/tysc.py index ef8bc5d..32c88f1 100644 --- a/scripts/schema/tysc.py +++ b/scripts/schema/tysc.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, DateTime, Integer, String, ForeignKey, UniqueConstraint +from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship diff --git a/springboot/src/main/resources/META-INF/resources/icons/icon.png b/springboot/src/main/resources/META-INF/resources/icons/icon.png deleted file mode 100644 index 77bb2c9ad73c16d2878c34fef9443c91466178df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45967 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