From 27a135d9c7cef42271cd17d24ef7b25a9c1caced Mon Sep 17 00:00:00 2001 From: osfanbuff63 Date: Fri, 7 Apr 2023 13:02:51 -0400 Subject: [PATCH 1/2] feat(directory): :sparkles: initial work on an FO dir --- vanilla_installer/config.py | 12 ++++++++++-- vanilla_installer/gui.py | 17 +++++++++++++++++ vanilla_installer/log.py | 18 +++++++++--------- vanilla_installer/main.py | 26 ++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 13 deletions(-) diff --git a/vanilla_installer/config.py b/vanilla_installer/config.py index ff1934c..9e8cd8c 100644 --- a/vanilla_installer/config.py +++ b/vanilla_installer/config.py @@ -1,3 +1,4 @@ +import logging import os import platform from pathlib import Path @@ -6,7 +7,7 @@ import tomlkit from tomlkit import toml_file -from vanilla_installer.log import logger +logger = logging.getLogger(__name__) FILE_PATH = str(Path("vanilla_installer.toml").resolve()) @@ -23,8 +24,15 @@ def init(): config = tomlkit.table() # maybe call darkdetect from here? - # might want to just leave this alone to be + # might want to just leave this alone to be honest config.add("theme", "dark") + config.add( + tomlkit.comment( + "Whether to use FO's directory or ask the user for a custom one." + ) + ) + config.add("fo_dir", True) + config.add(tomlkit.comment("This is only used is fo_dir (above) is false.")) config.add("path", mll.utils.get_minecraft_directory()) if platform.system() == "Windows": font = "Inter Regular" diff --git a/vanilla_installer/gui.py b/vanilla_installer/gui.py index 79a0282..d7967a4 100644 --- a/vanilla_installer/gui.py +++ b/vanilla_installer/gui.py @@ -502,6 +502,23 @@ def changeFont(self, state) -> None: self.reloadTheme() self.parentWindow.reloadTheme() + def setFODir(self, state: bool) -> None: + """Set whether the FO dir should be used. + + Args: + state (bool): Whether the FO directory is being enabled or disabled. + """ + if state is True: + config.write("fo_dir", True) + self.parentWindow.locationSelector.setDisabled(True) + self.parentWindow.selectedLocation.setDisabled(True) + else: + config.write("fo_dir", False) + self.parentWindow.locationSelector.setDisabled(False) + self.parentWindow.selectedLocation.setDisabled(False) + self.reloadTheme() + self.parentWindow.reloadTheme() + class Worker(QRunnable): def __init__(self, fn) -> None: diff --git a/vanilla_installer/log.py b/vanilla_installer/log.py index 71b3fcf..2952bfd 100644 --- a/vanilla_installer/log.py +++ b/vanilla_installer/log.py @@ -3,8 +3,8 @@ """Starts logging for Vanilla Installer.""" import logging import logging.handlers # pylance moment -from pathlib import Path import sys +from pathlib import Path class LoggerWriter: @@ -13,9 +13,9 @@ def __init__(self, logfct): self.buf = [] def write(self, msg): - if msg.endswith('\n'): - self.buf.append(msg.removesuffix('\n')) - self.logfct(''.join(self.buf)) + if msg.endswith("\n"): + self.buf.append(msg.removesuffix("\n")) + self.logfct("".join(self.buf)) self.buf = [] else: self.buf.append(msg) @@ -32,11 +32,11 @@ def flush(self): with logfile_path as file: open(file, "x", encoding="utf-8").write("") handler = logging.handlers.RotatingFileHandler( - filename=logfile_path, - encoding="utf-8", - maxBytes=32 * 1024 * 1024, # 32 MiB - backupCount=5, # Rotate through 5 files - ) + filename=logfile_path, + encoding="utf-8", + maxBytes=32 * 1024 * 1024, # 32 MiB + backupCount=5, # Rotate through 5 files +) dt_fmt = "%Y-%m-%d %H:%M:%S" formatter = logging.Formatter( diff --git a/vanilla_installer/main.py b/vanilla_installer/main.py index 818ff70..c5b5503 100644 --- a/vanilla_installer/main.py +++ b/vanilla_installer/main.py @@ -5,7 +5,6 @@ """ # IMPORTS - import base64 import io import json @@ -14,7 +13,7 @@ import subprocess import zipfile from pathlib import Path -from typing import Optional +from typing import Optional, Union import click import minecraft_launcher_lib as mll @@ -196,6 +195,29 @@ def get_version() -> str: return __version__ +def get_fo_dir() -> str: + """Get the default directory to use when the independent FO directory is selected. + + Returns: + str: The path. + """ + if platform.system() == "Windows": + fo_dir_path = ( + Path("~/AppData/Roaming/Fabulously Optimized").expanduser().resolve() + ) + elif platform.system() == "macOS": + fo_dir_path = ( + Path("~/Library/Application Support/Fabulously Optimized") + .expanduser() + .resolve() + ) + else: + fo_dir_path = Path("~/.local/share/Fabulously Optimized").expanduser().resolve() + if fo_dir_path.exists() is False: + fo_dir_path.mkdir() + return str(fo_dir_path) + + def text_update( text: str, widget=None, mode: str = "info", interface: str = "GUI" ) -> None: From 7b8293a6fe7e1d5bf8015e73e2a698f159a3be70 Mon Sep 17 00:00:00 2001 From: osfanbuff63 Date: Tue, 18 Apr 2023 17:45:32 -0400 Subject: [PATCH 2/2] Merge branch 'main' into 'feat/fo-dir' --- .github/workflows/ci.yml | 21 +- .github/workflows/git-repo-sync.yml | 1 + README.md | 4 +- poetry.lock | 322 +++++++++--------- pyproject.toml | 21 +- vanilla_installer/__init__.py | 9 +- vanilla_installer/__main__.py | 7 +- .../assets/{ => fonts}/Inter-Regular.otf | Bin .../assets/fonts/LICENSE-Inter.txt | 94 +++++ .../assets/fonts/LICENSE-OpenDyslexic.txt | 94 +++++ .../{ => fonts}/OpenDyslexic-Regular.otf | Bin .../assets/{ => fonts}/fonts.qrc | 0 vanilla_installer/assets/lang/en_us.json | 9 + vanilla_installer/assets/versions.json | 5 +- vanilla_installer/cli.py | 11 +- vanilla_installer/config.py | 14 +- vanilla_installer/gui.py | 90 +++-- vanilla_installer/i18n.py | 29 ++ vanilla_installer/log.py | 11 +- vanilla_installer/main.py | 55 +-- vanilla_installer/theme.py | 16 +- 21 files changed, 552 insertions(+), 261 deletions(-) rename vanilla_installer/assets/{ => fonts}/Inter-Regular.otf (100%) create mode 100644 vanilla_installer/assets/fonts/LICENSE-Inter.txt create mode 100644 vanilla_installer/assets/fonts/LICENSE-OpenDyslexic.txt rename vanilla_installer/assets/{ => fonts}/OpenDyslexic-Regular.otf (100%) rename vanilla_installer/assets/{ => fonts}/fonts.qrc (100%) create mode 100644 vanilla_installer/assets/lang/en_us.json create mode 100644 vanilla_installer/i18n.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98e98ce..6c2f134 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,13 +66,13 @@ jobs: if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' run: pipx run poetry install --no-interaction --no-root - name: Shorten commit SHA - uses: benjlevesque/short-sha@v2.1 + uses: benjlevesque/short-sha@v2.2 id: short-sha - name: Build run: | source .venv/bin/activate pip install pyside6 - pyside6-rcc vanilla_installer/assets/fonts.qrc -o vanilla_installer/fonts.py + pyside6-rcc vanilla_installer/assets/fonts/fonts.qrc -o vanilla_installer/fonts.py pipx run poetry build --no-interaction - name: Get normalized branch name run: | @@ -94,14 +94,13 @@ jobs: shell: pwsh steps: - uses: actions/checkout@v3 - # nuitka currently only supports Python <=3.10 right now - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v4 id: setup-python with: - python-version: "3.10" + python-version: "3.11" - name: Shorten commit SHA - uses: benjlevesque/short-sha@v2.1 + uses: benjlevesque/short-sha@v2.2 id: short-sha - name: Cache uses: actions/cache@v3 @@ -127,7 +126,7 @@ jobs: ./.venv/Scripts/activate.ps1 # pip install nuitka minecraft_launcher_lib PySide6 click tomli darkdetect echo '__version__ = "${{ env.BRANCH }}+${{ steps.short-sha.outputs.sha }}"' | Out-File vanilla_installer/__init__.py - pyside6-rcc vanilla_installer/assets/fonts.qrc -o vanilla_installer/fonts.py + pyside6-rcc vanilla_installer/assets/fonts/fonts.qrc -o vanilla_installer/fonts.py python -m nuitka --standalone --onefile --windows-icon-from-ico=media/icon.ico --output-dir=build --include-package=minecraft_launcher_lib,PySide6,click,tomli,darkdetect -o "Vanilla Installer-GUI ${{ env.BRANCH }}+${{ steps.short-sha.outputs.sha }}.exe" --enable-plugin=pyside6 --include-data-dir=vanilla_installer/assets=assets/ --disable-console --nofollow-import-to=PySide6.examples vanilla_installer/gui.py --assume-yes-for-downloads - name: Upload built executable uses: actions/upload-artifact@v3 @@ -145,12 +144,12 @@ jobs: shell: pwsh steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.11" - name: Shorten commit SHA - uses: benjlevesque/short-sha@v2.1 + uses: benjlevesque/short-sha@v2.2 id: short-sha - name: Cache uses: actions/cache@v3 @@ -161,7 +160,7 @@ jobs: uses: actions/cache@v3 with: path: .venv - key: ci-build-venv-cli-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }} + key: ci-build-venv-cli-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-1 - name: Get normalized branch name shell: bash run: | diff --git a/.github/workflows/git-repo-sync.yml b/.github/workflows/git-repo-sync.yml index 2a01b62..46e2fbe 100644 --- a/.github/workflows/git-repo-sync.yml +++ b/.github/workflows/git-repo-sync.yml @@ -7,6 +7,7 @@ on: jobs: sync-bitbucket: + if: github.repository_owner == 'Fabulously-Optimized' runs-on: ubuntu-22.04 name: Git Repo Sync - BitBucket steps: diff --git a/README.md b/README.md index ad9824e..316341f 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ However, you have to manually install updates. **Requirements**: Ability to download a file and double-click it. -**Downsides**: No easy updating +**Downsides**: No easy updating. **Recommended for**: People that aren't too well versed in technology, and probably don't care about updating VI. @@ -110,5 +110,3 @@ See [here](https://github.com/Fabulously-Optimized/vanilla-installer/graphs/cont - -![Contribution Overview](https://orbit.onlix.me/contribview/Fabulously-Optimized/vanilla-installer#15/11/2022) diff --git a/poetry.lock b/poetry.lock index 584d16a..d8b4a2a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. [[package]] name = "anyio" @@ -23,14 +23,14 @@ trio = ["trio (>=0.16,<0.22)"] [[package]] name = "astroid" -version = "2.15.0" +version = "2.15.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.0-py3-none-any.whl", hash = "sha256:e3e4d0ffc2d15d954065579689c36aac57a339a4679a679579af6401db4d3fdb"}, - {file = "astroid-2.15.0.tar.gz", hash = "sha256:525f126d5dc1b8b0b6ee398b33159105615d92dc4a17f2cd064125d57f6186fa"}, + {file = "astroid-2.15.2-py3-none-any.whl", hash = "sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb"}, + {file = "astroid-2.15.2.tar.gz", hash = "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd"}, ] [package.dependencies] @@ -58,37 +58,37 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "black" -version = "23.1.0" +version = "23.3.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, - {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, - {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, - {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, - {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, - {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, - {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, - {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, - {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, - {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, - {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, - {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, - {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, - {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] @@ -368,14 +368,14 @@ files = [ [[package]] name = "imageio" -version = "2.26.1" +version = "2.27.0" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "imageio-2.26.1-py3-none-any.whl", hash = "sha256:df56ade8a9b43476ce020be0202b09a3a4cc0c7a079f8fe5ee4b87105eff4237"}, - {file = "imageio-2.26.1.tar.gz", hash = "sha256:7f7bc13254a311f298bc64d60c2690dd3460fd412532717e2c51715daed17fc5"}, + {file = "imageio-2.27.0-py3-none-any.whl", hash = "sha256:24c6ad7d000e64eacc2861c402b6fb128f370cb0a6623cf796d83bca0d0d14d3"}, + {file = "imageio-2.27.0.tar.gz", hash = "sha256:ee269c957785ef0373cc7a7323185956d83ec05e6cdf20b42a03ba7b74ac58c6"}, ] [package.dependencies] @@ -503,18 +503,18 @@ files = [ [[package]] name = "nuitka" -version = "1.5.3" +version = "1.5.5" description = "Python compiler with full language support and CPython compatibility" category = "dev" optional = false python-versions = "*" files = [ - {file = "Nuitka-1.5.3.tar.gz", hash = "sha256:4338a21b78c7688e00f4f9d369079de2573521588f7c1980622d2438350e265d"}, + {file = "Nuitka-1.5.5.tar.gz", hash = "sha256:3a1866eb056532d7161e8a38fcf16d6c8a07ea56478a5e7afba02760de333c29"}, ] [package.dependencies] ordered-set = ">=4.1.0" -zstandard = ">=0.15" +zstandard = ">=0.20.0" [[package]] name = "numpy" @@ -554,21 +554,20 @@ files = [ {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, ] +[package.extras] +dev = ["black", "mypy", "pytest"] + [[package]] name = "ordered-set" version = "4.1.0" -description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" +description = "A MutableSet that remembers its order, so that every entry has an index" category = "dev" optional = false python-versions = ">=3.7" files = [ {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, - {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, ] -[package.extras] -dev = ["black", "mypy", "pytest"] - [[package]] name = "packaging" version = "23.0" @@ -595,110 +594,99 @@ files = [ [[package]] name = "pillow" -version = "9.4.0" +version = "9.5.0" description = "Python Imaging Library (Fork)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, - {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, - {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, - {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, - {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, - {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, - {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, - {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, - {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, - {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, - {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, - {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, - {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, - {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, - {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, - {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, - {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, - {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, - {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, - {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, - {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, - {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, - {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, - {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, - {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, - {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, + {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, + {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, + {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, + {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, + {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, + {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, + {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, + {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, + {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, + {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, + {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, + {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, + {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, + {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, + {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "platformdirs" -version = "3.1.1" +version = "3.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.1.1-py3-none-any.whl", hash = "sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8"}, - {file = "platformdirs-3.1.1.tar.gz", hash = "sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa"}, + {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, + {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, ] [package.extras] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pycodestyle" @@ -738,18 +726,18 @@ files = [ [[package]] name = "pylint" -version = "2.17.1" +version = "2.17.2" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.1-py3-none-any.whl", hash = "sha256:8660a54e3f696243d644fca98f79013a959c03f979992c1ab59c24d3f4ec2700"}, - {file = "pylint-2.17.1.tar.gz", hash = "sha256:d4d009b0116e16845533bc2163493d6681846ac725eab8ca8014afb520178ddd"}, + {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, + {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, ] [package.dependencies] -astroid = ">=2.15.0,<=2.17.0-dev0" +astroid = ">=2.15.2,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -768,63 +756,63 @@ testutils = ["gitpython (>3)"] [[package]] name = "pyside6" -version = "6.4.3" +version = "6.5.0" description = "Python bindings for the Qt cross-platform application and UI framework" category = "main" optional = true python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6-6.4.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:1389e818ecf794b52b570e4617c0813865fd9a790ee077fedabbd8aac6da7416"}, - {file = "PySide6-6.4.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:706324dd7a16854073c3b08de608f9ced868d567b8b202a88b7b9985f54ef30c"}, - {file = "PySide6-6.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:1c1c7e6fb8e2d0fe041e278beefdb033c364e67867565f824d4dc40352906f42"}, - {file = "PySide6-6.4.3-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:73883c13bc44221507abc2b3d6a7bebbf0e067844f7d0a6e16b2df177aab89d8"}, - {file = "PySide6-6.4.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:bc37b7790ca69b0813b86d3c70c39db740a0d15dc1fc7dbb8e6a0499a96c6461"}, - {file = "PySide6-6.4.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:137831ed89f79ff8c68d21457abbee82f61dedacc19bbefc8eb7d80da1703aad"}, + {file = "PySide6-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb059a0f3d4b763451a1e8dec440784dff1728e9ace6cb81c541cc1354c5f3dc"}, + {file = "PySide6-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5102c57841b15facb0aeca1f23d689ebc528a609bf5fb907f1ef2747f6415001"}, + {file = "PySide6-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:13e8e96aa7a89840575505f50b9635e6450bf413ff46288d1085b3a9f8b225c1"}, + {file = "PySide6-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:f30e1d0319ea4d2ddac654c58377079a40f38c4cac7b6fd631902f91190c1fc8"}, + {file = "PySide6-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c1c7244a4e83b3a4ea965f4a85776ebc64fa3c9b4af77ad70b22e64ccec3d451"}, + {file = "PySide6-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7242fe09aaeb3399152fa1c6c25098b93df945620a4bd81a37de0ecb2f64fd5d"}, ] [package.dependencies] -PySide6-Addons = "6.4.3" -PySide6-Essentials = "6.4.3" -shiboken6 = "6.4.3" +PySide6-Addons = "6.5.0" +PySide6-Essentials = "6.5.0" +shiboken6 = "6.5.0" [[package]] name = "pyside6-addons" -version = "6.4.3" +version = "6.5.0" description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" category = "main" optional = true python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6_Addons-6.4.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:60781372ccf9f9cbc2a1aa7a41318111c92850f2434dbfbf6fa215a89681de1e"}, - {file = "PySide6_Addons-6.4.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:062593d7810bb53e51c1268b8cba23e47e4600afba0e981a26b57ff05617b1c6"}, - {file = "PySide6_Addons-6.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:493527ed86ee903e496f761da66edc7c237e12a8465d62075fe206b2874585e8"}, - {file = "PySide6_Addons-6.4.3-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:b95e6a98b1a71aaa2bc97e4a6a4e18e78d6141ff161eff598a3b85850eaacd4a"}, - {file = "PySide6_Addons-6.4.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9d9a607b7c233077f907baa326f55759427a3ae47efff0ca19e72007778e15e1"}, - {file = "PySide6_Addons-6.4.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4e0d0ab705a481e7b4714f06b3648818a0ef80404ea976becea43a13280cc7f3"}, + {file = "PySide6_Addons-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:d29e84d0b54c5fdeb6cc405d537788a648da975cc58e37f0df3a17cd11a67f1d"}, + {file = "PySide6_Addons-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:29551ca63a1cbc0fcd17fa9e477282857e2c66c3a55fdb9754b75519d5adf89a"}, + {file = "PySide6_Addons-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:db7a6117c3f944b4827204ed7f346030fc10c602521f278310a78021567df28f"}, + {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:fd5bc46cfffac7afa2f76c3dc6cb6f567a0ad1276d8177797c1bc152aec50f35"}, + {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9ed197a05f1c279d1589d8535040fe5e21b92fa19933e38de962050cb58f6c05"}, + {file = "PySide6_Addons-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1a9545df3e77c656a3708eaa3584d98ff41720c7dadf344d5126d66e83d0ab5a"}, ] [package.dependencies] -PySide6-Essentials = "6.4.3" -shiboken6 = "6.4.3" +PySide6-Essentials = "6.5.0" +shiboken6 = "6.5.0" [[package]] name = "pyside6-essentials" -version = "6.4.3" +version = "6.5.0" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" category = "main" optional = true python-versions = "<3.12,>=3.7" files = [ - {file = "PySide6_Essentials-6.4.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:62f7f80e99eaaa3b3f7014170bf01c2fa2e76955805f24c443630abc10793abb"}, - {file = "PySide6_Essentials-6.4.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7983cf2152dfebf3c2d0767d12e452c4bd0809aa53777fef949a7ff4b0ef8a49"}, - {file = "PySide6_Essentials-6.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:9e1964de12b6ea351c69032a6e15dcc29f48d561dfd579e67adc15bad3be1d45"}, - {file = "PySide6_Essentials-6.4.3-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:c41cbef7a25c67da11b6f6281e60f59c21a198c1da471821e43963e1b8f196f7"}, - {file = "PySide6_Essentials-6.4.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c07e5c425b8720fe8ecdbd46f36d7ab90ffbe27ac0258fea326dcf153484b3c7"}, - {file = "PySide6_Essentials-6.4.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cadd2197f534f7ff55c7718ce50c61ab6d13270449dfde8e27f46b9500b9fe56"}, + {file = "PySide6_Essentials-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4517e27fc540d9e645ea12dea82c8b29c042d66aaef46960a125cccdf0079800"}, + {file = "PySide6_Essentials-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f00d4f10758cdc3f49f94465ead788ad294dac7d9cc5e1cc0610e97c2bdfc8d7"}, + {file = "PySide6_Essentials-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:bc2e0a9dafe383ab965e98b6ddf73f709da3736197dea8eab265fd3e524db993"}, + {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:58a88a099171c55a7e41e519208c9ca93661d277bb73c5897a2e3f2cbe5248b7"}, + {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0287ec94ee1923d430bb20836bc649a5c76a59281245de469d7f759cc73c5ea7"}, + {file = "PySide6_Essentials-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:987c2ec04c35481c841de9b25931d2d074eb7d2e591aa5628041b2ca2df96d0e"}, ] [package.dependencies] -shiboken6 = "6.4.3" +shiboken6 = "6.5.0" [[package]] name = "requests" @@ -850,18 +838,18 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "shiboken6" -version = "6.4.3" +version = "6.5.0" description = "Python/C++ bindings helper module" category = "main" optional = true python-versions = "<3.12,>=3.7" files = [ - {file = "shiboken6-6.4.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0b6d6a571131b94546aa784dc00221ba7afc90515354eaae65525753a84b6c4a"}, - {file = "shiboken6-6.4.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74570273004d2e481e55618150dfaee7ae253027b438066e216b339fae1e999a"}, - {file = "shiboken6-6.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:0fee602ba02a0d1a6e4d4a69ddc5375ec7bed2ac5b51f06266a919d896517ee5"}, - {file = "shiboken6-6.4.3-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:6504ed8b01bde387cebc035687deae77a0bddcef3339e2e5b0e5bf9e6258e860"}, - {file = "shiboken6-6.4.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:73af15fa9f6b7305849116308923d437354ecabefc0546dc514901ec3bae4d89"}, - {file = "shiboken6-6.4.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4a63978b1a4ffed32776413a213a0f4e0a7fde2ebe06ac2ac70f99103fed185b"}, + {file = "shiboken6-6.5.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2d7fe6534a51ec9c96b82fc6275cf75e85ab29276a9778aed756465f81adf0c1"}, + {file = "shiboken6-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:46ff977f96c9d45dba3c3a313628356fd40e4423bb65bf2d9870b73396fad8be"}, + {file = "shiboken6-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:aee9708517821aaef547c83d689bf524d6f217d47232cb313d9af9e630215eed"}, + {file = "shiboken6-6.5.0-pp39-pypy39_pp73-macosx_10_9_universal2.whl", hash = "sha256:6e2874ea013d4cea7819935977bffa4c634ebcaabcb5287798df9f0c2f10c4c0"}, + {file = "shiboken6-6.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:72888ebc5ef7295df27197c0af726bd6731e2a883b346e448e2c740b3e34bc2f"}, + {file = "shiboken6-6.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1bba668221a5cf40186cea93ced018cf788d7476d50968a3f073ebbe41ce712d"}, ] [[package]] @@ -890,14 +878,14 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.11.7" description = "Style preserving TOML library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, + {file = "tomlkit-0.11.7-py3-none-any.whl", hash = "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c"}, + {file = "tomlkit-0.11.7.tar.gz", hash = "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d"}, ] [[package]] @@ -1087,4 +1075,4 @@ gui = ["pyside6", "darkdetect"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<3.12" -content-hash = "91abedf0b42d1dab26d512bbfc47a7a9629d8a88144e951ca993414507e52f6a" +content-hash = "d271f9efedd43aec54c542c1c26beeb7aec73e85b3e683198caca3d0c75a9599" diff --git a/pyproject.toml b/pyproject.toml index 46c26c1..4a3099f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,11 @@ [tool.poetry] name = "vanilla-installer" -version = "0.2.1" +version = "0.2.2" description = "An installer of Fabulously Optimized for the vanilla launcher." authors = [ "osfanbuff63 ", - "nsde " + "nsde ", + "Kichura " ] documentation = "https://fabulously-optimized.gitbook.io/vanilla-installer" homepage = "https://fabulously-optimized.gitbook.io/vanilla-installer" @@ -22,26 +23,24 @@ requests = "^2.28.2" tomli = "^2.0.1" darkdetect = {version = "^0.8.0", optional = true} minecraft-launcher-lib = "^5.3" -pyside6 = {version = "^6.4.3", optional = true} +pyside6 = {version = "^6.5.0", optional = true} asyncclick = "^8.1.3.4" anyio = "^3.6.2" # asyncclick seems to bug without anyio, despite being a dep -tomlkit = "^0.11.6" +tomlkit = "^0.11.7" [tool.poetry.group.dev.dependencies] -pylint = "^2.17.1" -black = "^23.1.0" -isort = "^5.11.4" - +pylint = "^2.17.2" +black = "^23.3.0" +isort = "^5.12.0" [tool.poetry.group.ci.dependencies] flake8 = "^6.0.0" - [tool.poetry.group.compile.dependencies] nuitka = "^1.5" ordered-set = "^4.1.0" zstandard = "^0.20.0" -imageio = "^2.26.0" +imageio = "^2.27.0" # pyproject-appimage = {version = "^2.0", python = ">=3.9,<3.12"} [tool.poetry.scripts] @@ -58,7 +57,7 @@ gui = ["pyside6", "darkdetect"] # [tool.pyproject-appimage] # script = "vanilla-installer" -# output = "VanillaInstaller-v0.2.0.AppImage" +# output = "VanillaInstaller-v0.2.2.AppImage" [tool.isort] profile = "black" diff --git a/vanilla_installer/__init__.py b/vanilla_installer/__init__.py index 92d49cc..8927e3d 100644 --- a/vanilla_installer/__init__.py +++ b/vanilla_installer/__init__.py @@ -1,5 +1,8 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. -"""An installer of Fabulously Optimized for the vanilla launcher.""" -__version__ = "0.2.1" +""" +An installer of Fabulously Optimized for the vanilla launcher. +""" + +__version__ = "0.2.2" __license__ = "MIT License" diff --git a/vanilla_installer/__main__.py b/vanilla_installer/__main__.py index c3cf997..e6ee9cd 100644 --- a/vanilla_installer/__main__.py +++ b/vanilla_installer/__main__.py @@ -1,6 +1,9 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. -"""This module allows the Vanilla Installer CLI to be run with python -m.""" +""" +This module allows the Vanilla Installer CLI to be run with python -m. +""" + from vanilla_installer import cli cli.vanilla_installer() diff --git a/vanilla_installer/assets/Inter-Regular.otf b/vanilla_installer/assets/fonts/Inter-Regular.otf similarity index 100% rename from vanilla_installer/assets/Inter-Regular.otf rename to vanilla_installer/assets/fonts/Inter-Regular.otf diff --git a/vanilla_installer/assets/fonts/LICENSE-Inter.txt b/vanilla_installer/assets/fonts/LICENSE-Inter.txt new file mode 100644 index 0000000..ff80f8c --- /dev/null +++ b/vanilla_installer/assets/fonts/LICENSE-Inter.txt @@ -0,0 +1,94 @@ +Copyright (c) 2016-2020 The Inter Project Authors. +"Inter" is trademark of Rasmus Andersson. +https://github.com/rsms/inter + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/vanilla_installer/assets/fonts/LICENSE-OpenDyslexic.txt b/vanilla_installer/assets/fonts/LICENSE-OpenDyslexic.txt new file mode 100644 index 0000000..bb86782 --- /dev/null +++ b/vanilla_installer/assets/fonts/LICENSE-OpenDyslexic.txt @@ -0,0 +1,94 @@ +Copyright (c) 2019-07-29, Abbie Gonzalez (https://abbiecod.es|support@abbiecod.es), +with Reserved Font Name OpenDyslexic. +Copyright (c) 12/2012 - 2019 +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/vanilla_installer/assets/OpenDyslexic-Regular.otf b/vanilla_installer/assets/fonts/OpenDyslexic-Regular.otf similarity index 100% rename from vanilla_installer/assets/OpenDyslexic-Regular.otf rename to vanilla_installer/assets/fonts/OpenDyslexic-Regular.otf diff --git a/vanilla_installer/assets/fonts.qrc b/vanilla_installer/assets/fonts/fonts.qrc similarity index 100% rename from vanilla_installer/assets/fonts.qrc rename to vanilla_installer/assets/fonts/fonts.qrc diff --git a/vanilla_installer/assets/lang/en_us.json b/vanilla_installer/assets/lang/en_us.json new file mode 100644 index 0000000..420c467 --- /dev/null +++ b/vanilla_installer/assets/lang/en_us.json @@ -0,0 +1,9 @@ +{ + "vanilla_installer.gui.subtitle": "Vanilla Installer", + "vanilla_installer.gui.install_button": "Install", + "vanilla_installer.gui.mc_version": "Minecraft version:", + "vanilla_installer.gui.location": "Location:", + "vanilla_installer.gui.issues_button": "Report bugs", + "vanilla_installer.gui.theme_toggle": "Toggle theme", + "vanilla_installer.gui.settings": "Settings" +} \ No newline at end of file diff --git a/vanilla_installer/assets/versions.json b/vanilla_installer/assets/versions.json index 7e007da..83e8e8e 100644 --- a/vanilla_installer/assets/versions.json +++ b/vanilla_installer/assets/versions.json @@ -1,7 +1,6 @@ { - "1.19.3": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.19.3/pack.toml", + "1.19.4": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.19.4/pack.toml", "1.18.2": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.18.2/pack.toml", "1.17.1": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.17.1/pack.toml", - "1.16.5": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.16.5/pack.toml", - "1.19.4 (alpha)": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.19.4/pack.toml" + "1.16.5": "https://raw.githubusercontent.com/Fabulously-Optimized/fabulously-optimized/main/Packwiz/1.16.5/pack.toml" } diff --git a/vanilla_installer/cli.py b/vanilla_installer/cli.py index b486cf4..ad522ed 100644 --- a/vanilla_installer/cli.py +++ b/vanilla_installer/cli.py @@ -1,10 +1,13 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. -"""A CLI interface for Vanilla Installer.""" +""" +A CLI interface for Vanilla Installer. +""" + ## Imports import asyncio -import logging +# import logging import sys import webbrowser @@ -19,7 +22,7 @@ pass from vanilla_installer import main -logging.getLogger("asyncio").setLevel(logging.DEBUG) +# logging.getLogger("asyncio").setLevel(logging.DEBUG) @click.group( diff --git a/vanilla_installer/config.py b/vanilla_installer/config.py index 9e8cd8c..2487dc3 100644 --- a/vanilla_installer/config.py +++ b/vanilla_installer/config.py @@ -1,3 +1,8 @@ +# Copyright (C) Fabulously Optimized 2023 +# Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. +""" +The Configuration System for Vanilla Installer. +""" import logging import os import platform @@ -13,7 +18,8 @@ def init(): - """Initialise the config file with the default values. + """ + Initialise the config file with the default values. This should **only** be run if the config file does not exist, as it will delete the file if it already exists, which will overwrite any user-set settings - which you don't want to do for obvious reasons. """ @@ -56,7 +62,8 @@ def init(): def read() -> dict: - """Read from the config file. + """ + Read from the config file. Returns: dict: The config file, reformatted into a dict-like format. @@ -71,7 +78,8 @@ def read() -> dict: def write(key: str, value: str) -> None: - """Write to the config file. + """ + Write to the config file. This is a mostly internal function used to write to the config file from a user interface. Args: diff --git a/vanilla_installer/gui.py b/vanilla_installer/gui.py index d7967a4..eafd62c 100644 --- a/vanilla_installer/gui.py +++ b/vanilla_installer/gui.py @@ -1,7 +1,11 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. -"""Runs the GUI for Vanilla Installer.""" +""" +Runs the GUI for Vanilla Installer. +""" + # IMPORTS +import logging import pathlib import platform import sys @@ -28,12 +32,15 @@ ) # LOCAL -from vanilla_installer import config, main, theme -from vanilla_installer.log import logger +from vanilla_installer import config, i18n, main, theme + +logger = logging.getLogger(__name__) def run() -> None: - """Runs the GUI.""" + """ + Runs the GUI. + """ global global_font if config.read()["config"]["font"]: setFont(config.read()["config"]["font"] == "OpenDyslexic") @@ -43,7 +50,7 @@ def run() -> None: from vanilla_installer import fonts except: logger.exception( - "resource file for fonts isn't generated!\nrun `pyside6-rcc vanilla_installer/assets/fonts.qrc -o vanilla_installer/fonts.py` in the root directory of the project to generate them. you might need to source the venv.\nignore this if you are running on a compiled version." + "resource file for fonts isn't generated!\nrun `pyside6-rcc vanilla_installer/assets/fonts/fonts.qrc -o vanilla_installer/fonts.py` in the root directory of the project to generate them. you might need to source the venv.\nignore this if you are running on a compiled version." ) app = QApplication(sys.argv) @@ -64,9 +71,9 @@ def setFont(opendyslexic: bool): global_font = "OpenDyslexic" else: # For some reason the Inter font on Linux is called `Inter` and on Windows it's called `Inter Regular` - # And thus, this janky solution + # And thus, this is a janky solution # I'm not sure what it's called on MacOS so hopefully it's the same as linux cause i can't test it - # Either ways it would be a better idea to move to a font that doesn't have this issue + # Either way it would be a better idea to move to a font that doesn't have this issue inter_name = "Inter" if platform.system() == "Windows": inter_name = "Inter Regular" @@ -214,6 +221,8 @@ def retranslateUi(self, MainWindow: QMainWindow) -> None: Args: MainWindow (QMainWindow): The main window. """ + # This is currently hardcoded as the actual i18n support isn't here, just the backend changes needed + i18n_strings = i18n.get_i18n_values("en_us") MainWindow.setWindowTitle( QCoreApplication.translate("MainWindow", "Vanilla Installer", None) ) @@ -221,32 +230,46 @@ def retranslateUi(self, MainWindow: QMainWindow) -> None: QCoreApplication.translate("MainWindow", "Fabulously Optimized", None) ) self.subtitle.setText( - QCoreApplication.translate("MainWindow", "Vanilla Installer", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.subtitle"], None + ) ) self.installButton.setText( - QCoreApplication.translate("MainWindow", "Install", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.install_button"], None + ) ) self.versionLabel.setText( - QCoreApplication.translate("MainWindow", "Minecraft version:", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.mc_version"], None + ) ) self.locationLabel.setText( - QCoreApplication.translate("MainWindow", "Location:", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.location"], None + ) ) self.infoButton.setText( QCoreApplication.translate("MainWindow", "GitHub", None) ) self.issuesButton.setText( - QCoreApplication.translate("MainWindow", "Report bugs", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.issues_button"], None + ) ) self.themeToggle.setText( - QCoreApplication.translate("MainWindow", "Toggle theme", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.theme_toggle"], None + ) ) self.versionHelpString = "Vanilla Installer allows easy installation of all supported versions of Fabulously Optimized. \nFor legacy versions, download the respective MultiMC version from CurseForge and unpack it manually." self.versionHelp.setToolTip( QCoreApplication.translate("MainWindow", self.versionHelpString, None) ) self.settingsButton.setText( - QCoreApplication.translate("MainWindow", "Settings", None) + QCoreApplication.translate( + "MainWindow", i18n_strings["vanilla_installer.gui.settings"], None + ) ) def reloadTheme(self) -> None: @@ -327,13 +350,16 @@ def reloadTheme(self) -> None: self.versionHelpIcon.setGraphicsEffect(effect6) def addVersions(self) -> None: - """Adds the versions to the version selector.""" + """ + Adds the versions to the version selector. + """ for version in main.get_pack_mc_versions().keys(): self.versionSelector.addItem(version) self.versionSelector.setCurrentIndex(0) def getAsset(asset: str) -> str: - """Get the path to a given asset. + """ + Get the path to a given asset. Args: asset (str): The asset to get. @@ -349,7 +375,8 @@ def toggleTheme(self) -> None: self.reloadTheme() def selectDirectory(self, parent) -> None: - """Select a directory. + """ + Select a directory. Args: parent (str): The parent window. @@ -371,12 +398,16 @@ def selectDirectory(self, parent) -> None: config.write("path", dialog.selectedFiles()[0]) def openSettings(self) -> None: - """Open the settings.""" + """ + Open the settings. + """ dialog = SettingsDialog(self) dialog.exec() def startInstall(self) -> None: - """Start the installation process.""" + """ + Start the installation process. + """ loaded_theme = theme.load() # make sure the installation process is only running once if self.installing is True: @@ -409,7 +440,8 @@ def startInstall(self) -> None: class SettingsDialog(QDialog): - """The settings dialog. + """ + The settings dialog. Args: QDialog (QDialog): The dialog. @@ -457,11 +489,14 @@ def setupUi(self) -> None: self.buttonBox.rejected.connect(self.reject) def accept(self) -> None: - """Accept Button actions""" + """ + Accept Button actions. + """ super().accept() def retranslateUi(self, Dialog) -> None: - """Retranslate UI for the set dialog. + """ + Retranslate UI for the set dialog. Args: Dialog: The dialog. @@ -470,11 +505,13 @@ def retranslateUi(self, Dialog) -> None: QCoreApplication.translate("Dialog", "Vanilla Installer Settings", None) ) self.fontDyslexicCheckbox.setText( - QCoreApplication.translate("Dialog", "Enable dyselxia friendly font", None) + QCoreApplication.translate("Dialog", "Enable dyslexia friendly font", None) ) def reloadTheme(self) -> None: - """Reload the theme.""" + """ + Reload the theme. + """ loaded_theme = theme.load() self.setStyleSheet( f'[objectName^="Dialog"] {{ background-color: {loaded_theme.get("base")}}}' @@ -493,7 +530,8 @@ def reloadTheme(self) -> None: ) def changeFont(self, state) -> None: - """Toggle font between OpenDyslexic and Inter. + """ + Toggle font between OpenDyslexic and Inter. Args: state: int, 2 implies a checked state and 0 would mean unchecked diff --git a/vanilla_installer/i18n.py b/vanilla_installer/i18n.py new file mode 100644 index 0000000..1998d3a --- /dev/null +++ b/vanilla_installer/i18n.py @@ -0,0 +1,29 @@ +"""Provides internationalization (i18n) services to the Vanilla Installer.""" +import json +import logging +from pathlib import Path + +logger = logging.getLogger(__name__) + +if Path("vanilla_installer").exists(): + # This is a development environment, being run from the root directory + lang_file_placeholder = "vanilla_installer/assets/lang/{}.json" +else: + lang_file_placeholder = "assets/lang/{}.json" + + +def get_i18n_values(language_code: str = "en_us") -> dict: + """Get the strings in the language requested. + + Args: + language (str, optional): The language code to get the strings for. Defaults to en_us, and falls back to en_us if the code given is invalid. + + Returns: + dict: The dictionary of strings for that language. + """ + lang_file = Path(lang_file_placeholder.format(language_code)).resolve() + if lang_file.exists() is False: + logger.warning("Non-existant i18n code passed, falling back to en_us.") + lang_file = Path(lang_file_placeholder.format("en_us")).resolve() + lang_json = json.load(open(lang_file)) + return lang_json diff --git a/vanilla_installer/log.py b/vanilla_installer/log.py index 2952bfd..f574f4c 100644 --- a/vanilla_installer/log.py +++ b/vanilla_installer/log.py @@ -1,6 +1,9 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. -"""Starts logging for Vanilla Installer.""" +""" +Starts logging for Vanilla Installer. +""" + import logging import logging.handlers # pylance moment import sys @@ -24,7 +27,7 @@ def flush(self): pass -logger = logging.getLogger() +logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) logfile_path = Path("./logs").resolve() / "vanilla_installer.log" if logfile_path.exists() is False: @@ -50,4 +53,4 @@ def flush(self): sys.stderr = LoggerWriter(logger.error) logging.info("Starting Vanilla Installer") -logger = logging.getLogger("Vanilla Installer") +logger = logging.getLogger(__name__) diff --git a/vanilla_installer/main.py b/vanilla_installer/main.py index c5b5503..4959a87 100644 --- a/vanilla_installer/main.py +++ b/vanilla_installer/main.py @@ -1,4 +1,4 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. """ Most important functions of Vanilla Installer. @@ -8,6 +8,7 @@ import base64 import io import json +import logging import os import platform import subprocess @@ -21,15 +22,16 @@ import tomlkit as toml # Local -from vanilla_installer import __version__, config, log +from vanilla_installer import __version__, config -logger = log.logger +logger = logging.getLogger(__name__) FOLDER_LOC = "" def set_dir(path: str = mll.utils.get_minecraft_directory()) -> str | None: - """Sets the Minecraft game directory. + """ + Sets the Minecraft game directory. Args: path (str): The path to the Minecraft game directory. @@ -40,7 +42,8 @@ def set_dir(path: str = mll.utils.get_minecraft_directory()) -> str | None: def get_dir() -> str: - """Returns the Minecraft game directory. + """ + Returns the Minecraft game directory. Returns: str: Path @@ -51,7 +54,8 @@ def get_dir() -> str: def newest_version() -> str: - """Returns the latest version of Minecraft that FO supports. + """ + Returns the latest version of Minecraft that FO supports. Returns: str: The latest Minecraft version that FO supports. @@ -60,7 +64,8 @@ def newest_version() -> str: def find_mc_java(java_ver: float = 17.3) -> str: - """Gets the path to the Java executable downloaded from the vanilla launcher. + """ + Gets the path to the Java executable downloaded from the vanilla launcher. Args: java_ver (float, optional): The Java version to find. Can be 8, 16, 17.1, or 17.3 Defaults to 17.3 and falls back to it if the integer is invalid. @@ -149,9 +154,10 @@ def find_mc_java(java_ver: float = 17.3) -> str: def get_java(java_ver: float = 17.3) -> str: - """Gets the path to a Java executable. + """ + Gets the path to a Java executable. If the user doesn't have a JRE/JDK installed on the system, it will default to the Microsoft - OpenJDK build that the vanilla launcher installs when you run Minecraft. + OpenJDK / Microsoft JDK build that the vanilla launcher installs when you run Minecraft. Args: java_ver (float, optional): The Java version to find. Can be 8, 16, 17.1 (Java 17.0.1) or 17.3 (Java 17.0.3). Defaults to 17.3, and falls back to 17.3 if the integer is invalid. @@ -166,7 +172,8 @@ def get_java(java_ver: float = 17.3) -> str: def fo_to_base64(png_dir: str = ".") -> str: - """Converts the Fabulously Optimized logo from PNG format into base64. + """ + Converts the Fabulously Optimized logo from PNG format into base64. The directory specified in `dir` will be searched. If that fails, FO logo will be downloaded over the network. Args: @@ -221,7 +228,8 @@ def get_fo_dir() -> str: def text_update( text: str, widget=None, mode: str = "info", interface: str = "GUI" ) -> None: - """Updates the text shown on the GUI window or echoes using Click. + """ + Updates the text shown on the GUI window or echoes using Click. Args: text (str): The text to display @@ -252,7 +260,8 @@ def text_update( def command(text: str) -> str: - """Runs a command with subprocess. + """ + Runs a command with subprocess. Returns: str: The output of the command. @@ -263,7 +272,8 @@ def command(text: str) -> str: def install_fabric(mc_version: str, mc_dir: str) -> str: - """Installs Fabric to the vanilla launcher. + """ + Installs Fabric to the vanilla launcher. Args: mc_version (str): The version of Minecraft to get information from FO's files for. @@ -292,7 +302,8 @@ def install_fabric(mc_version: str, mc_dir: str) -> str: def download_pack(widget, interface: str = "GUI") -> str: - """Downloads the packwiz_install_bootstrap jar. + """ + Downloads the packwiz_install_bootstrap jar. Args: interface (str, optional): The interface to pass to text_update, either "CLI" or "GUI". Defaults to "GUI". @@ -320,7 +331,8 @@ def install_pack( interface: str = "GUI", java_ver: float = 17.3, ) -> None: - """Installs Fabulously Optimized. + """ + Installs Fabulously Optimized. Args: packwiz_installer_bootstrap (str): The path to the packwiz installer bootstrap. @@ -358,7 +370,8 @@ def install_pack( def create_profile(mc_dir: str, version_id: str) -> None: - """Creates a profile in the vanilla launcher. + """ + Creates a profile in the vanilla launcher. Args: mc_dir (str): The path to the Minecraft directory. @@ -388,7 +401,9 @@ def create_profile(mc_dir: str, version_id: str) -> None: def get_pack_mc_versions() -> dict: - """Gets a list of all the versions FO currently supports.""" + """ + Gets a list of all the versions FO currently supports. + """ return_value = dict() try: @@ -416,7 +431,8 @@ def get_pack_mc_versions() -> dict: def convert_version(input_mcver: str) -> str: - """Converts a version string to the appropriate FO pack.toml + """ + Converts a version string to the appropriate FO pack.toml Args: input_mcver (str): The Minecraft version to find. @@ -439,7 +455,8 @@ def run( interface: str = "GUI", widget=None, ) -> None: - """Runs Fabric's installer and then installs Fabulously Optimized. + """ + Runs Fabric's installer and then installs Fabulously Optimized. Args: widget (optional): The widget to update. This is only used when interface is set to GUI. Defaults to None. diff --git a/vanilla_installer/theme.py b/vanilla_installer/theme.py index 5e1e728..9b6ede9 100644 --- a/vanilla_installer/theme.py +++ b/vanilla_installer/theme.py @@ -1,22 +1,25 @@ -# Copyright (C) Fabulously Optimized 2022 +# Copyright (C) Fabulously Optimized 2023 # Licensed under the MIT License. The full license text can be found at https://github.com/Fabulously-Optimized/vanilla-installer/blob/main/LICENSE.md. """ Theme & design of the PySide6 GUI. """ +import logging import pathlib from typing import Optional import darkdetect from vanilla_installer import config -from vanilla_installer.log import logger + +logger = logging.getLogger(__name__) FILE = str(pathlib.Path("data/theme.txt").resolve()) def is_dark(to_dark: Optional[bool] = None) -> str: - """Change or get the status of dark mode. + """ + Change or get the status of dark mode. Args: to_dark (bool, optional): Status. Defaults to None (just get status, without editing it). @@ -74,7 +77,8 @@ def is_dark(to_dark: Optional[bool] = None) -> str: def load() -> dict: - """Returns the current theme dictionary. + """ + Returns the current theme dictionary. Returns: dict: The colors palette. @@ -83,7 +87,9 @@ def load() -> dict: def toggle() -> None: - """Switches between dark and light theme.""" + """ + Switches between dark and light theme. + """ is_dark(is_dark() != "dark")