From f7b14b43d6cee89f165cac42c3ebe4de402c1059 Mon Sep 17 00:00:00 2001 From: zurdi Date: Tue, 9 Jul 2024 13:43:14 +0200 Subject: [PATCH 1/3] fixed everything from trunk --- .../pull_request_template.md | 20 +- .trunk/trunk.yaml | 12 +- CHANGELOG.md | 661 ++++++------------ CONTRIBUTING.md | 16 +- DEVELOPER_SETUP.md | 38 +- README.md | 25 +- SECURITY.md | 2 +- backend/endpoints/search.py | 7 +- backend/handler/metadata/sgdb_handler.py | 1 - frontend/src/__generated__/index.ts | 1 - .../models/AddFirmwareResponse.ts | 1 - .../__generated__/models/AddRomsResponse.ts | 1 - .../Body_add_collection_collections_post.ts | 1 - .../models/Body_add_firmware_firmware_post.ts | 1 - .../models/Body_add_roms_roms_post.ts | 1 - .../models/Body_add_saves_saves_post.ts | 1 - .../Body_add_screenshots_screenshots_post.ts | 1 - .../models/Body_add_states_states_post.ts | 1 - .../models/Body_token_token_post.ts | 1 - ..._update_collection_collections__id__put.ts | 1 - .../models/Body_update_rom_roms__id__put.ts | 1 - .../models/Body_update_user_users__id__put.ts | 1 - .../__generated__/models/CollectionSchema.ts | 1 - .../__generated__/models/ConfigResponse.ts | 1 - .../__generated__/models/DetailedRomSchema.ts | 1 - .../__generated__/models/FirmwareSchema.ts | 1 - .../models/HTTPValidationError.ts | 1 - .../models/IGDBMetadataPlatform.ts | 1 - .../__generated__/models/IGDBRelatedGame.ts | 1 - .../__generated__/models/MessageResponse.ts | 1 - .../models/MetadataSourcesDict.ts | 1 - .../models/MobyMetadataPlatform.ts | 1 - .../__generated__/models/PlatformSchema.ts | 1 - frontend/src/__generated__/models/Role.ts | 1 - .../__generated__/models/RomIGDBMetadata.ts | 1 - .../__generated__/models/RomMobyMetadata.ts | 1 - .../src/__generated__/models/RomSchema.ts | 1 - .../src/__generated__/models/RomUserSchema.ts | 1 - .../src/__generated__/models/SaveSchema.ts | 1 - .../src/__generated__/models/SchedulerDict.ts | 1 - .../__generated__/models/ScreenshotSchema.ts | 1 - .../__generated__/models/SearchRomSchema.ts | 1 - .../src/__generated__/models/StateSchema.ts | 1 - .../src/__generated__/models/StatsReturn.ts | 1 - frontend/src/__generated__/models/TaskDict.ts | 1 - .../src/__generated__/models/TokenResponse.ts | 1 - .../models/UploadedSavesResponse.ts | 1 - .../models/UploadedScreenshotsResponse.ts | 1 - .../models/UploadedStatesResponse.ts | 1 - .../__generated__/models/UserNotesSchema.ts | 1 - .../src/__generated__/models/UserSchema.ts | 1 - .../__generated__/models/ValidationError.ts | 1 - .../src/__generated__/models/WatcherDict.ts | 1 - frontend/src/views/Gallery/Collection.vue | 1 + poetry.lock | 370 +++++----- pyproject.toml | 1 + 56 files changed, 479 insertions(+), 719 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index 483a95f11..05a925f32 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -1,12 +1,14 @@ -### Description +# Pull request template -Please describe the changes or enhancements you are proposing with this pull request. +## Description -### Related Issues +Please describe the changes or enhancements you are proposing with this pull request. -List any related issues that are addressed or fixed by this pull request. +## Related Issues -### Checklist +List any related issues that are addressed or fixed by this pull request. + +## Checklist Please check all that apply. @@ -17,10 +19,6 @@ Please check all that apply. - [ ] I've added unit tests that cover the changes - [ ] All existing tests are passing -### Additional Notes - -Add any additional information or context about the pull request here. - -``` +## Additional Notes -``` +Add any additional information or context about the pull request here. diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index e26a4cc89..a6d98403e 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -19,24 +19,24 @@ runtimes: lint: enabled: - markdownlint@0.41.0 - - eslint@8.57.0 + - eslint@9.6.0 - actionlint@1.7.1 - bandit@1.7.9 - black@24.4.2 - - checkov@3.2.139 + - checkov@3.2.178 - git-diff-check - isort@5.13.2 - - mypy@1.10.0 - - osv-scanner@1.7.4 + - mypy@1.10.1 + - osv-scanner@1.8.1 - oxipng@9.1.1 - prettier@3.3.2 - - ruff@0.4.9 + - ruff@0.5.1 - shellcheck@0.10.0 - shfmt@3.6.0 - svgo@3.3.2 - taplo@0.8.1 - trivy@0.52.2 - - trufflehog@3.78.1 + - trufflehog@3.79.0 - yamllint@1.35.1 ignore: - linters: [ALL] diff --git a/CHANGELOG.md b/CHANGELOG.md index aee25ead2..5217915bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,37 +1,27 @@ -# v3.0.3 (_25-03-2024_) +# RomM complete changelog -## Fixed +## v3.0.3 (_25-03-2024_) -- Removed `PUID/GUID` environment variables. Instead, use the `user: "XXXX:XXXX"` entry in docker-compose to set the owner of newly created file/folders and mounted volumes +- Fixed: Removed `PUID/GUID` environment variables. Instead, use the `user: "XXXX:XXXX"` entry in docker-compose to set the owner of newly created file/folders and mounted volumes -
- -# v3.0.2 (_25-03-2024_) +## v3.0.2 (_25-03-2024_) > [!WARNING] > RomM has been organized in `github` and `dockerhub`! New images will be upload to `rommapp/romm` repository on dockerhub and ghcr. -## Added - -- Famicon disk system to emulatorjs -- Allow setting PUID/GUID/UMASK with environment variables -- Re-added external redis support. You can now use an external redis instance with RomM by setting `REDIS_HOST` and `REDIS_PORT` in the env variables. If you have those variables currently set but want to use the internal one, you'll have to remove those them. - -## Changed - -- Added scrolling to scan logs -- Disabled amiga emulator until bios support added -- Updated [docker-compose.example.yml file](https://github.com/rommapp/romm/blob/3.0.1/examples/docker-compose.example.yml) to match new dockerhub `rommapp` organization +- Added: Famicon disk system to emulatorjs +- Added: Allow setting PUID/GUID/UMASK with environment variables +- Added: Re-added external redis support. You can now use an external redis instance with RomM by setting `REDIS_HOST` and `REDIS_PORT` in the env variables. If you have those variables currently set but want to use the internal one, you'll have to remove those them. -## Fixed +- Changed: Added scrolling to scan logs +- Changed: Disabled amiga emulator until bios support added +- Changed: Updated [docker-compose.example.yml file](https://github.com/rommapp/romm/blob/3.0.1/examples/docker-compose.example.yml) to match new dockerhub `rommapp` organization -- Normalized IGDB search for better results -- Fixed player viewport to fit screen better -- Fixed safari downloads file names +- Fixed: Normalized IGDB search for better results +- Fixed: Player viewport to fit screen better +- Fixed: Safari downloads file names -
- -# v3.0.1 (_13-03-2024_) +## v3.0.1 (_13-03-2024_) > [!WARNING] > This hotfix requires a few changes: @@ -39,470 +29,293 @@ - A new volume has to be bound to `/redis-data`, check the [docker-compose.example.yml file](https://github.com/rommapp/romm/blob/3.0.1/examples/docker-compose.example.yml) - If you're seeing "Decompress Game Core" when trying to run games in EmulatorJS, you'll need to clear storage in your browser to clear IndexedDB -## Fixed - -- Fix for integrated redis data persist. Check the [docker-compose.example.yml](https://github.com/rommapp/romm/blob/3.0.1/examples/docker-compose.example.yml) -- Fixed emulatorjs integration. Fixes #695 -- Fixed 404 for assets endpoint -- Fixed sqlite to mariadb migration -- Fixed async tasks not running and throwing errors -- Fixed sqlite to mariadb migration. Fixes #697 and #688 -- Fixed multipart game selector when change between games - -
- -# v3.0.0 (_11-03-2024_) - -## Hightlights - -- [EmulatorJS player](https://github.com/rommapp/romm/wiki/EmulatorJS-Player): Play retro games in your web browser -- Saves and states: Upload/downlaod game saves, and play them with EmulatorJS -- More metadata: Extracts more information from IGDB, like release date, genres, related games, etc. -- New license: Now licensed under AGPL-3.0 to promote community contributions - -## New features - -- Manually trigger async tasks from the UI -- New /stats endpoint to get library statistics -- Multi-file roms now download with .m3u file -- Small banner in UI when new version is available -- Manual search now also checks alternative names - -## Other changes - -- Redis is now built into the image -- Dropped support for build-in SQLite database -- Faster search against IGDB API with better results -- New covers when game or cover art not found -- Improved build process and release tagging -- Improved error handling and logging - -## Fixed - -- Validation is run on config.yml file to ensure compatibility -- Fix downloading single file from multi-file roms -- Fix compressing large files for download -- Reworked the authetication system to reduce CSRF and login issues -- Reconnect websockets on page reload to catch scan progress -- Many other small bug fixes and improvements - -
- -# v2.3.1 (_08-01-2024_) - -## Fixed - -- Deleting platforms now works properly when having "orphaned" platforms. - -## Changed - -- Platforms can only be deleted from RomM's database. Checkbox to delete platform from filesystem have been removed. - -
- -# v2.3.0 (_08-01-2024_) - -## Added - -- Now `platforms` can be `deleted` from the gallery. Closes [#567](https://github.com/rommapp/romm/issues/567) -- Support for `switch` `updates` and `DLC` files. Closes [#554](https://github.com/rommapp/romm/issues/554) -- Additional Webrcade resources by @Casuallynoted. -- `Exclusions` in `config` file now accepts `wildcards`. Check the [config.example.yml](examples/config.example.yml). Closes [#575](https://github.com/rommapp/romm/issues/575) - -## Fixed - -- `Not identified` games are no longer being grouped when `group roms` option is enabled. -- Changes in the `config` file from one to other platform are now more consistent. Closes [#567](https://github.com/rommapp/romm/issues/567) -- Some other minor fixes. - -## Changed - -- File extensions now can have up to `100` characters. Closes [#531](https://github.com/rommapp/romm/issues/531) -- Now files without extension are skipped during scan by @bfenty. -- Logs are now clearer. - -
- -# v2.2.1 (_02-01-2024_) - -## Added - -- Added an option to group different regions of one game in the same entry in the `Control Panel`. Closes [#404](https://github.com/rommapp/romm/issues/404) - -## Fixed - -- Fixed an error when scanning games with with `ps2 opl`, `switch titledb/productid` or `mame` format. -- Fixed updating roms of a custom platform folder. - -## Changed - -- Now region and language tags are case insensitive to show `emojis`. - -
- -# v2.2.0 (_31-12-2023_) - -## Added - -- Support for `productID` in the file name for `switch` titles. -- Rom name sorting now sorts smarter, avoiding leading articles such `The` or `A`, like in `The Legend of Zelda`. Closes [#449](https://github.com/rommapp/romm/issues/449) and [#450](https://github.com/rommapp/romm/issues/450) -- Support for file names with multiple `regions` and `languages`. Also uses `emojis` to display them. Closes [#473](https://github.com/rommapp/romm/issues/473) -- Added a button to manually `run` all tasks. Closes [#437](https://github.com/rommapp/romm/issues/437) -- Now if a game doesn't have cover, it will show a screenshot if available. Closes [#455](https://github.com/rommapp/romm/issues/455) -- Added a little warning icon in the platform selector if the platform is not found by IGDB. -- Now if a platform is not found by IGDB, the platform name is `titleized`. Ex: `pocket-challenge-v2 -> Pocket Challenge V2`. Closes [#486](https://github.com/rommapp/romm/issues/486) -- A lot more icons!. Complete list at [PR-488](https://github.com/rommapp/romm/pull/488) and [PR-493](https://github.com/rommapp/romm/pull/493) -- Support for support for AES/MVS. Closes [#503](https://github.com/rommapp/romm/issues/503) -- Added [Helm Chart](https://artifacthub.io/packages/helm/crystalnet/romm) to deploy on Kubernetes by @psych0d0g -- `Rescan unidentified` added to the scan view, allowing to rescan only those entries that IGDB couldn't identify in previous scans. Closes [#519](https://github.com/rommapp/romm/issues/519) -- `Config file` visualization added to the new `Config` tab in the `Control Panel`. Partially implements some concepts of [#457](https://github.com/rommapp/romm/issues/457) - -## Fixed - -- Now sorting by size in the gallery table view works as expected. Closes [#423](https://github.com/rommapp/romm/issues/423) -- Now RomM is more responsive in more kind of devices. -- Cover sizes are now standarized to have a more consistent gallery. Closes [#340](https://github.com/rommapp/romm/issues/340) -- Improved detection for multiple extension files. -- Now the `delete from filesystem` checkbox is reseted when the `delete` dialog is closed. Closes [#466](https://github.com/rommapp/romm/issues/466) -- Single file roms now are properly downloaded from backend, fixing a potential security issue. Closes [#471](https://github.com/rommapp/romm/issues/471) -- Now a new `scanned` game appears directly in the gallery without refreshing. Closes [#467](https://github.com/rommapp/romm/issues/467) -- A lot more of small fixes. -- Now the default theme is setup properly. -- Fixed scan for custom folders from the `scan` view. Closes [#501](https://github.com/rommapp/romm/issues/501) -- Fixed multi-part games download when any part of the game contains a `comma` in the name. Closes [#520](https://github.com/rommapp/romm/issues/520) - -## Changed - -- Improved the docker `init scripts` handling by @psych0d0g. -- Now the `scan` can continue after failing finding roms for one platform. Closes [#460](https://github.com/rommapp/romm/issues/460) -- Logs improved a lot. - -
- -# v2.1.0 (_31-10-2023_) - -## Added - -- Added `Scheduler` to run scheduled scans and `Watchdog` to perform scans when adding/renamed/deleted any rom from the filesystem. Added a lot of new environment variables to configure both features. Check the [readme.md](README.md#📅-scheduler) for an explanation of how to configure them. -- Added new `REDIS_PASSWORD` environment variable to support secured redis with pasword. Closes [#412](https://github.com/rommapp/romm/issues/412) -- New `Recently Added` section in the dashboard shows the last 15 added roms. Closes [#400](https://github.com/rommapp/romm/issues/400) - -## Fixed - -- Upload rom feature is now working properly. -- Fixed order roms by size in the gallery list view. Fixes [#423](https://github.com/rommapp/romm/issues/423) - -## Changed - -- Now platforms without roms will be hidden in the drawer and the dashboard. Closes [#396](https://github.com/rommapp/romm/issues/396) +- Fixed: Integrated redis data persist. Check the [docker-compose.example.yml](https://github.com/rommapp/romm/blob/3.0.1/examples/docker-compose.example.yml) +- Fixed: Emulatorjs integration. Fixes #695 +- Fixed: 404 for assets endpoint +- Fixed: Sqlite to mariadb migration +- Fixed: Async tasks not running and throwing errors +- Fixed: Sqlite to mariadb migration. Fixes #697 and #688 +- Fixed: Multipart game selector when change between games + +## v3.0.0 (_11-03-2024_) -
+- Highlight: [EmulatorJS player](https://github.com/rommapp/romm/wiki/EmulatorJS-Player): Play retro games in your web browser +- Highlight: Saves and states: Upload/downlaod game saves, and play them with EmulatorJS +- Highlight: More metadata: Extracts more information from IGDB, like release date, genres, related games, etc. +- Highlight: New license: Now licensed under AGPL-3.0 to promote community contributions -# v2.0.1 (_29-10-2023_) +- Added: Manually trigger async tasks from the UI +- Added: New /stats endpoint to get library statistics +- Added: Multi-file roms now download with .m3u file +- Added: Small banner in UI when new version is available +- Added: Manual search now also checks alternative names -## Fixed +- Changed: Redis is now built into the image +- Changed: Dropped support for build-in SQLite database +- Changed: Faster search against IGDB API with better results +- Changed: New covers when game or cover art not found +- Changed: Improved build process and release tagging +- Changed: Improved error handling and logging + +- Fixed: Validation is run on config.yml file to ensure compatibility +- Fixed: Downloading single file from multi-file roms +- Fixed: Compressing large files for download +- Fixed: Reworked the authetication system to reduce CSRF and login issues +- Fixed: Reconnect websockets on page reload to catch scan progress +- Fixed: Many other small bug fixes and improvements -- Fixed an error that caused to show the wrong roms for one platform if user navigates directly to that platform from a rom details page. Fixes [#408](https://github.com/rommapp/romm/issues/408) +## v2.3.1 (_08-01-2024_) -
+- Fixed: Deleting platforms now works properly when having "orphaned" platforms. -# v2.0.0 (_27-10-2023_) +- Changed: Platforms can only be deleted from RomM's database. Checkbox to delete platform from filesystem have been removed. -## Added +## v2.3.0 (_08-01-2024_) -- User management system. Check the [docker-compose.example.yml](examples/docker-compose.example.yml) for all the needed changes and environment variables. Closes [#24](https://github.com/rommapp/romm/issues/24) -- Gallery bulk selection. Closes [#50](https://github.com/rommapp/romm/issues/50) -- Roms upload feature. -- Custom cover art. -- Custom name for `roms` folder throught the `ROMS_FOLDER_NAME` environment variable. Closes [#356](https://github.com/rommapp/romm/issues/356) -- Added `IGDB_CLIENT_ID` and `IGDB_CLIENT_SECRET` as environment variables. `CLIENT_ID` and `CLIENT_ID` are deprecated and will be removed in future versions. -- Added icons for more platforms: CD-i, 3DO, Neo Geo Pocket Color, Nintendo 64DD, Satellaview, Playdia, Pippin, Mac +- Added: Now `platforms` can be `deleted` from the gallery. Closes [#567](https://github.com/rommapp/romm/issues/567) +- Added: Support for `switch` `updates` and `DLC` files. Closes [#554](https://github.com/rommapp/romm/issues/554) +- Added: Additional Webrcade resources by @Casuallynoted. +- Added: `Exclusions` in `config` file now accepts `wildcards`. Check the [config.example.yml](examples/config.example.yml). Closes [#575](https://github.com/rommapp/romm/issues/575) -## Fixed +- Fixed: `Not identified` games are no longer being grouped when `group roms` option is enabled. +- Fixed: Changes in the `config` file from one to other platform are now more consistent. Closes [#567](https://github.com/rommapp/romm/issues/567) +- Fixed: Some other minor fixes. -- Fixed some checks before renaming a rom to avoid breaking names. Closes [#348](https://github.com/rommapp/romm/issues/348) -- A lot of other minor bugs. +- Changed: File extensions now can have up to `100` characters. Closes [#531](https://github.com/rommapp/romm/issues/531) +- Changed: Now files without extension are skipped during scan by @bfenty. +- Changed: Logs are now clearer. -## Changed +## v2.2.1 (_02-01-2024_) -- RomM internal port changed from `80` to `8080`. -- RomM docker image size reduced significantly. -- Improved scanning and IGDB requests returning first the exact match. -- Scan now times out at 4 hours to improve scans for larger libraries. -- Other minimal changes in platform icons. +- Added: An option to group different regions of one game in the same entry in the `Control Panel`. Closes [#404](https://github.com/rommapp/romm/issues/404) -
+- Fixed: An error when scanning games with with `ps2 opl`, `switch titledb/productid` or `mame` format. +- Fixed: Updating roms of a custom platform folder. -# v1.10 (_15-08-2023_) +- Changed: Now region and language tags are case insensitive to show `emojis`. -## Added +## v2.2.0 (_31-12-2023_) -- Rom admin menu added to roms in gallery. Closes [#28](https://github.com/rommapp/romm/issues/28) -- Added ps2/opl naming convention support for roms scanning. Closes [#324](https://github.com/rommapp/romm/issues/324) +- Added: Support for `productID` in the file name for `switch` titles. +- Added: Rom name sorting now sorts smarter, avoiding leading articles such `The` or `A`, like in `The Legend of Zelda`. Closes [#449](https://github.com/rommapp/romm/issues/449) and [#450](https://github.com/rommapp/romm/issues/450) +- Added: Support for file names with multiple `regions` and `languages`. Also uses `emojis` to display them. Closes [#473](https://github.com/rommapp/romm/issues/473) +- Added: A button to manually `run` all tasks. Closes [#437](https://github.com/rommapp/romm/issues/437) +- Added: Now if a game doesn't have cover, it will show a screenshot if available. Closes [#455](https://github.com/rommapp/romm/issues/455) +- Added: A little warning icon in the platform selector if the platform is not found by IGDB. +- Added: Now if a platform is not found by IGDB, the platform name is `titleized`. Ex: `pocket-challenge-v2 -> Pocket Challenge V2`. Closes [#486](https://github.com/rommapp/romm/issues/486) +- Added: A lot more icons!. Complete list at [PR-488](https://github.com/rommapp/romm/pull/488) and [PR-493](https://github.com/rommapp/romm/pull/493) +- Added: Support for support for AES/MVS. Closes [#503](https://github.com/rommapp/romm/issues/503) +- Added: [Helm Chart](https://artifacthub.io/packages/helm/crystalnet/romm) to deploy on Kubernetes by @psych0d0g +- Added: `Rescan unidentified` added to the scan view, allowing to rescan only those entries that IGDB couldn't identify in previous scans. Closes [#519](https://github.com/rommapp/romm/issues/519) +- Added: `Config file` visualization added to the new `Config` tab in the `Control Panel`. Partially implements some concepts of [#457](https://github.com/rommapp/romm/issues/457) -## Fixed +- Fixed: Now sorting by size in the gallery table view works as expected. Closes [#423](https://github.com/rommapp/romm/issues/423) +- Fixed: Now RomM is more responsive in more kind of devices. +- Fixed: Cover sizes are now standarized to have a more consistent gallery. Closes [#340](https://github.com/rommapp/romm/issues/340) +- Fixed: Improved detection for multiple extension files. +- Fixed: Now the `delete from filesystem` checkbox is reseted when the `delete` dialog is closed. Closes [#466](https://github.com/rommapp/romm/issues/466) +- Fixed: Single file roms now are properly downloaded from backend, fixing a potential security issue. Closes [#471](https://github.com/rommapp/romm/issues/471) +- Fixed: Now a new `scanned` game appears directly in the gallery without refreshing. Closes [#467](https://github.com/rommapp/romm/issues/467) +- Fixed: A lot more of small fixes. +- Fixed: Now the default theme is setup properly. +- Fixed: Scan for custom folders from the `scan` view. Closes [#501](https://github.com/rommapp/romm/issues/501) +- Fixed: Multi-part games download when any part of the game contains a `comma` in the name. Closes [#520](https://github.com/rommapp/romm/issues/520) -- Fixed an error caused by the service worker that sometimes intercepts download requests and returns a bad response. Fixes [#297](https://github.com/rommapp/romm/issues/297) -- Fixed rom count in platform selector when deleting/scanning roms. Fixes [#325](https://github.com/rommapp/romm/issues/325) +- Changed: Improved the docker `init scripts` handling by @psych0d0g. +- Changed: Now the `scan` can continue after failing finding roms for one platform. Closes [#460](https://github.com/rommapp/romm/issues/460) +- Changed: Logs improved a lot. -## Changed +## v2.1.0 (_31-10-2023_) -- Improved scanning and IGDB requests logs. Fixes [#317](https://github.com/rommapp/romm/issues/317) -- Improved downloading process. Fixes [#332](https://github.com/rommapp/romm/issues/332) +- Added: `Scheduler` to run scheduled scans and `Watchdog` to perform scans when adding/renamed/deleted any rom from the filesystem. Added a lot of new environment variables to configure both features. Check the [readme.md](README.md#📅-scheduler) for an explanation of how to configure them. +- Added: new `REDIS_PASSWORD` environment variable to support secured redis with pasword. Closes [#412](https://github.com/rommapp/romm/issues/412) +- Added: New `Recently Added` section in the dashboard shows the last 15 added roms. Closes [#400](https://github.com/rommapp/romm/issues/400) -
+- Fixed: Upload rom feature is now working properly. +- Fixed: Fixed order roms by size in the gallery list view. Fixes [#423](https://github.com/rommapp/romm/issues/423) -# v1.9.1 (_01-08-2023_) +- Changed: Now platforms without roms will be hidden in the drawer and the dashboard. Closes [#396](https://github.com/rommapp/romm/issues/396) -## Added +## v2.0.1 (_29-10-2023_) -- RomM logs are now stored in `/romm/logs` in docker and path can be binded in docker-compose. Check [docker-compose.example.yml](examples/docker-compose.example.yml). Solves [#303](https://github.com/rommapp/romm/issues/303) +- Fixed: An error that caused to show the wrong roms for one platform if user navigates directly to that platform from a rom details page. Fixes [#408](https://github.com/rommapp/romm/issues/408) -## Fixed +## v2.0.0 (_27-10-2023_) -- Fixed multipart roms scanning. -- Now platforms folders are case insensitive, allowing to have them lowercase or uppercase. Solves [#282](https://github.com/rommapp/romm/issues/282) -- Fixed a bug that caused the platforms drawer to dissapear after scan. +- Added: User management system. Check the [docker-compose.example.yml](examples/docker-compose.example.yml) for all the needed changes and environment variables. Closes [#24](https://github.com/rommapp/romm/issues/24) +- Added: Gallery bulk selection. Closes [#50](https://github.com/rommapp/romm/issues/50) +- Added: Roms upload feature. +- Added: Custom cover art. +- Added: Custom name for `roms` folder throught the `ROMS_FOLDER_NAME` environment variable. Closes [#356](https://github.com/rommapp/romm/issues/356) +- Added: `IGDB_CLIENT_ID` and `IGDB_CLIENT_SECRET` as environment variables. `CLIENT_ID` and `CLIENT_ID` are deprecated and will be removed in future versions. +- Added: icons for more platforms: CD-i, 3DO, Neo Geo Pocket Color, Nintendo 64DD, Satellaview, Playdia, Pippin, Mac -
+- Fixed: some checks before renaming a rom to avoid breaking names. Closes [#348](https://github.com/rommapp/romm/issues/348) +- Fixed: A lot of other minor bugs. -# v1.9 (_31-07-2023_) +- Changed: RomM internal port changed from `80` to `8080`. +- Changed: RomM docker image size reduced significantly. +- Changed: Improved scanning and IGDB requests returning first the exact match. +- Changed: Scan now times out at 4 hours to improve scans for larger libraries. +- Changed: Other minimal changes in platform icons. -## Added +## v1.10 (_15-08-2023_) -- Region and revision system is now more robust and flexible. Solves [#301](https://github.com/rommapp/romm/issues/301). Check [tags support](https://github.com/rommapp/romm#-tags-support) +- Added: Rom admin menu added to roms in gallery. Closes [#28](https://github.com/rommapp/romm/issues/28) +- Added: Added ps2/opl naming convention support for roms scanning. Closes [#324](https://github.com/rommapp/romm/issues/324) -## Fixed +- Fixed: An error caused by the service worker that sometimes intercepts download requests and returns a bad response. Fixes [#297](https://github.com/rommapp/romm/issues/297) +- Fixed: Rom count in platform selector when deleting/scanning roms. Fixes [#325](https://github.com/rommapp/romm/issues/325) -- Libraries are now paginated to improve performance in large collections. Solves [#89](https://github.com/rommapp/romm/issues/89) and [#280](https://github.com/rommapp/romm/issues/280) -- Downloads are now managed in the backend, allowing the web browser to manage the download progression and avoiding memory overload. Solves [#266](https://github.com/rommapp/romm/issues/266) +- Changed: Improved scanning and IGDB requests logs. Fixes [#317](https://github.com/rommapp/romm/issues/317) +- Changed: Improved downloading process. Fixes [#332](https://github.com/rommapp/romm/issues/332) -
+## v1.9.1 (_01-08-2023_) -# v1.8.4 (_19-05-2023_) +- Added: RomM logs are now stored in `/romm/logs` in docker and path can be binded in docker-compose. Check [docker-compose.example.yml](examples/docker-compose.example.yml). Solves [#303](https://github.com/rommapp/romm/issues/303) -## Fixed +- Fixed: multipart roms scanning. +- Fixed: Now platforms folders are case insensitive, allowing to have them lowercase or uppercase. Solves [#282](https://github.com/rommapp/romm/issues/282) +- Fixed: Fixed a bug that caused the platforms drawer to dissapear after scan. -- Fixed broken scan in multi part games. Solves [#262](https://github.com/rommapp/romm/issues/262) +## v1.9 (_31-07-2023_) -
+- Added: Region and revision system is now more robust and flexible. Solves [#301](https://github.com/rommapp/romm/issues/301). Check [tags support](https://github.com/rommapp/romm#-tags-support) -# v1.8.3 (_17-05-2023_) +- Changed: Libraries are now paginated to improve performance in large collections. Solves [#89](https://github.com/rommapp/romm/issues/89) and [#280](https://github.com/rommapp/romm/issues/280) -## Added +- Fixed: Downloads are now managed in the backend, allowing the web browser to manage the download progression and avoiding memory overload. Solves [#266](https://github.com/rommapp/romm/issues/266) -- Added platforms to home page. -- Added the scan log in real time in the scan section. -- Added fast scan button in the gallery to direct scan the current platform. Solves [#250](https://github.com/rommapp/romm/issues/250) -- Added Game and Watch support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -- Added Amstrad CPC support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -- Added Game and Gear support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -- Added PC-98 support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -- Added Pokemini support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -- Added DOOM support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +## v1.8.4 (_19-05-2023_) -## Fixed +- Fixed: broken scan in multi part games. Solves [#262](https://github.com/rommapp/romm/issues/262) -- Fixed a bug that caused scan to run twice. Solves [#221](https://github.com/rommapp/romm/issues/221) -- Improved RomM initial setup logs for bad folder structure configurations. Solves [#217](https://github.com/rommapp/romm/issues/217) -- Improved gallery loading when switching between view modes. +## v1.8.3 (_17-05-2023_) -
+- Added: platforms to home page. +- Added: the scan log in real time in the scan section. +- Added: fast scan button in the gallery to direct scan the current platform. Solves [#250](https://github.com/rommapp/romm/issues/250) +- Added: Game and Watch support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +- Added: Amstrad CPC support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +- Added: Game and Gear support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +- Added: PC-98 support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +- Added: Pokemini support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) +- Added: DOOM support. Partially solves [#245](https://github.com/rommapp/romm/issues/245) -# v1.8.2 (_09-05-2023_) +- Fixed: A bug that caused scan to run twice. Solves [#221](https://github.com/rommapp/romm/issues/221) +- Fixed: Improved RomM initial setup logs for bad folder structure configurations. Solves [#217](https://github.com/rommapp/romm/issues/217) +- Fixed: Improved gallery loading when switching between view modes. -## Added +## v1.8.2 (_09-05-2023_) -- Atari 2600 support added. Solves [#224](https://github.com/rommapp/romm/issues/224) -- Atari 7800 support added. Solves [#226](https://github.com/rommapp/romm/issues/226) -- Atari 5200 support added. Solves [#225](https://github.com/rommapp/romm/issues/225) -- Sega 32X support added. Solves [#223](https://github.com/rommapp/romm/issues/223) -- Nintendo Virtual Boy support added. Solves [#222](https://github.com/rommapp/romm/issues/222) +- Added: Atari 2600 support added. Solves [#224](https://github.com/rommapp/romm/issues/224) +- Added: Atari 7800 support added. Solves [#226](https://github.com/rommapp/romm/issues/226) +- Added: Atari 5200 support added. Solves [#225](https://github.com/rommapp/romm/issues/225) +- Added: Sega 32X support added. Solves [#223](https://github.com/rommapp/romm/issues/223) +- Added: Nintendo Virtual Boy support added. Solves [#222](https://github.com/rommapp/romm/issues/222) -## Fixed +- Fixed: Potentially malformed urls for covers and screenshots from IGDB. Solves [#216](https://github.com/rommapp/romm/issues/216) +- Fixed: Potentially scan fail with some games with large names. Solves [#229](https://github.com/rommapp/romm/issues/229) -- Fixed potentially malformed urls for covers and screenshots from IGDB. Solves [#216](https://github.com/rommapp/romm/issues/216) -- Fixed potentially scan fail with some games with large names. Solves [#229](https://github.com/rommapp/romm/issues/229) +## v1.8.1 (_27-04-2023_) -
+- Added: Now it is possible to search a rom match by Name and by ID. Solves [#208](https://github.com/rommapp/romm/issues/208) +- Added: Now screenshots are displayed in screenshots tab (Complete scan needed in order to fetch screenshots from IGDB). Partially solves [#57](https://github.com/rommapp/romm/issues/57) +- Added: Now more rom properties can be manually edited. Solves [#140](https://github.com/rommapp/romm/issues/140) -# v1.8.1 (_27-04-2023_) +## v1.8 (_25-04-2023_) -## Added +- Added: Home screen. +- Added: Config option to associate custom system folders to platforms (Complete scan needed). Check [config.yml](docker/config.example.yml) example. Solves [#152](https://github.com/rommapp/romm/issues/152). +- Added: Sega Saturn and Master System support added. Check [platforms support](https://github.com/rommapp/romm#platforms-support). Solves [#194](https://github.com/rommapp/romm/issues/194). +- Added: Progress bar when games are being downloaded. -- Now it is possible to search a rom match by Name and by ID. Solves [#208](https://github.com/rommapp/romm/issues/208) -- Now screenshots are displayed in screenshots tab (Complete scan needed in order to fetch screenshots from IGDB). Partially solves [#57](https://github.com/rommapp/romm/issues/57) -- Now more rom properties can be manually edited. Solves [#140](https://github.com/rommapp/romm/issues/140) +- Changed: Routes to different RomM sections and games changed now allow share direct links to platforms and games. +- Changed: RomM now can scan subdirectories in a multi-part game. Solves [#179](https://github.com/rommapp/romm/issues/179). +- Changed: Settings and Scan sections are now in the main drawer menu. +- Changed: Some UI changes. -
+- Fixed: Code base stability and speed improved. -# v1.8 (_25-04-2023_) +## v1.7.1 (_15-04-2023_) -## Added +- Added: New UI feel with the new RomM color palette -- Home screen. -- Config option to associate custom system folders to platforms (Complete scan needed). Check [config.yml](docker/config.example.yml) example. Solves [#152](https://github.com/rommapp/romm/issues/152). -- Sega Saturn and Master System support added. Check [platforms support](https://github.com/rommapp/romm#platforms-support). Solves [#194](https://github.com/rommapp/romm/issues/194). -- Progress bar when games are being downloaded. +- Changed: Roms size is now human readable -## Changed +- Fixed: A bug where multi file roms could break the scan if the rom name have a dot. -- Routes to different RomM sections and games changed now allow share direct links to platforms and games. -- RomM now can scan subdirectories in a multi-part game. Solves [#179](https://github.com/rommapp/romm/issues/179). -- Settings and Scan sections are now in the main drawer menu. -- Some UI changes. +## v1.7 (_14-04-2023_) -## Fixed +- Added: More options and flexibility to prevent files/folders to be scanned. Check [config.yml](docker/config.example.yml) example +- Added: Config file example added to docker/config.example.yml -- Code base stability and speed improved. +- Changed: Rom details page revamped +- Changed: RomM logo revamped -
+## v1.6.5 (_12-04-2023_) -# v1.7.1 (_15-04-2023_) +- Added: Multiple games gallery display modes -## Added +- Changed: Some fixes and improvements -- New UI feel with the new RomM color palette +## v1.6.4 (_12-04-2023_) -## Changed +- Added: Now RomM allows to fix missmatched games by searching by IGDB id manually +- Added: WonderSwan and WonderSwan Color support added -- Roms size is now human readable +## v1.6.3 (_12-04-2023_) -## Fixed +- Added: Support for multi file games: Now RomM can scan a folder with the game name and all of its files inside the folder. No need to match the folder with the files inside. Download feature can download a zip with the entire game and all of the files or just the desired ones. +- Added: Some UI tweaks -- Fixed a bug where multi file roms could break the scan if the rom name have a dot. +## v1.6.2 (_04-04-2023_) -
+- Added: Support for commodore64 -# v1.7 (_14-04-2023_) +- Fixed: Searching in IGDB for games in not supported platforms doesn't raise an error anymore -## Added +## v1.6.1 (_04-04-2023_) -- More options and flexibility to prevent files/folders to be scanned. Check [config.yml](docker/config.example.yml) example -- Config file example added to docker/config.example.yml +- Added: Now sqlite database location needs to be binded to `/romm/database`. Check [docker-compose](examples/docker-compose.example.yml) example. +- Added: Now resources location (games cover) needs to be binded to `/romm/resources`. Check [docker-compose](examples/docker-compose.example.yml) example. +- Added: More platforms support. Check [platforms support](https://github.com/rommapp/romm#platforms-support) +- Added: Now RomM version appears in the bottom of the settings panel -## Changed +- Fixed: Download feature is now fixed for RomM structucture 1 -- Rom details page revamped -- RomM logo revamped +- Changed: Library path binding changed from `/library` to `/romm/library`. Check [docker-compose](examples/docker-compose.example.yml) -
+## v1.6 (_01-04-2023_) -# v1.6.5 (_12-04-2023_) +- Added: Smart scan: now RomM will only scan the changes in the filesystem, making the scan process too much faster. Added an option to force a full scan. +- Added: Now game files can be renamed after the name matched in IGDB, keeping the tags. -## Added +## v1.5.1 (_31-03-2023_) -- Multiple games gallery display modes +- Fixed: Delete game now works properly -## Changed - -- Some fixes and improvements - -
- -# v1.6.4 (_12-04-2023_) - -## Added - -- Now RomM allows to fix missmatched games by searching by IGDB id manually -- WonderSwan and WonderSwan Color support added - -
- -# v1.6.3 (_12-04-2023_) - -## Added - -- Support for multi file games: Now RomM can scan a folder with the game name and all of its files inside the folder. No need to match the folder with the files inside. Download feature can download a zip with the entire game and all of the files or just the desired ones. -- Some UI tweaks - -
- -# v1.6.2 (_04-04-2023_) - -## Added - -- Support for commodore64 - -## Fixed - -- Searching in IGDB for games in not supported platforms doesn't raise an error anymore - -
- -# v1.6.1 (_04-04-2023_) - -## Added - -- Now sqlite database location needs to be binded to `/romm/database`. Check [docker-compose](examples/docker-compose.example.yml) example. -- Now resources location (games cover) needs to be binded to `/romm/resources`. Check [docker-compose](examples/docker-compose.example.yml) example. -- More platforms support. Check [platforms support](https://github.com/rommapp/romm#platforms-support) -- Now RomM version appears in the bottom of the settings panel - -## Fixed - -- Download feature is now fixed for RomM structucture 1 - -## Changed - -- Library path binding changed from `/library` to `/romm/library`. Check [docker-compose](examples/docker-compose.example.yml) - -
- -# v1.6 (_01-04-2023_) - -## Added - -- Smart scan: now RomM will only scan the changes in the filesystem, making the scan process too much faster. Added an option to force a full scan. -- Now game files can be renamed after the name matched in IGDB, keeping the tags. - -
- -# v1.5.1 (_31-03-2023_) - -## Fixed - -- Delete game now works properly - -
- -# v1.5 (_30-03-2023_) +## v1.5 (_30-03-2023_) > [!WARNING] > In order to make the new features to work, it is mandatory this time to drop all the database. This will only make you need to re-scan, but you won't lose the cover changes or file changes you made. I apologize for the inconveniences this may cause, as this is a new software, it may change a little bit the first weeks, at least until I can develop a proper way to migrate between versions. I hope you can understand these initial wipes in order to make a better tool. -## Added - -- Now RomM folder structure is more flexible to match two different patrons by priority. This change makes RomM **Emudeck** compatible at least with single file games platforms. Check [folder structure](readme.md#⚠️-folder-structure) -- Added config file support to exclude folders and specific extension files to be scanned. Config file can be binded to `/romm/config.yml` .To reload config file RomM reload is needed. Check [config](readme.md#configuration). -- Added tags support for region, revision/version and generic tags. Tags must have the right prefix to allow RomM scan them properly. Check [tags](readme.md#📑-tags-support). - -
- -# v1.4.1 (_29-03-2023_) - -## Added - -- Now you can use your games tags (like (USA) or (rev-1)) to filter in the gallery - -
- -# v1.4 (_29-03-2023_) +- Added: Now RomM folder structure is more flexible to match two different patrons by priority. This change makes RomM **Emudeck** compatible at least with single file games platforms. Check [folder structure](readme.md#⚠️-folder-structure) +- Added: Added config file support to exclude folders and specific extension files to be scanned. Config file can be binded to `/romm/config.yml` .To reload config file RomM reload is needed. Check [config](readme.md#configuration). +- Added: Added tags support for region, revision/version and generic tags. Tags must have the right prefix to allow RomM scan them properly. Check [tags](readme.md#📑-tags-support). -## Added +## v1.4.1 (_29-03-2023_) -- Gamecube support [platforms support](https://github.com/rommapp/romm#platforms-support) -- PC support added (only for single file games like zip, iso, etc) [platforms support](https://github.com/rommapp/romm#platforms-support) +- Added: Now you can use your games tags (like (USA) or (rev-1)) to filter in the gallery -## Changed +## v1.4 (_29-03-2023_) -- Now delete game only deletes it from RomM gallery. To delete it from the filesystem too you need to allow it with the checkbox. +- Added: Gamecube support [platforms support](https://github.com/rommapp/romm#platforms-support) +- Added: PC support added (only for single file games like zip, iso, etc) [platforms support](https://github.com/rommapp/romm#platforms-support) -
+- Changed: Now delete game only deletes it from RomM gallery. To delete it from the filesystem too you need to allow it with the checkbox. -# v1.3 (_29-03-2023_) - -## Fixed +## v1.3 (_29-03-2023_) **`Breaking change`** - **This breaking change only applies for mariaDB users**: @@ -514,7 +327,7 @@ I am so sorry for any inconvenience this can generate. Columns to modify (examples in case that you set it with database name as romm, in other case just change the database name in the {db_name}.roms part): -``` +```sql alter table romm.roms modify column file_name varchar(500); alter table romm.roms modify column file_name_no_ext varchar(500); alter table romm.roms modify column name varchar(500); @@ -527,49 +340,27 @@ Columns to modify (examples in case that you set it with database name as romm, alter table romm.platforms modify column path_logo text; ``` -
- -# v1.2.2 (_28-03-2023_) - -## Added - -- Notification added when downloading a game - -## Changed - -- Database name when using mariadb now can be changed with the new variable DB_NAME. Check [docker-compos.example.yml](https://github.com/rommapp/romm/blob/master/examples/docker-compose.example.yml) - -## Fixed - -- Potential password error when using mariadb if the password have special characters -- Some other bugs - -
- -# v1.2 (_28-03-2023_) - -## Added - -- SQLite support -- Dreamcast support (https://github.com/rommapp/romm#platforms-support) +## v1.2.2 (_28-03-2023_) -## Changed +- Added: Notification added when downloading a game -- SQLite is now the database by default if ROMM_DB_DRIVER is not set. Check [docker-compos.example.yml](https://github.com/rommapp/romm/blob/master/examples/docker-compose.example.yml) -- Platforms and games are now shown by alphabetical order +- Changed: Database name when using mariadb now can be changed with the new variable DB_NAME. Check [docker-compos.example.yml](https://github.com/rommapp/romm/blob/master/examples/docker-compose.example.yml) -
+- Fixed: Potential password error when using mariadb if the password have special characters +- Fixed: Some other bugs -# v1.1 (_27-03-2023_) +## v1.2 (_28-03-2023_) -## Added +- Added: SQLite support +- Added: Dreamcast support () -- Game names parentheses are now omitted when searching game in IGDB, allowing game names to have tags. +- Changed: SQLite is now the database by default if ROMM_DB_DRIVER is not set. Check [docker-compos.example.yml](https://github.com/rommapp/romm/blob/master/examples/docker-compose.example.yml) +- Changed: Platforms and games are now shown by alphabetical order -
+## v1.1 (_27-03-2023_) -# v1.0 (_27-03-2023_) +- Added: Game names parentheses are now omitted when searching game in IGDB, allowing game names to have tags. -## Added +## v1.0 (_27-03-2023_) - Birth of RomM diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 973ccfbcc..341a83d6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,18 +1,18 @@ -## Contributing to RomM +# Contributing to RomM Thank you for considering contributing to RomM! This document outlines some guidelines to help you get started with your contributions. **If you're looking to implement a large feature or make significant changes to the project, it's best to open an issue first AND join the Discord to discuss your ideas with the maintainers.** -### Code of Conduct +## Code of Conduct Please note that this project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating in this project, you are expected to uphold this code. -### Contributing to the Wiki +## Contributing to the Wiki If you would like to contribute to the project's [documentation](https://github.com/rommapp/romm/wiki), reach out to the maintainers to get edit access. We welcome any contributions that help improve the documentation (new pages, updates, or corrections). -### How to Contribute Code +## How to Contribute Code 1. Fork the repository. 2. Clone your forked repository: `git clone https://github.com/your-username/romm.git` @@ -23,7 +23,7 @@ If you would like to contribute to the project's [documentation](https://github. 7. Push your changes to your fork: `git push origin feature-or-fix-name` 8. Open a pull request to the `master` branch of the original repository. -### Pull Request Guidelines +## Pull Request Guidelines - Make sure your code follows the project's coding standards. - Test your changes locally before opening a pull request. @@ -31,7 +31,7 @@ If you would like to contribute to the project's [documentation](https://github. - Ensure all existing tests pass, and add new tests for new functionality. - Use clear and descriptive titles and descriptions for your pull requests. -### Code Style +## Code Style Follow the existing code style used throughout the project. If working with VSCode or a similar editor, consider installing these extensions: @@ -41,11 +41,11 @@ Follow the existing code style used throughout the project. If working with VSCo - [Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff) - [Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar) -### Issue Reporting +## Issue Reporting If you encounter any bugs or have suggestions for improvements, please [create an issue](https://github.com/rommapp/romm/issues) on GitHub. Provide as much detail as possible, including steps to reproduce the issue if applicable. -### Licensing +## Licensing By contributing to ROMM, you agree that your contributions will be licensed under the project's [LICENSE](LICENSE). diff --git a/DEVELOPER_SETUP.md b/DEVELOPER_SETUP.md index 0f938fc5a..2302bea46 100644 --- a/DEVELOPER_SETUP.md +++ b/DEVELOPER_SETUP.md @@ -1,8 +1,10 @@ -# Environment setup +# Setup for development environment -## Mocking RomM structure +## Environment setup -### - Create the mock structure with at least one rom and empty config for manual testing +### Mocking RomM structure + +#### - Create the mock structure with at least one rom and empty config for manual testing ```sh mkdir -p romm_mock/library/roms/switch @@ -13,26 +15,26 @@ mkdir -p romm_mock/config touch romm_mock/config.yml ``` -## Setting up the backend +### Setting up the backend -### - Copy env.template to .env and fill the variables +#### - Copy env.template to .env and fill the variables ```sh cp env.template .env ``` -### - Install system dependencies +#### - Install system dependencies ```sh # https://mariadb.com/docs/skysql-previous-release/connect/programming-languages/c/install/#Installation_via_Package_Repository_(Linux): sudo apt install libmariadb3 libmariadb-dev pipx ``` -### - Install python dependencies +#### - Install python dependencies You'll need poetry installed -https://python-poetry.org/docs/#installing-with-the-official-installer + ```sh pipx install poetry @@ -46,13 +48,13 @@ Then create the virtual environment poetry install --sync ``` -### - Spin up mariadb in docker +#### - Spin up mariadb in docker ```sh docker-compose up -d ``` -### - Run the backend +#### - Run the backend *\_\_*Migrations will be run automatically when running the backend.\_\_\* @@ -61,16 +63,16 @@ cd backend poetry run python3 main.py ``` -### - Start a worker +#### - Start a worker ```sh cd backend poetry run python3 worker.py ``` -## Setting up the frontend +### Setting up the frontend -### - Install node.js dependencies +#### - Install node.js dependencies ```sh cd frontend @@ -78,7 +80,7 @@ cd frontend npm install ``` -### - Create symlink to library and resources +#### - Create symlink to library and resources ```sh mkdir assets/romm @@ -86,17 +88,17 @@ ln -s ../backend/romm_mock/resources assets/romm/resources ln -s ../backend/romm_mock/assets assets/romm/assets ``` -### - Run the frontend +#### - Run the frontend ```sh npm run dev ``` -## Setting up the linter +### Setting up the linter We use [Trunk](https://trunk.io) for linting, which combines multiple linters and formatters with sensible defaults and a single configuration file. You'll need to install the Trunk CLI to use it. -### - Install the Trunk CLI +#### - Install the Trunk CLI ```sh curl https://get.trunk.io -fsSL | bash @@ -111,7 +113,7 @@ trunk check **Failing to install and run the linter will result in a failed CI check, which won't allow us to merge your PR.** -# Test setup +## Test setup ### - Create the test user and database with root user diff --git a/README.md b/README.md index 8ad173fcd..ad00101ad 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ + +
romm logo @@ -27,8 +29,6 @@ - [Naming Convention](#naming-convention) - [Community](#community) - - # Overview RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators. @@ -46,11 +46,9 @@ RomM (ROM Manager) allows you to scan, enrich, and browse your game collection w ## Preview -| 🖥 Desktop | 📱 Mobile | -| :-----------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------: | -| | | - - +| 🖥 Desktop | 📱 Mobile | +| :---------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | +| desktop preview | mobile preview | # Installation @@ -65,8 +63,6 @@ Before running the [image][docker-tags], please ensure that Docker is installed # Configuration - - ## Folder Structure As mentioned in the installation section, RomM requires a specific folder structure. The two supported structures are as follows: @@ -155,8 +151,6 @@ RomM's "understanding" of your library can be configured with a `config.yaml` fi The scheduler allows you to schedule async tasks that run in the Redis container at regular intervals. Jobs can be run at a specific time in the future, after a time delta, or at recurring internals using cron notation. The [wiki page on the scheduler][wiki-scheduled-tasks] has more information on which tasks are available and how to enable them. - - # Naming Convention ## Platform Support @@ -174,8 +168,6 @@ Games can be tagged with region, revision, or other tags by using parentheses in Tags can be used to search for games in the search bar. For example, searching for **(USA)** will return all games with the USA tag. - - # Community Here are a few projects maintained by members of our community. Since the RomM team does not regularly review them, **we recommend that you review them closely before you use them**. @@ -207,7 +199,6 @@ Here are a few projects that we think you might like: [folder-structure]: #folder-structure [platform-support]: #platform-support -[authentication]: #authentication [tag-support]: #tag-support [configuration-file]: #configuration-file @@ -254,11 +245,5 @@ Here are a few projects that we think you might like: [docker-tags]: https://hub.docker.com/r/rommapp/romm/tags [igdb-api]: https://api-docs.igdb.com/#account-creation [mobygames-api]: https://www.mobygames.com/info/api/ -[titleid-program-id]: https://switchbrew.org/w/index.php?title=Title_list/Games&mobileaction=toggle_view_desktop -[igdb-platforms-list]: https://www.igdb.com/platforms [big-bear-casaos]: https://github.com/bigbeartechworld/big-bear-casaos [kubernetes-helm-chart]: https://artifacthub.io/packages/helm/crystalnet/romm -[pc-mac-icons]: https://www.flaticon.com/free-icons/keyboard-and-mouse -[flaticon]: https://www.flaticon.com -[user-default-icon]: https://icons8.com/icon/tZuAOUGm9AuS/user-default -[icons8]: https://icons8.com diff --git a/SECURITY.md b/SECURITY.md index 547fe07e1..cdd5f9be4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,4 +1,4 @@ -## Reporting Security Issues +# Reporting Security Issues Thanks for helping make RomM safer for everyone. diff --git a/backend/endpoints/search.py b/backend/endpoints/search.py index a2c8d624b..64656aae4 100644 --- a/backend/endpoints/search.py +++ b/backend/endpoints/search.py @@ -113,7 +113,7 @@ async def search_rom( @protected_route(router.get, "/search/cover", ["roms.read"]) async def search_cover( request: Request, - search_term: str | None = None, + search_term: str = "", ) -> list[SearchCoverSchema]: if not STEAMGRIDDB_API_ENABLED: @@ -123,4 +123,7 @@ async def search_cover( detail="No SteamGridDB enabled", ) - return meta_sgdb_handler.get_details(search_term) + return [ + SearchCoverSchema.model_validate(cover) + for cover in meta_sgdb_handler.get_details(search_term) + ] diff --git a/backend/handler/metadata/sgdb_handler.py b/backend/handler/metadata/sgdb_handler.py index be03573b7..392ac11c6 100644 --- a/backend/handler/metadata/sgdb_handler.py +++ b/backend/handler/metadata/sgdb_handler.py @@ -82,7 +82,6 @@ def get_details(self, search_term: str) -> list[dict[str, Any]]: ], } ) - return games diff --git a/frontend/src/__generated__/index.ts b/frontend/src/__generated__/index.ts index 66aefac00..897407819 100644 --- a/frontend/src/__generated__/index.ts +++ b/frontend/src/__generated__/index.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type { AddFirmwareResponse } from "./models/AddFirmwareResponse"; export type { AddRomsResponse } from "./models/AddRomsResponse"; diff --git a/frontend/src/__generated__/models/AddFirmwareResponse.ts b/frontend/src/__generated__/models/AddFirmwareResponse.ts index d57008aeb..0198ad137 100644 --- a/frontend/src/__generated__/models/AddFirmwareResponse.ts +++ b/frontend/src/__generated__/models/AddFirmwareResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { FirmwareSchema } from "./FirmwareSchema"; diff --git a/frontend/src/__generated__/models/AddRomsResponse.ts b/frontend/src/__generated__/models/AddRomsResponse.ts index 9f19f1c36..72a6d576c 100644 --- a/frontend/src/__generated__/models/AddRomsResponse.ts +++ b/frontend/src/__generated__/models/AddRomsResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type AddRomsResponse = { uploaded_roms: Array; diff --git a/frontend/src/__generated__/models/Body_add_collection_collections_post.ts b/frontend/src/__generated__/models/Body_add_collection_collections_post.ts index decb18554..da98bafa9 100644 --- a/frontend/src/__generated__/models/Body_add_collection_collections_post.ts +++ b/frontend/src/__generated__/models/Body_add_collection_collections_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_collection_collections_post = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts index 45bb33207..f48d1ada2 100644 --- a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts +++ b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_firmware_firmware_post = { files: Array; diff --git a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts index 0df627c3a..6b68d8a8f 100644 --- a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts +++ b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_roms_roms_post = { roms: Array; diff --git a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts index 58627651a..be02e90da 100644 --- a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts +++ b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_saves_saves_post = { saves: Array; diff --git a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts index ad25ed065..5e764040f 100644 --- a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts +++ b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_screenshots_screenshots_post = { screenshots: Array; diff --git a/frontend/src/__generated__/models/Body_add_states_states_post.ts b/frontend/src/__generated__/models/Body_add_states_states_post.ts index 2189cc71d..eb129366a 100644 --- a/frontend/src/__generated__/models/Body_add_states_states_post.ts +++ b/frontend/src/__generated__/models/Body_add_states_states_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_add_states_states_post = { states: Array; diff --git a/frontend/src/__generated__/models/Body_token_token_post.ts b/frontend/src/__generated__/models/Body_token_token_post.ts index b4cf29218..75bb0dfe5 100644 --- a/frontend/src/__generated__/models/Body_token_token_post.ts +++ b/frontend/src/__generated__/models/Body_token_token_post.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_token_token_post = { grant_type?: string; diff --git a/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts b/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts index f04969c88..8d0618fc3 100644 --- a/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_update_collection_collections__id__put = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts index 926d02d99..bde8c96bc 100644 --- a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_update_rom_roms__id__put = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts index 3ea8dff01..c10bdaaad 100644 --- a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Body_update_user_users__id__put = { avatar?: Blob | null; diff --git a/frontend/src/__generated__/models/CollectionSchema.ts b/frontend/src/__generated__/models/CollectionSchema.ts index 762969e9b..66fd12cbd 100644 --- a/frontend/src/__generated__/models/CollectionSchema.ts +++ b/frontend/src/__generated__/models/CollectionSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type CollectionSchema = { id: number; diff --git a/frontend/src/__generated__/models/ConfigResponse.ts b/frontend/src/__generated__/models/ConfigResponse.ts index 2768ac72e..eb0a91860 100644 --- a/frontend/src/__generated__/models/ConfigResponse.ts +++ b/frontend/src/__generated__/models/ConfigResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type ConfigResponse = { EXCLUDED_PLATFORMS: Array; diff --git a/frontend/src/__generated__/models/DetailedRomSchema.ts b/frontend/src/__generated__/models/DetailedRomSchema.ts index 9dad0491a..47d7b0623 100644 --- a/frontend/src/__generated__/models/DetailedRomSchema.ts +++ b/frontend/src/__generated__/models/DetailedRomSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { CollectionSchema } from "./CollectionSchema"; import type { RomIGDBMetadata } from "./RomIGDBMetadata"; diff --git a/frontend/src/__generated__/models/FirmwareSchema.ts b/frontend/src/__generated__/models/FirmwareSchema.ts index 6f3b91ea5..12f80198f 100644 --- a/frontend/src/__generated__/models/FirmwareSchema.ts +++ b/frontend/src/__generated__/models/FirmwareSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type FirmwareSchema = { id: number; diff --git a/frontend/src/__generated__/models/HTTPValidationError.ts b/frontend/src/__generated__/models/HTTPValidationError.ts index 0f7e0013f..0b7bfa010 100644 --- a/frontend/src/__generated__/models/HTTPValidationError.ts +++ b/frontend/src/__generated__/models/HTTPValidationError.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { ValidationError } from "./ValidationError"; diff --git a/frontend/src/__generated__/models/IGDBMetadataPlatform.ts b/frontend/src/__generated__/models/IGDBMetadataPlatform.ts index 56c1a8333..594d41d5f 100644 --- a/frontend/src/__generated__/models/IGDBMetadataPlatform.ts +++ b/frontend/src/__generated__/models/IGDBMetadataPlatform.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type IGDBMetadataPlatform = { igdb_id: number; diff --git a/frontend/src/__generated__/models/IGDBRelatedGame.ts b/frontend/src/__generated__/models/IGDBRelatedGame.ts index 9591ae5b5..61c45481d 100644 --- a/frontend/src/__generated__/models/IGDBRelatedGame.ts +++ b/frontend/src/__generated__/models/IGDBRelatedGame.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type IGDBRelatedGame = { id: number; diff --git a/frontend/src/__generated__/models/MessageResponse.ts b/frontend/src/__generated__/models/MessageResponse.ts index a7e5cfc53..09c0f6e8a 100644 --- a/frontend/src/__generated__/models/MessageResponse.ts +++ b/frontend/src/__generated__/models/MessageResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type MessageResponse = { msg: string; diff --git a/frontend/src/__generated__/models/MetadataSourcesDict.ts b/frontend/src/__generated__/models/MetadataSourcesDict.ts index cc8052888..32a3a741c 100644 --- a/frontend/src/__generated__/models/MetadataSourcesDict.ts +++ b/frontend/src/__generated__/models/MetadataSourcesDict.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type MetadataSourcesDict = { IGDB_API_ENABLED: boolean; diff --git a/frontend/src/__generated__/models/MobyMetadataPlatform.ts b/frontend/src/__generated__/models/MobyMetadataPlatform.ts index 6eab88a26..43a6b1695 100644 --- a/frontend/src/__generated__/models/MobyMetadataPlatform.ts +++ b/frontend/src/__generated__/models/MobyMetadataPlatform.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type MobyMetadataPlatform = { moby_id: number; diff --git a/frontend/src/__generated__/models/PlatformSchema.ts b/frontend/src/__generated__/models/PlatformSchema.ts index 9edc5c46d..92aa2b616 100644 --- a/frontend/src/__generated__/models/PlatformSchema.ts +++ b/frontend/src/__generated__/models/PlatformSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { FirmwareSchema } from "./FirmwareSchema"; diff --git a/frontend/src/__generated__/models/Role.ts b/frontend/src/__generated__/models/Role.ts index 0e570999f..dc4ff9db8 100644 --- a/frontend/src/__generated__/models/Role.ts +++ b/frontend/src/__generated__/models/Role.ts @@ -1,6 +1,5 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type Role = "viewer" | "editor" | "admin"; diff --git a/frontend/src/__generated__/models/RomIGDBMetadata.ts b/frontend/src/__generated__/models/RomIGDBMetadata.ts index 02b48c693..439ec3b51 100644 --- a/frontend/src/__generated__/models/RomIGDBMetadata.ts +++ b/frontend/src/__generated__/models/RomIGDBMetadata.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { IGDBMetadataPlatform } from "./IGDBMetadataPlatform"; import type { IGDBRelatedGame } from "./IGDBRelatedGame"; diff --git a/frontend/src/__generated__/models/RomMobyMetadata.ts b/frontend/src/__generated__/models/RomMobyMetadata.ts index 31e5f4aa2..59e2973fe 100644 --- a/frontend/src/__generated__/models/RomMobyMetadata.ts +++ b/frontend/src/__generated__/models/RomMobyMetadata.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { MobyMetadataPlatform } from "./MobyMetadataPlatform"; diff --git a/frontend/src/__generated__/models/RomSchema.ts b/frontend/src/__generated__/models/RomSchema.ts index 9c6687f71..6605e5d19 100644 --- a/frontend/src/__generated__/models/RomSchema.ts +++ b/frontend/src/__generated__/models/RomSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { RomIGDBMetadata } from "./RomIGDBMetadata"; import type { RomMobyMetadata } from "./RomMobyMetadata"; diff --git a/frontend/src/__generated__/models/RomUserSchema.ts b/frontend/src/__generated__/models/RomUserSchema.ts index 03948b7ad..c7eefe2f8 100644 --- a/frontend/src/__generated__/models/RomUserSchema.ts +++ b/frontend/src/__generated__/models/RomUserSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type RomUserSchema = { id: number; diff --git a/frontend/src/__generated__/models/SaveSchema.ts b/frontend/src/__generated__/models/SaveSchema.ts index ee487be8e..1e8a2fc15 100644 --- a/frontend/src/__generated__/models/SaveSchema.ts +++ b/frontend/src/__generated__/models/SaveSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/SchedulerDict.ts b/frontend/src/__generated__/models/SchedulerDict.ts index f1236bcf4..0060ecbd1 100644 --- a/frontend/src/__generated__/models/SchedulerDict.ts +++ b/frontend/src/__generated__/models/SchedulerDict.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { TaskDict } from "./TaskDict"; diff --git a/frontend/src/__generated__/models/ScreenshotSchema.ts b/frontend/src/__generated__/models/ScreenshotSchema.ts index 4677a3637..764328ff5 100644 --- a/frontend/src/__generated__/models/ScreenshotSchema.ts +++ b/frontend/src/__generated__/models/ScreenshotSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type ScreenshotSchema = { id: number; diff --git a/frontend/src/__generated__/models/SearchRomSchema.ts b/frontend/src/__generated__/models/SearchRomSchema.ts index 2f303ff1c..421901cf6 100644 --- a/frontend/src/__generated__/models/SearchRomSchema.ts +++ b/frontend/src/__generated__/models/SearchRomSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type SearchRomSchema = { igdb_id?: number | null; diff --git a/frontend/src/__generated__/models/StateSchema.ts b/frontend/src/__generated__/models/StateSchema.ts index 94c09ad52..03c6d3bc2 100644 --- a/frontend/src/__generated__/models/StateSchema.ts +++ b/frontend/src/__generated__/models/StateSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/StatsReturn.ts b/frontend/src/__generated__/models/StatsReturn.ts index b2c4d0af1..1f77463ef 100644 --- a/frontend/src/__generated__/models/StatsReturn.ts +++ b/frontend/src/__generated__/models/StatsReturn.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type StatsReturn = { PLATFORMS: number; diff --git a/frontend/src/__generated__/models/TaskDict.ts b/frontend/src/__generated__/models/TaskDict.ts index 7a8279c67..9934d9c99 100644 --- a/frontend/src/__generated__/models/TaskDict.ts +++ b/frontend/src/__generated__/models/TaskDict.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type TaskDict = { ENABLED: boolean; diff --git a/frontend/src/__generated__/models/TokenResponse.ts b/frontend/src/__generated__/models/TokenResponse.ts index 90a7da6af..fcbc95a96 100644 --- a/frontend/src/__generated__/models/TokenResponse.ts +++ b/frontend/src/__generated__/models/TokenResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type TokenResponse = { access_token: string; diff --git a/frontend/src/__generated__/models/UploadedSavesResponse.ts b/frontend/src/__generated__/models/UploadedSavesResponse.ts index ff8049233..6830f6f80 100644 --- a/frontend/src/__generated__/models/UploadedSavesResponse.ts +++ b/frontend/src/__generated__/models/UploadedSavesResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { SaveSchema } from "./SaveSchema"; diff --git a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts index 7642bdaa8..529cc0585 100644 --- a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts +++ b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/UploadedStatesResponse.ts b/frontend/src/__generated__/models/UploadedStatesResponse.ts index 81615a9f3..de1177cb3 100644 --- a/frontend/src/__generated__/models/UploadedStatesResponse.ts +++ b/frontend/src/__generated__/models/UploadedStatesResponse.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { StateSchema } from "./StateSchema"; diff --git a/frontend/src/__generated__/models/UserNotesSchema.ts b/frontend/src/__generated__/models/UserNotesSchema.ts index b9a84681a..03aaa02e2 100644 --- a/frontend/src/__generated__/models/UserNotesSchema.ts +++ b/frontend/src/__generated__/models/UserNotesSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type UserNotesSchema = { user_id: number; diff --git a/frontend/src/__generated__/models/UserSchema.ts b/frontend/src/__generated__/models/UserSchema.ts index 4117c59fa..d42f3ac7f 100644 --- a/frontend/src/__generated__/models/UserSchema.ts +++ b/frontend/src/__generated__/models/UserSchema.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ import type { Role } from "./Role"; diff --git a/frontend/src/__generated__/models/ValidationError.ts b/frontend/src/__generated__/models/ValidationError.ts index c725678ad..472c7f5fa 100644 --- a/frontend/src/__generated__/models/ValidationError.ts +++ b/frontend/src/__generated__/models/ValidationError.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type ValidationError = { loc: Array; diff --git a/frontend/src/__generated__/models/WatcherDict.ts b/frontend/src/__generated__/models/WatcherDict.ts index 6c3e97a2b..78fce95ea 100644 --- a/frontend/src/__generated__/models/WatcherDict.ts +++ b/frontend/src/__generated__/models/WatcherDict.ts @@ -1,7 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ -/* eslint-disable */ export type WatcherDict = { ENABLED: boolean; diff --git a/frontend/src/views/Gallery/Collection.vue b/frontend/src/views/Gallery/Collection.vue index e491d5001..6ce41e320 100644 --- a/frontend/src/views/Gallery/Collection.vue +++ b/frontend/src/views/Gallery/Collection.vue @@ -281,6 +281,7 @@ onBeforeUnmount(() => { transform-scale with-border show-fav + show-platform-icon :with-border-romm-accent=" romsStore.isSimpleRom(rom) && selectedRoms?.includes(rom) " diff --git a/poetry.lock b/poetry.lock index 2b2c99642..a1a220b45 100644 --- a/poetry.lock +++ b/poetry.lock @@ -143,13 +143,13 @@ files = [ [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -493,13 +493,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fakeredis" -version = "2.23.2" +version = "2.23.3" description = "Python implementation of redis API, can be used for testing purposes." optional = false python-versions = "<4.0,>=3.7" files = [ - {file = "fakeredis-2.23.2-py3-none-any.whl", hash = "sha256:3721946b955930c065231befd24a9cdc68b339746e93848ef01a010d98e4eb4f"}, - {file = "fakeredis-2.23.2.tar.gz", hash = "sha256:d649c409abe46c63690b6c35d3c460e4ce64c69a52cea3f02daff2649378f878"}, + {file = "fakeredis-2.23.3-py3-none-any.whl", hash = "sha256:4779be828f4ebf53e1a286fd11e2ffe0f510d3e5507f143d644e67a07387d759"}, + {file = "fakeredis-2.23.3.tar.gz", hash = "sha256:0c67caa31530114f451f012eca920338c5eb83fa7f1f461dd41b8d2488a99cba"}, ] [package.dependencies] @@ -733,13 +733,13 @@ ipython = {version = ">=7.31.1", markers = "python_version >= \"3.11\""} [[package]] name = "ipykernel" -version = "6.29.4" +version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, - {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, ] [package.dependencies] @@ -766,13 +766,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.25.0" +version = "8.26.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.25.0-py3-none-any.whl", hash = "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab"}, - {file = "ipython-8.25.0.tar.gz", hash = "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716"}, + {file = "ipython-8.26.0-py3-none-any.whl", hash = "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff"}, + {file = "ipython-8.26.0.tar.gz", hash = "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c"}, ] [package.dependencies] @@ -798,7 +798,7 @@ nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] @@ -1244,84 +1244,95 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.3.0" +version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -1481,109 +1492,122 @@ files = [ [[package]] name = "pydantic" -version = "2.7.4" +version = "2.8.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, - {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.4" -typing-extensions = ">=4.6.1" +pydantic-core = "2.20.1" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] [package.extras] email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.4" +version = "2.20.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, - {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, - {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, - {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, - {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, - {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, - {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, - {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, - {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, - {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, - {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, - {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, - {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, - {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, ] [package.dependencies] @@ -2382,13 +2406,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "70.1.0.20240627" +version = "70.2.0.20240704" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.1.0.20240627.tar.gz", hash = "sha256:385907a47b5cf302b928ce07953cd91147d5de6f3da604c31905fdf0ec309e83"}, - {file = "types_setuptools-70.1.0.20240627-py3-none-any.whl", hash = "sha256:c7bdf05cd0a8b66868b4774c7b3c079d01ae025d8c9562bfc8bf2ff44d263c9c"}, + {file = "types-setuptools-70.2.0.20240704.tar.gz", hash = "sha256:2f8d28d16ca1607080f9fdf19595bd49c942884b2bbd6529c9b8a9a8fc8db911"}, + {file = "types_setuptools-70.2.0.20240704-py3-none-any.whl", hash = "sha256:6b892d5441c2ed58dd255724516e3df1db54892fb20597599aea66d04c3e4d7f"}, ] [[package]] @@ -2799,4 +2823,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "72732e9b3f6d48f371c4080e6ce222b00d572148ed69f8ae7e17833da9d77f78" +content-hash = "8f13b0b7fcf9c4bcbd0441a17570c971b1aed71ef5a6091ab84587e4f2429b0a" diff --git a/pyproject.toml b/pyproject.toml index 58de00641..03a7b5863 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ watchdog = "^4.0.0" yarl = "^1.9.4" joserfc = "^0.9.0" pillow = "^10.3.0" +certifi = "2024.07.04" [tool.poetry.group.test.dependencies] fakeredis = "^2.21.3" From 05939eccf107d49763f9cc0df4eb2a0ea80c71cd Mon Sep 17 00:00:00 2001 From: zurdi Date: Tue, 9 Jul 2024 15:01:45 +0200 Subject: [PATCH 2/3] platform icon on card tweaked --- .../src/components/common/Game/Card/Base.vue | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/frontend/src/components/common/Game/Card/Base.vue b/frontend/src/components/common/Game/Card/Base.vue index 07ce85c72..1cc2f7d1a 100644 --- a/frontend/src/components/common/Game/Card/Base.vue +++ b/frontend/src/components/common/Game/Card/Base.vue @@ -157,19 +157,13 @@ onMounted(() => {
- - - + :size="25" + :key="rom.platform_slug" + :slug="rom.platform_slug" + class="label-platform" + />
{ left: 0rem; } .label-platform { - right: 0.2rem; - top: 0.1rem; + right: -0.1rem; + top: -0.1rem; } .append-inner-right { bottom: 0rem; From 008d62aaa68764cc175c334d2d26e45c1d93eb3a Mon Sep 17 00:00:00 2001 From: Zurdi <34356590+zurdi15@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:03:06 +0200 Subject: [PATCH 3/3] Update CHANGELOG.md Co-authored-by: Georges-Antoine Assi <3247106+gantoine@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5217915bc..ee1c95fab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# RomM complete changelog +# Changelog ## v3.0.3 (_25-03-2024_)