mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-28 18:02:38 +02:00
Merge 8471d09312
into a910ccc273
This commit is contained in:
commit
834232f26c
24 changed files with 1366 additions and 1764 deletions
14
.github/workflows/build.yml
vendored
14
.github/workflows/build.yml
vendored
|
@ -87,12 +87,20 @@ jobs:
|
||||||
id: cache-container-image
|
id: cache-container-image
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py') }}
|
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py', "uv.lock") }}
|
||||||
path: |
|
path: |
|
||||||
share/container.tar
|
share/container.tar
|
||||||
share/image-id.txt
|
share/image-id.txt
|
||||||
|
|
||||||
- name: Build Dangerzone image
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
|
- name: Build and push Dangerzone image
|
||||||
if: ${{ steps.cache-container-image.outputs.cache-hit != 'true' }}
|
if: ${{ steps.cache-container-image.outputs.cache-hit != 'true' }}
|
||||||
run: |
|
run: |
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
|
echo ${{ github.token }} | podman login ghcr.io -u USERNAME --password-stdin
|
||||||
|
gunzip -c share/container.tar.gz | podman load
|
||||||
|
tag=$(cat share/image-id.txt)
|
||||||
|
podman push \
|
||||||
|
dangerzone.rocks/dangerzone:$tag \
|
||||||
|
${{ env.IMAGE_REGISTRY }}/dangerzone/dangerzone:tag
|
||||||
|
|
43
.github/workflows/ci.yml
vendored
43
.github/workflows/ci.yml
vendored
|
@ -32,13 +32,16 @@ jobs:
|
||||||
image: debian:bookworm
|
image: debian:bookworm
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
- name: Install dev. dependencies
|
- name: Install dev. dependencies
|
||||||
run: |-
|
run: |-
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y git make python3 python3-poetry --no-install-recommends
|
apt-get install -y git make python3 --no-install-recommends
|
||||||
poetry install --only lint,test
|
uv sync --only-group test --only-group lint
|
||||||
- name: Run linters to enforce code style
|
- name: Run linters to enforce code style
|
||||||
run: poetry run make lint
|
run: uv run make lint
|
||||||
- name: Check that the QA script is up to date with the docs
|
- name: Check that the QA script is up to date with the docs
|
||||||
run: "./dev_scripts/qa.py --check-refs"
|
run: "./dev_scripts/qa.py --check-refs"
|
||||||
|
|
||||||
|
@ -59,15 +62,18 @@ jobs:
|
||||||
id: cache-container-image
|
id: cache-container-image
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py') }}
|
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py', "uv.lock") }}
|
||||||
path: |-
|
path: |-
|
||||||
share/container.tar
|
share/container.tar
|
||||||
share/image-id.txt
|
share/image-id.txt
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
|
|
||||||
- name: Build Dangerzone container image
|
- name: Build Dangerzone container image
|
||||||
if: ${{ steps.cache-container-image.outputs.cache-hit != 'true' }}
|
if: ${{ steps.cache-container-image.outputs.cache-hit != 'true' }}
|
||||||
run: |
|
run: |
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
|
|
||||||
- name: Upload container image
|
- name: Upload container image
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
@ -109,8 +115,9 @@ jobs:
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
- run: pip install poetry
|
- name: Install uv
|
||||||
- run: poetry install
|
uses: astral-sh/setup-uv@v5
|
||||||
|
- run: uv sync --group test --group package
|
||||||
- name: Restore cached tessdata
|
- name: Restore cached tessdata
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@v4
|
||||||
with:
|
with:
|
||||||
|
@ -119,7 +126,7 @@ jobs:
|
||||||
fail-on-cache-miss: true
|
fail-on-cache-miss: true
|
||||||
key: v1-tessdata-${{ hashFiles('./install/common/download-tessdata.py') }}
|
key: v1-tessdata-${{ hashFiles('./install/common/download-tessdata.py') }}
|
||||||
- name: Run CLI tests
|
- name: Run CLI tests
|
||||||
run: poetry run make test
|
run: uv run make test
|
||||||
- name: Set up .NET CLI environment
|
- name: Set up .NET CLI environment
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v4
|
||||||
with:
|
with:
|
||||||
|
@ -130,7 +137,7 @@ jobs:
|
||||||
run: wix extension add --global WixToolset.UI.wixext/5.0.2
|
run: wix extension add --global WixToolset.UI.wixext/5.0.2
|
||||||
- name: Build the MSI installer
|
- name: Build the MSI installer
|
||||||
# NOTE: This also builds the .exe internally.
|
# NOTE: This also builds the .exe internally.
|
||||||
run: poetry run .\install\windows\build-app.bat
|
run: uv run .\install\windows\build-app.bat
|
||||||
- name: Upload MSI installer
|
- name: Upload MSI installer
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
@ -165,12 +172,13 @@ jobs:
|
||||||
enableCrossOsArchive: true
|
enableCrossOsArchive: true
|
||||||
fail-on-cache-miss: true
|
fail-on-cache-miss: true
|
||||||
key: v1-tessdata-${{ hashFiles('./install/common/download-tessdata.py') }}
|
key: v1-tessdata-${{ hashFiles('./install/common/download-tessdata.py') }}
|
||||||
- run: pip install poetry
|
|
||||||
- run: poetry install
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
- name: Run CLI tests
|
- name: Run CLI tests
|
||||||
run: poetry run make test
|
run: uv run --group test --group package make test
|
||||||
- name: Build macOS app
|
- name: Build macOS app
|
||||||
run: poetry run python ./install/macos/build-app.py
|
run: uv run --group package ./install/macos/build-app.py
|
||||||
- name: Upload macOS app
|
- name: Upload macOS app
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
@ -226,7 +234,7 @@ jobs:
|
||||||
- name: Restore container cache
|
- name: Restore container cache
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@v4
|
||||||
with:
|
with:
|
||||||
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py') }}
|
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py', 'uv.lock') }}
|
||||||
path: |-
|
path: |-
|
||||||
share/container.tar
|
share/container.tar
|
||||||
share/image-id.txt
|
share/image-id.txt
|
||||||
|
@ -333,7 +341,7 @@ jobs:
|
||||||
- name: Restore container image
|
- name: Restore container image
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@v4
|
||||||
with:
|
with:
|
||||||
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py') }}
|
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py', 'uv.lock') }}
|
||||||
path: |-
|
path: |-
|
||||||
share/container.tar
|
share/container.tar
|
||||||
share/image-id.txt
|
share/image-id.txt
|
||||||
|
@ -430,7 +438,7 @@ jobs:
|
||||||
- name: Restore container image
|
- name: Restore container image
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@v4
|
||||||
with:
|
with:
|
||||||
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py') }}
|
key: v5-${{ steps.date.outputs.date }}-${{ hashFiles('Dockerfile', 'dangerzone/conversion/*.py', 'dangerzone/container_helpers/*', 'install/common/build-image.py', 'uv.lock') }}
|
||||||
path: |-
|
path: |-
|
||||||
share/container.tar
|
share/container.tar
|
||||||
share/image-id.txt
|
share/image-id.txt
|
||||||
|
@ -471,8 +479,7 @@ jobs:
|
||||||
# protocol specified". However, we have verified with strace(1)
|
# protocol specified". However, we have verified with strace(1)
|
||||||
# that the command in the Podman container can read the Xauthority
|
# that the command in the Podman container can read the Xauthority
|
||||||
# file successfully.
|
# file successfully.
|
||||||
xvfb-run -s '-ac' ./dev_scripts/env.py --distro ${{ matrix.distro }} --version ${{ matrix.version }} run --dev \
|
xvfb-run -s '-ac' ./dev_scripts/env.py --distro ${{ matrix.distro }} --version ${{ matrix.version }} run --dev \ bash -c 'cd dangerzone; uv run --group test make test'
|
||||||
bash -c 'cd dangerzone; poetry run make test'
|
|
||||||
|
|
||||||
- name: Upload PDF diffs
|
- name: Upload PDF diffs
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
|
4
.github/workflows/scan.yml
vendored
4
.github/workflows/scan.yml
vendored
|
@ -21,9 +21,11 @@ jobs:
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
- name: Install container build dependencies
|
||||||
|
run: sudo apt install pipx && pipx install uv
|
||||||
- name: Build container image
|
- name: Build container image
|
||||||
run: |
|
run: |
|
||||||
python3 ./install/common/build-image.py \
|
uv run ./install/common/build-image.py \
|
||||||
--debian-archive-date $(date "+%Y%m%d") \
|
--debian-archive-date $(date "+%Y%m%d") \
|
||||||
--runtime docker
|
--runtime docker
|
||||||
docker load -i share/container.tar
|
docker load -i share/container.tar
|
||||||
|
|
122
BUILD.md
122
BUILD.md
|
@ -39,18 +39,17 @@ sudo apt install -y podman dh-python build-essential make libqt6gui6 \
|
||||||
pipx python3 python3-dev
|
pipx python3 python3-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Install Poetry using `pipx` (recommended) and add it to your `$PATH`:
|
Install uv using `pipx` (recommended) and add it to your `$PATH`:
|
||||||
|
|
||||||
_(See also a list of [alternative installation
|
_(See also a list of [alternative installation
|
||||||
methods](https://python-poetry.org/docs/#installation))_
|
methods](https://docs.astral.sh/uv/getting-started/installation/))_
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pipx ensurepath
|
pipx ensurepath
|
||||||
pipx install poetry
|
pipx install uv
|
||||||
pipx inject poetry poetry-plugin-export
|
|
||||||
```
|
```
|
||||||
|
|
||||||
After this, restart the terminal window, for the `poetry` command to be in your
|
After this, restart the terminal window, for the `uv` command to be in your
|
||||||
`$PATH`.
|
`$PATH`.
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,44 +59,39 @@ Clone this repository:
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the dependencies:
|
||||||
|
|
||||||
> **Note**: due to an issue with [poetry](https://github.com/python-poetry/poetry/issues/1917), if it prompts for your keyring, disable the keyring with `keyring --disable` and run the command again.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the latest container:
|
Build the latest container:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the OCR language data:
|
Download the OCR language data:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/download-tessdata.py
|
uv run ./install/common/download-tessdata.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Run from source tree:
|
Run from source tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
./dev_scripts/dangerzone-cli --help
|
uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
./dev_scripts/dangerzone
|
uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
Create a .deb:
|
Create a .deb:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./install/linux/build-deb.py
|
uv run ./install/linux/build-deb.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Fedora
|
## Fedora
|
||||||
|
@ -105,15 +99,36 @@ Create a .deb:
|
||||||
Install dependencies:
|
Install dependencies:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo dnf install -y rpm-build podman python3 python3-devel python3-poetry-core \
|
sudo dnf install -y rpm-build podman python3 python3-devel python3-uv \
|
||||||
pipx qt6-qtbase-gui
|
pipx qt6-qtbase-gui
|
||||||
```
|
```
|
||||||
|
|
||||||
Install Poetry using `pipx`:
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<details>
|
||||||
|
<summary><i>:memo: Expand this section if you are on Fedora 41.</i></summary>
|
||||||
|
</br>
|
||||||
|
|
||||||
|
The default Python version that ships with Fedora 41 (3.13) is not
|
||||||
|
compatible with PySide6, which requires Python 3.12 or earlier.
|
||||||
|
|
||||||
|
You can install Python 3.12 using the `python3.12` package.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf install -y python3.12
|
||||||
|
```
|
||||||
|
|
||||||
|
uv will automatically pick up the correct version when running.
|
||||||
|
</details>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Install uv using `pipx`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pipx install poetry
|
pipx install uv
|
||||||
pipx inject poetry poetry-plugin-export
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Clone this repository:
|
Clone this repository:
|
||||||
|
@ -122,38 +137,33 @@ Clone this repository:
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the `uv` dependencies:
|
||||||
|
|
||||||
> **Note**: due to an issue with [poetry](https://github.com/python-poetry/poetry/issues/1917), if it prompts for your keyring, disable the keyring with `keyring --disable` and run the command again.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the latest container:
|
Build the latest container:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the OCR language data:
|
Download the OCR language data:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/download-tessdata.py
|
uv run ./install/common/download-tessdata.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Run from source tree:
|
Run from source tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
./dev_scripts/dangerzone-cli --help
|
uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
./dev_scripts/dangerzone
|
uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
|
@ -163,7 +173,7 @@ poetry shell
|
||||||
Create a .rpm:
|
Create a .rpm:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./install/linux/build-rpm.py
|
uv run ./install/linux/build-rpm.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Qubes OS
|
## Qubes OS
|
||||||
|
@ -285,10 +295,10 @@ you wish to test the Qubes conversion, run the following commands on the `dz` de
|
||||||
```sh
|
```sh
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
QUBES_CONVERSION=1 poetry run ./dev_scripts/dangerzone-cli --help
|
QUBES_CONVERSION=1 uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
QUBES_CONVERSION=1 poetry run ./dev_scripts/dangerzone
|
QUBES_CONVERSION=1 uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
And when creating a `.rpm` you'll need to enable the `--qubes` flag.
|
And when creating a `.rpm` you'll need to enable the `--qubes` flag.
|
||||||
|
@ -326,8 +336,8 @@ cd dangerzone
|
||||||
Install Python dependencies:
|
Install Python dependencies:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 -m pip install poetry poetry-plugin-export
|
python3 -m pip install uv
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Install [Homebrew](https://brew.sh/) dependencies:
|
Install [Homebrew](https://brew.sh/) dependencies:
|
||||||
|
@ -339,38 +349,35 @@ brew install create-dmg
|
||||||
Build the dangerzone container image:
|
Build the dangerzone container image:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the OCR language data:
|
Download the OCR language data:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/download-tessdata.py
|
uv run ./install/common/download-tessdata.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Run from source tree:
|
Run from source tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
./dev_scripts/dangerzone-cli --help
|
uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
./dev_scripts/dangerzone
|
uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
To create an app bundle, use the `build_app.py` script:
|
To create an app bundle, use the `build_app.py` script:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
poetry run ./install/macos/build-app.py
|
uv run ./install/macos/build-app.py
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to build for distribution, you'll need a codesigning certificate, and then run:
|
If you want to build for distribution, you'll need a codesigning certificate, and then run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
poetry run ./install/macos/build-app.py --with-codesign
|
uv run ./install/macos/build-app.py --with-codesign
|
||||||
```
|
```
|
||||||
|
|
||||||
The output is in the `dist` folder.
|
The output is in the `dist` folder.
|
||||||
|
@ -384,10 +391,10 @@ Install the latest version of Python 3.12 (64-bit) [from python.org](https://www
|
||||||
|
|
||||||
Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build Tools"](https://visualstudio.microsoft.com/visual-cpp-build-tools/) and make sure to select "Desktop development with C++" when installing.
|
Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build Tools"](https://visualstudio.microsoft.com/visual-cpp-build-tools/) and make sure to select "Desktop development with C++" when installing.
|
||||||
|
|
||||||
Install [poetry](https://python-poetry.org/). Open PowerShell, and run:
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/). Open PowerShell, and run:
|
||||||
|
|
||||||
```
|
```
|
||||||
python -m pip install poetry poetry-plugin-export
|
python -m pip install uv
|
||||||
```
|
```
|
||||||
|
|
||||||
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:
|
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:
|
||||||
|
@ -396,36 +403,33 @@ Install git from [here](https://git-scm.com/download/win), open a Windows termin
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the `uv` dependencies:
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the dangerzone container image:
|
Build the dangerzone container image:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 .\install\common\build-image.py
|
uv run .\install\common\build-image.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the OCR language data:
|
Download the OCR language data:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 .\install\common\download-tessdata.py
|
uv run .\install\common\download-tessdata.py
|
||||||
```
|
```
|
||||||
|
|
||||||
After that you can launch dangerzone during development with:
|
After that you can launch dangerzone during development with:
|
||||||
|
|
||||||
```
|
```
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
.\dev_scripts\dangerzone-cli.bat --help
|
uv run .\dev_scripts\dangerzone-cli.bat --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
.\dev_scripts\dangerzone.bat
|
uv run .\dev_scripts\dangerzone.bat
|
||||||
```
|
```
|
||||||
|
|
||||||
### If you want to build the Windows installer
|
### If you want to build the Windows installer
|
||||||
|
@ -456,7 +460,7 @@ You'll need a code signing certificate.
|
||||||
Open a command prompt, cd into the dangerzone directory, and run:
|
Open a command prompt, cd into the dangerzone directory, and run:
|
||||||
|
|
||||||
```
|
```
|
||||||
poetry run python .\setup-windows.py build
|
uv run .\setup-windows.py build
|
||||||
```
|
```
|
||||||
|
|
||||||
In `build\exe.win32-3.12\` you will find `dangerzone.exe`, `dangerzone-cli.exe`, and all supporting files.
|
In `build\exe.win32-3.12\` you will find `dangerzone.exe`, `dangerzone-cli.exe`, and all supporting files.
|
||||||
|
@ -466,7 +470,7 @@ In `build\exe.win32-3.12\` you will find `dangerzone.exe`, `dangerzone-cli.exe`,
|
||||||
Note that you must have a codesigning certificate installed in order to use the `install\windows\build-app.bat` script, because it codesigns `dangerzone.exe`, `dangerzone-cli.exe` and `Dangerzone.msi`.
|
Note that you must have a codesigning certificate installed in order to use the `install\windows\build-app.bat` script, because it codesigns `dangerzone.exe`, `dangerzone-cli.exe` and `Dangerzone.msi`.
|
||||||
|
|
||||||
```
|
```
|
||||||
poetry run .\install\windows\build-app.bat
|
uv run .\install\windows\build-app.bat
|
||||||
```
|
```
|
||||||
|
|
||||||
When you're done you will have `dist\Dangerzone.msi`.
|
When you're done you will have `dist\Dangerzone.msi`.
|
||||||
|
|
|
@ -16,6 +16,10 @@ since 0.4.1, and this project adheres to [Semantic Versioning](https://semver.or
|
||||||
- Document Operating System support [#986](https://github.com/freedomofpress/dangerzone/issues/986)
|
- Document Operating System support [#986](https://github.com/freedomofpress/dangerzone/issues/986)
|
||||||
- Tests: Look for regressions when converting PDFs [#321](https://github.com/freedomofpress/dangerzone/issues/321)
|
- Tests: Look for regressions when converting PDFs [#321](https://github.com/freedomofpress/dangerzone/issues/321)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Use `uv` instead of `poetry`
|
||||||
|
|
||||||
## [0.8.1](https://github.com/freedomofpress/dangerzone/compare/v0.8.1...0.8.0)
|
## [0.8.1](https://github.com/freedomofpress/dangerzone/compare/v0.8.1...0.8.0)
|
||||||
|
|
||||||
- Update the container image
|
- Update the container image
|
||||||
|
|
|
@ -185,8 +185,8 @@ RUN mkdir -p \
|
||||||
# Copy the /etc and /var directories under the new root directory. Also,
|
# Copy the /etc and /var directories under the new root directory. Also,
|
||||||
# copy /etc/, /opt, and /usr to the Dangerzone image rootfs.
|
# copy /etc/, /opt, and /usr to the Dangerzone image rootfs.
|
||||||
#
|
#
|
||||||
# NOTE: We also have to remove the resolv.conf file, in order to not leak any DNS
|
# NOTE: We also have to remove the resolv.conf file, in order to not leak any
|
||||||
# servers added there during image build time.
|
# DNS servers added there during image build time.
|
||||||
RUN cp -r /etc /var /new_root/ \
|
RUN cp -r /etc /var /new_root/ \
|
||||||
&& rm /new_root/etc/resolv.conf
|
&& rm /new_root/etc/resolv.conf
|
||||||
RUN cp -r /etc /opt /usr /new_root/home/dangerzone/dangerzone-image/rootfs \
|
RUN cp -r /etc /opt /usr /new_root/home/dangerzone/dangerzone-image/rootfs \
|
||||||
|
|
5
Makefile
5
Makefile
|
@ -19,7 +19,7 @@ lint: ## Check the code for linting, formatting, and typing issues with ruff and
|
||||||
.PHONY: fix
|
.PHONY: fix
|
||||||
fix: ## apply all the suggestions from ruff
|
fix: ## apply all the suggestions from ruff
|
||||||
ruff check --fix
|
ruff check --fix
|
||||||
ruff format
|
ruff format .
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test:
|
||||||
|
@ -42,13 +42,14 @@ test-large-init: test-large-requirements
|
||||||
cd $(LARGE_TEST_REPO_DIR) && $(MAKE) clone-docs
|
cd $(LARGE_TEST_REPO_DIR) && $(MAKE) clone-docs
|
||||||
|
|
||||||
TEST_LARGE_RESULTS:=$(LARGE_TEST_REPO_DIR)/results/junit/commit_$(GIT_DESC).junit.xml
|
TEST_LARGE_RESULTS:=$(LARGE_TEST_REPO_DIR)/results/junit/commit_$(GIT_DESC).junit.xml
|
||||||
|
|
||||||
.PHONY: test-large
|
.PHONY: test-large
|
||||||
test-large: test-large-init ## Run large test set
|
test-large: test-large-init ## Run large test set
|
||||||
python -m pytest --tb=no tests/test_large_set.py::TestLargeSet -v $(JUNIT_FLAGS) --junitxml=$(TEST_LARGE_RESULTS)
|
python -m pytest --tb=no tests/test_large_set.py::TestLargeSet -v $(JUNIT_FLAGS) --junitxml=$(TEST_LARGE_RESULTS)
|
||||||
python $(TEST_LARGE_RESULTS)/report.py $(TEST_LARGE_RESULTS)
|
python $(TEST_LARGE_RESULTS)/report.py $(TEST_LARGE_RESULTS)
|
||||||
|
|
||||||
Dockerfile: Dockerfile.env Dockerfile.in
|
Dockerfile: Dockerfile.env Dockerfile.in
|
||||||
poetry run jinja2 Dockerfile.in Dockerfile.env > Dockerfile
|
uv run --group package jinja2 Dockerfile.in Dockerfile.env > Dockerfile
|
||||||
|
|
||||||
.PHONY: build-clean
|
.PHONY: build-clean
|
||||||
build-clean:
|
build-clean:
|
||||||
|
|
14
QA.md
14
QA.md
|
@ -16,14 +16,14 @@ It can run the tasks for you, pausing when it needs manual intervention.
|
||||||
You can run it with a command like:
|
You can run it with a command like:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run ./dev_scripts/qa.py {distro}-{version}
|
uv run ./dev_scripts/qa.py {distro}-{version}
|
||||||
```
|
```
|
||||||
|
|
||||||
### The checklist
|
### The checklist
|
||||||
|
|
||||||
- [ ] Create a test build in Windows and make sure it works:
|
- [ ] Create a test build in Windows and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -32,7 +32,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in macOS (Intel CPU) and make sure it works:
|
- [ ] Create a test build in macOS (Intel CPU) and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -41,7 +41,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in macOS (M1/2 CPU) and make sure it works:
|
- [ ] Create a test build in macOS (M1/2 CPU) and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -50,7 +50,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Ubuntu LTS platform (Ubuntu 24.04
|
- [ ] Create a test build in the most recent Ubuntu LTS platform (Ubuntu 24.04
|
||||||
as of writing this) and make sure it works:
|
as of writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -59,7 +59,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Fedora platform (Fedora 41 as of
|
- [ ] Create a test build in the most recent Fedora platform (Fedora 41 as of
|
||||||
writing this) and make sure it works:
|
writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -68,7 +68,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Qubes Fedora template (Fedora 40 as
|
- [ ] Create a test build in the most recent Qubes Fedora template (Fedora 40 as
|
||||||
of writing this) and make sure it works:
|
of writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Run the Dangerzone tests.
|
- [ ] Run the Dangerzone tests.
|
||||||
- [ ] Create a Qubes .rpm package and install it system-wide.
|
- [ ] Create a Qubes .rpm package and install it system-wide.
|
||||||
- [ ] Ensure that the Dangerzone application appears in the "Applications"
|
- [ ] Ensure that the Dangerzone application appears in the "Applications"
|
||||||
|
|
43
RELEASE.md
43
RELEASE.md
|
@ -7,9 +7,9 @@ This section documents how we currently release Dangerzone for the different dis
|
||||||
Here is a list of tasks that should be done before issuing the release:
|
Here is a list of tasks that should be done before issuing the release:
|
||||||
|
|
||||||
- [ ] Create a new issue named **QA and Release for version \<VERSION\>**, to track the general progress.
|
- [ ] Create a new issue named **QA and Release for version \<VERSION\>**, to track the general progress.
|
||||||
You can generate its content with the the `poetry run ./dev_scripts/generate-release-tasks.py` command.
|
You can generate its content with the the `uv run ./dev_scripts/generate-release-tasks.py` command.
|
||||||
- [ ] [Add new Linux platforms and remove obsolete ones](https://github.com/freedomofpress/dangerzone/blob/main/RELEASE.md#add-new-linux-platforms-and-remove-obsolete-ones)
|
- [ ] [Add new Linux platforms and remove obsolete ones](https://github.com/freedomofpress/dangerzone/blob/main/RELEASE.md#add-new-platforms-and-remove-obsolete-ones)
|
||||||
- [ ] Bump the Python dependencies using `poetry lock`
|
- [ ] Bump the Python dependencies using `uv lock`
|
||||||
- [ ] Check for new [WiX releases](https://github.com/wixtoolset/wix/releases) and update it if needed
|
- [ ] Check for new [WiX releases](https://github.com/wixtoolset/wix/releases) and update it if needed
|
||||||
- [ ] Update `version` in `pyproject.toml`
|
- [ ] Update `version` in `pyproject.toml`
|
||||||
- [ ] Update `share/version.txt`
|
- [ ] Update `share/version.txt`
|
||||||
|
@ -121,11 +121,11 @@ Here is what you need to do:
|
||||||
```bash
|
```bash
|
||||||
|
|
||||||
# In case of a new Python installation or minor version upgrade, e.g., from
|
# In case of a new Python installation or minor version upgrade, e.g., from
|
||||||
# 3.11 to 3.12, reinstall Poetry
|
# 3.11 to 3.12, reinstall uv
|
||||||
python3 -m pip install poetry poetry-plugin-export
|
python3 -m pip install uv
|
||||||
|
|
||||||
# You can verify the correct Python version is used
|
# You can verify the correct Python version is used
|
||||||
poetry debug info
|
uv python find
|
||||||
|
|
||||||
# Replace with the actual version
|
# Replace with the actual version
|
||||||
export DZ_VERSION=$(cat share/version.txt)
|
export DZ_VERSION=$(cat share/version.txt)
|
||||||
|
@ -136,18 +136,15 @@ Here is what you need to do:
|
||||||
# Clean the git repository
|
# Clean the git repository
|
||||||
git clean -df
|
git clean -df
|
||||||
|
|
||||||
# Clean up the environment
|
|
||||||
poetry env remove --all
|
|
||||||
|
|
||||||
# Install the dependencies
|
# Install the dependencies
|
||||||
poetry install --sync
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Build the container image and the OCR language data
|
- [ ] Build the container image and the OCR language data
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
poetry run ./install/common/download-tessdata.py
|
uv run ./install/common/download-tessdata.py
|
||||||
|
|
||||||
# Copy the container image to the assets folder
|
# Copy the container image to the assets folder
|
||||||
cp share/container.tar ~dz/release-assets/$VERSION/dangerzone-$VERSION-arm64.tar
|
cp share/container.tar ~dz/release-assets/$VERSION/dangerzone-$VERSION-arm64.tar
|
||||||
|
@ -157,7 +154,7 @@ Here is what you need to do:
|
||||||
- [ ] Build the app bundle
|
- [ ] Build the app bundle
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run ./install/macos/build-app.py
|
uv run ./install/macos/build-app.py
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Sign the application bundle, and notarize it
|
- [ ] Sign the application bundle, and notarize it
|
||||||
|
@ -170,7 +167,7 @@ Here is what you need to do:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Sign the .App and make it a .dmg
|
# Sign the .App and make it a .dmg
|
||||||
poetry run ./install/macos/build-app.py --only-codesign
|
uv run ./install/macos/build-app.py --only-codesign
|
||||||
|
|
||||||
# Notarize it. You must run this command from the MacOS UI
|
# Notarize it. You must run this command from the MacOS UI
|
||||||
# from a terminal application.
|
# from a terminal application.
|
||||||
|
@ -203,11 +200,11 @@ The Windows release is performed in a Windows 11 virtual machine (as opposed to
|
||||||
- [ ] Checkout the dependencies, and clean your local copy:
|
- [ ] Checkout the dependencies, and clean your local copy:
|
||||||
```bash
|
```bash
|
||||||
# In case of a new Python installation or minor version upgrade, e.g., from
|
# In case of a new Python installation or minor version upgrade, e.g., from
|
||||||
# 3.11 to 3.12, reinstall Poetry
|
# 3.11 to 3.12, reinstall uv
|
||||||
python3 -m pip install poetry poetry-plugin-export
|
python3 -m pip install uv
|
||||||
|
|
||||||
# You can verify the correct Python version is used
|
# You can verify the correct Python version is used
|
||||||
poetry debug info
|
uv python find
|
||||||
|
|
||||||
# Replace with the actual version
|
# Replace with the actual version
|
||||||
export DZ_VERSION=$(cat share/version.txt)
|
export DZ_VERSION=$(cat share/version.txt)
|
||||||
|
@ -219,16 +216,16 @@ The Windows release is performed in a Windows 11 virtual machine (as opposed to
|
||||||
git clean -df
|
git clean -df
|
||||||
|
|
||||||
# Clean up the environment
|
# Clean up the environment
|
||||||
poetry env remove --all
|
uv env remove --all
|
||||||
|
|
||||||
# Install the dependencies
|
# Install the dependencies
|
||||||
poetry install --sync
|
uv install --sync
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Copy the container image into the VM
|
- [ ] Copy the container image into the VM
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> Instead of running `python .\install\windows\build-image.py` in the VM, run the build image script on the host (making sure to build for `linux/amd64`). Copy `share/container.tar` and `share/image-id.txt` from the host into the `share` folder in the VM.
|
> Instead of running `python .\install\windows\build-image.py` in the VM, run the build image script on the host (making sure to build for `linux/amd64`). Copy `share/container.tar.gz` and `share/image-id.txt` from the host into the `share` folder in the VM.
|
||||||
- [ ] Run `poetry run .\install\windows\build-app.bat`
|
- [ ] Run `uv run .\install\windows\build-app.bat`
|
||||||
- [ ] When you're done you will have `dist\Dangerzone.msi`
|
- [ ] When you're done you will have `dist\Dangerzone.msi`
|
||||||
|
|
||||||
Rename `Dangerzone.msi` to `Dangerzone-$VERSION.msi`.
|
Rename `Dangerzone.msi` to `Dangerzone-$VERSION.msi`.
|
||||||
|
@ -262,7 +259,7 @@ or create your own locally with:
|
||||||
./dev_scripts/env.py --distro debian --version bookworm run --dev bash
|
./dev_scripts/env.py --distro debian --version bookworm run --dev bash
|
||||||
|
|
||||||
# Build the latest container
|
# Build the latest container
|
||||||
./dev_scripts/env.py --distro debian --version bookworm run --dev bash -c "cd dangerzone && poetry run ./install/common/build-image.py"
|
./dev_scripts/env.py --distro debian --version bookworm run --dev bash -c "cd dangerzone && uv run ./install/common/build-image.py"
|
||||||
|
|
||||||
# Create a .deb
|
# Create a .deb
|
||||||
./dev_scripts/env.py --distro debian --version bookworm run --dev bash -c "cd dangerzone && ./install/linux/build-deb.py"
|
./dev_scripts/env.py --distro debian --version bookworm run --dev bash -c "cd dangerzone && ./install/linux/build-deb.py"
|
||||||
|
@ -286,7 +283,7 @@ or create your own locally with:
|
||||||
./dev_scripts/env.py --distro fedora --version 41 build-dev
|
./dev_scripts/env.py --distro fedora --version 41 build-dev
|
||||||
|
|
||||||
# Build the latest container (skip if already built):
|
# Build the latest container (skip if already built):
|
||||||
./dev_scripts/env.py --distro fedora --version 41 run --dev bash -c "cd dangerzone && poetry run ./install/common/build-image.py"
|
./dev_scripts/env.py --distro fedora --version 41 run --dev bash -c "cd dangerzone && uv run ./install/common/build-image.py"
|
||||||
|
|
||||||
# Create a .rpm:
|
# Create a .rpm:
|
||||||
./dev_scripts/env.py --distro fedora --version 41 run --dev bash -c "cd dangerzone && ./install/linux/build-rpm.py"
|
./dev_scripts/env.py --distro fedora --version 41 run --dev bash -c "cd dangerzone && ./install/linux/build-rpm.py"
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
set DANGERZONE_MODE=cli
|
set DANGERZONE_MODE=cli
|
||||||
poetry run python .\dev_scripts\dangerzone %*
|
uv run .\dev_scripts\dangerzone %*
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
set DANGERZONE_MODE=gui
|
set DANGERZONE_MODE=gui
|
||||||
poetry run python .\dev_scripts\dangerzone %*
|
uv run .\dev_scripts\dangerzone %*
|
||||||
|
|
|
@ -52,7 +52,7 @@ Run Dangerzone in the development environment:
|
||||||
|
|
||||||
env.py --distro ubuntu --version 22.04 run --dev bash
|
env.py --distro ubuntu --version 22.04 run --dev bash
|
||||||
user@dangerzone-dev:~$ cd dangerzone/
|
user@dangerzone-dev:~$ cd dangerzone/
|
||||||
user@dangerzone-dev:~$ poetry run ./dev_scripts/dangerzone
|
user@dangerzone-dev:~$ uv run ./dev_scripts/dangerzone
|
||||||
|
|
||||||
Run Dangerzone in the end-user environment:
|
Run Dangerzone in the end-user environment:
|
||||||
|
|
||||||
|
@ -98,16 +98,23 @@ RUN apt-get update \
|
||||||
git {qt_deps} pipx python3 python3-pip python3-venv dpkg-dev debhelper python3-setuptools \
|
git {qt_deps} pipx python3 python3-pip python3-venv dpkg-dev debhelper python3-setuptools \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
RUN pipx install poetry
|
# installing the latest version, we sidestep this issue.
|
||||||
|
RUN bash -c 'if [[ "$(pipx --version)" < "1" ]]; then \
|
||||||
|
apt-get update \
|
||||||
|
&& apt-get remove -y pipx \
|
||||||
|
&& apt-get install -y --no-install-recommends python3-pip \
|
||||||
|
&& pip install pipx \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*; \
|
||||||
|
else true; fi'
|
||||||
|
RUN pipx install uv
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends mupdf thunar \
|
&& apt-get install -y --no-install-recommends mupdf thunar \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# FIXME: Install Poetry on Fedora via package manager.
|
|
||||||
DOCKERFILE_BUILD_DEV_FEDORA_DEPS = r"""
|
DOCKERFILE_BUILD_DEV_FEDORA_DEPS = r"""
|
||||||
RUN dnf install -y git rpm-build podman python3 python3-devel python3-poetry-core \
|
RUN dnf install -y git rpm-build podman python3 python3-devel uv \
|
||||||
pipx make qt6-qtbase-gui gcc gcc-c++\
|
make qt6-qtbase-gui python3-hatchling pipx gcc gcc-c++\
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# FIXME: Drop this fix after it's resolved upstream.
|
# FIXME: Drop this fix after it's resolved upstream.
|
||||||
|
@ -145,15 +152,13 @@ VOLUME /home/user/dangerzone
|
||||||
RUN mkdir -p /home/user/.config/containers
|
RUN mkdir -p /home/user/.config/containers
|
||||||
COPY storage.conf /home/user/.config/containers
|
COPY storage.conf /home/user/.config/containers
|
||||||
|
|
||||||
# Install Poetry under ~/.local/bin.
|
# Install uv under ~/.local/bin.
|
||||||
# See https://github.com/freedomofpress/dangerzone/issues/351
|
|
||||||
# FIXME: pipx install poetry does not work for Ubuntu Focal.
|
|
||||||
ENV PATH="$PATH:/home/user/.local/bin"
|
ENV PATH="$PATH:/home/user/.local/bin"
|
||||||
RUN pipx install poetry
|
|
||||||
RUN pipx inject poetry poetry-plugin-export
|
|
||||||
|
|
||||||
COPY pyproject.toml poetry.lock /home/user/dangerzone/
|
COPY pyproject.toml uv.lock /home/user/dangerzone/
|
||||||
RUN cd /home/user/dangerzone && poetry --no-ansi install
|
RUN uv venv /home/user/.venv
|
||||||
|
ENV UV_PROJECT_ENVIRONMENT="/home/user/.venv"
|
||||||
|
RUN cd /home/user/dangerzone && uv sync
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DOCKERFILE_BUILD_DEBIAN_DEPS = r"""
|
DOCKERFILE_BUILD_DEBIAN_DEPS = r"""
|
||||||
|
@ -258,7 +263,7 @@ def get_build_dir_sources(distro, version):
|
||||||
"""Return the files needed to build an image."""
|
"""Return the files needed to build an image."""
|
||||||
sources = [
|
sources = [
|
||||||
git_root() / "pyproject.toml",
|
git_root() / "pyproject.toml",
|
||||||
git_root() / "poetry.lock",
|
git_root() / "uv.lock",
|
||||||
git_root() / "dev_scripts" / "env.py",
|
git_root() / "dev_scripts" / "env.py",
|
||||||
git_root() / "dev_scripts" / "storage.conf",
|
git_root() / "dev_scripts" / "storage.conf",
|
||||||
git_root() / "dev_scripts" / "containers.conf",
|
git_root() / "dev_scripts" / "containers.conf",
|
||||||
|
|
|
@ -35,14 +35,14 @@ It can run the tasks for you, pausing when it needs manual intervention.
|
||||||
You can run it with a command like:
|
You can run it with a command like:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run ./dev_scripts/qa.py {distro}-{version}
|
uv run ./dev_scripts/qa.py {distro}-{version}
|
||||||
```
|
```
|
||||||
|
|
||||||
### The checklist
|
### The checklist
|
||||||
|
|
||||||
- [ ] Create a test build in Windows and make sure it works:
|
- [ ] Create a test build in Windows and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with uv.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -51,7 +51,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in macOS (Intel CPU) and make sure it works:
|
- [ ] Create a test build in macOS (Intel CPU) and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with `uv`.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -60,7 +60,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in macOS (M1/2 CPU) and make sure it works:
|
- [ ] Create a test build in macOS (M1/2 CPU) and make sure it works:
|
||||||
- [ ] Check if the suggested Python version is still supported.
|
- [ ] Check if the suggested Python version is still supported.
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with `uv`.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -69,7 +69,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Ubuntu LTS platform (Ubuntu 24.04
|
- [ ] Create a test build in the most recent Ubuntu LTS platform (Ubuntu 24.04
|
||||||
as of writing this) and make sure it works:
|
as of writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with `uv`.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -78,7 +78,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Fedora platform (Fedora 41 as of
|
- [ ] Create a test build in the most recent Fedora platform (Fedora 41 as of
|
||||||
writing this) and make sure it works:
|
writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with `uv`.
|
||||||
- [ ] Build the container image and ensure the development environment uses
|
- [ ] Build the container image and ensure the development environment uses
|
||||||
the new image.
|
the new image.
|
||||||
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
- [ ] Download the OCR language data using `./install/common/download-tessdata.py`
|
||||||
|
@ -87,7 +87,7 @@ poetry run ./dev_scripts/qa.py {distro}-{version}
|
||||||
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
- [ ] Test some QA scenarios (see [Scenarios](#Scenarios) below).
|
||||||
- [ ] Create a test build in the most recent Qubes Fedora template (Fedora 40 as
|
- [ ] Create a test build in the most recent Qubes Fedora template (Fedora 40 as
|
||||||
of writing this) and make sure it works:
|
of writing this) and make sure it works:
|
||||||
- [ ] Create a new development environment with Poetry.
|
- [ ] Create a new development environment with `uv`.
|
||||||
- [ ] Run the Dangerzone tests.
|
- [ ] Run the Dangerzone tests.
|
||||||
- [ ] Create a Qubes .rpm package and install it system-wide.
|
- [ ] Create a Qubes .rpm package and install it system-wide.
|
||||||
- [ ] Ensure that the Dangerzone application appears in the "Applications"
|
- [ ] Ensure that the Dangerzone application appears in the "Applications"
|
||||||
|
@ -251,23 +251,45 @@ Install dependencies:
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<details>
|
||||||
|
<summary><i>:memo: Expand this section if you are on Ubuntu 20.04 (Focal).</i></summary>
|
||||||
|
</br>
|
||||||
|
|
||||||
|
The default Python version that ships with Ubuntu Focal (3.8) is not
|
||||||
|
compatible with PySide6, which requires Python 3.9 or greater.
|
||||||
|
|
||||||
|
You can install Python 3.9 using the `python3.9` package.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install -y python3.9
|
||||||
|
```
|
||||||
|
|
||||||
|
`uv` will automatically pick up the correct version when running.
|
||||||
|
</details>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt install -y podman dh-python build-essential make libqt6gui6 \
|
sudo apt install -y podman dh-python build-essential make libqt6gui6 \
|
||||||
pipx python3 python3-dev
|
pipx python3 python3-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Install Poetry using `pipx` (recommended) and add it to your `$PATH`:
|
Install `uv` using `pipx` (recommended) and add it to your `$PATH`:
|
||||||
|
|
||||||
_(See also a list of [alternative installation
|
_(See also a list of [alternative installation
|
||||||
methods](https://python-poetry.org/docs/#installation))_
|
methods](https://docs.astral.sh/uv/getting-started/installation/))_
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pipx ensurepath
|
pipx ensurepath
|
||||||
pipx install poetry
|
pipx install uv
|
||||||
pipx inject poetry poetry-plugin-export
|
|
||||||
```
|
```
|
||||||
|
|
||||||
After this, restart the terminal window, for the `poetry` command to be in your
|
After this, restart the terminal window, for the `uv` command to be in your
|
||||||
`$PATH`.
|
`$PATH`.
|
||||||
|
|
||||||
|
|
||||||
|
@ -277,44 +299,39 @@ Clone this repository:
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the `uv` dependencies:
|
||||||
|
|
||||||
> **Note**: due to an issue with [poetry](https://github.com/python-poetry/poetry/issues/1917), if it prompts for your keyring, disable the keyring with `keyring --disable` and run the command again.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the latest container:
|
Build the latest container:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/build-image.py
|
uv run ./install/common/build-image.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the OCR language data:
|
Download the OCR language data:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python3 ./install/common/download-tessdata.py
|
uv run ./install/common/download-tessdata.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Run from source tree:
|
Run from source tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
./dev_scripts/dangerzone-cli --help
|
uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
./dev_scripts/dangerzone
|
uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
Create a .deb:
|
Create a .deb:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./install/linux/build-deb.py
|
uv run ./install/linux/build-deb.py
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -323,15 +340,36 @@ CONTENT_BUILD_FEDORA = r"""## Fedora
|
||||||
Install dependencies:
|
Install dependencies:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo dnf install -y rpm-build podman python3 python3-devel python3-poetry-core \
|
sudo dnf install -y rpm-build podman python3 python3-devel python3-uv \
|
||||||
pipx qt6-qtbase-gui
|
pipx qt6-qtbase-gui
|
||||||
```
|
```
|
||||||
|
|
||||||
Install Poetry using `pipx`:
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<details>
|
||||||
|
<summary><i>:memo: Expand this section if you are on Fedora 41.</i></summary>
|
||||||
|
</br>
|
||||||
|
|
||||||
|
The default Python version that ships with Fedora 41 (3.13) is not
|
||||||
|
compatible with PySide6, which requires Python 3.12 or earlier.
|
||||||
|
|
||||||
|
You can install Python 3.12 using the `python3.12` package.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf install -y python3.12
|
||||||
|
```
|
||||||
|
|
||||||
|
uv will automatically pick up the correct version when running.
|
||||||
|
</details>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Install `uv` using `pipx`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pipx install poetry
|
pipx install uv
|
||||||
pipx inject poetry poetry-plugin-export
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Clone this repository:
|
Clone this repository:
|
||||||
|
@ -340,13 +378,11 @@ Clone this repository:
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the `uv` dependencies:
|
||||||
|
|
||||||
> **Note**: due to an issue with [poetry](https://github.com/python-poetry/poetry/issues/1917), if it prompts for your keyring, disable the keyring with `keyring --disable` and run the command again.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the latest container:
|
Build the latest container:
|
||||||
|
@ -364,14 +400,11 @@ python3 ./install/common/download-tessdata.py
|
||||||
Run from source tree:
|
Run from source tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
./dev_scripts/dangerzone-cli --help
|
uv run ./dev_scripts/dangerzone-cli --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
./dev_scripts/dangerzone
|
uv run ./dev_scripts/dangerzone
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
|
@ -381,7 +414,7 @@ poetry shell
|
||||||
Create a .rpm:
|
Create a .rpm:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./install/linux/build-rpm.py
|
uv run ./install/linux/build-rpm.py
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -394,10 +427,10 @@ Install the latest version of Python 3.12 (64-bit) [from python.org](https://www
|
||||||
|
|
||||||
Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build Tools"](https://visualstudio.microsoft.com/visual-cpp-build-tools/) and make sure to select "Desktop development with C++" when installing.
|
Install Microsoft Visual C++ 14.0 or greater. Get it with ["Microsoft C++ Build Tools"](https://visualstudio.microsoft.com/visual-cpp-build-tools/) and make sure to select "Desktop development with C++" when installing.
|
||||||
|
|
||||||
Install [poetry](https://python-poetry.org/). Open PowerShell, and run:
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/). Open PowerShell, and run:
|
||||||
|
|
||||||
```
|
```
|
||||||
python -m pip install poetry poetry-plugin-export
|
python -m pip install uv
|
||||||
```
|
```
|
||||||
|
|
||||||
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:
|
Install git from [here](https://git-scm.com/download/win), open a Windows terminal (`cmd.exe`) and clone this repository:
|
||||||
|
@ -406,11 +439,11 @@ Install git from [here](https://git-scm.com/download/win), open a Windows termin
|
||||||
git clone https://github.com/freedomofpress/dangerzone/
|
git clone https://github.com/freedomofpress/dangerzone/
|
||||||
```
|
```
|
||||||
|
|
||||||
Change to the `dangerzone` folder, and install the poetry dependencies:
|
Change to the `dangerzone` folder, and install the `uv` dependencies:
|
||||||
|
|
||||||
```
|
```
|
||||||
cd dangerzone
|
cd dangerzone
|
||||||
poetry install
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
Build the dangerzone container image:
|
Build the dangerzone container image:
|
||||||
|
@ -428,14 +461,11 @@ python3 .\install\common\download-tessdata.py
|
||||||
After that you can launch dangerzone during development with:
|
After that you can launch dangerzone during development with:
|
||||||
|
|
||||||
```
|
```
|
||||||
# start a shell in the virtual environment
|
|
||||||
poetry shell
|
|
||||||
|
|
||||||
# run the CLI
|
# run the CLI
|
||||||
.\dev_scripts\dangerzone-cli.bat --help
|
uv run .\dev_scripts\dangerzone-cli.bat --help
|
||||||
|
|
||||||
# run the GUI
|
# run the GUI
|
||||||
.\dev_scripts\dangerzone.bat
|
uv run .\dev_scripts\dangerzone.bat
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -832,11 +862,11 @@ class QAWindows(QABase):
|
||||||
logger.info("Verified that Docker Desktop is installed and running")
|
logger.info("Verified that Docker Desktop is installed and running")
|
||||||
|
|
||||||
@QABase.task(
|
@QABase.task(
|
||||||
"Install Poetry and the project's dependencies", ref=REF_BUILD, auto=True
|
"Install `uv` and the project's dependencies", ref=REF_BUILD, auto=True
|
||||||
)
|
)
|
||||||
def install_poetry(self):
|
def install_uv(self):
|
||||||
self.run("python", "-m", "pip", "install", "poetry", "poetry-plugin-export")
|
self.run("python", "-m", "pip", "install", "uv")
|
||||||
self.run("poetry", "install", "--sync")
|
self.run("`uv`", "sync")
|
||||||
|
|
||||||
@QABase.task("Build Dangerzone container image", ref=REF_BUILD, auto=True)
|
@QABase.task("Build Dangerzone container image", ref=REF_BUILD, auto=True)
|
||||||
def build_image(self):
|
def build_image(self):
|
||||||
|
@ -845,13 +875,11 @@ class QAWindows(QABase):
|
||||||
@QABase.task("Run tests", ref="REF_BUILD", auto=True)
|
@QABase.task("Run tests", ref="REF_BUILD", auto=True)
|
||||||
def run_tests(self):
|
def run_tests(self):
|
||||||
# NOTE: Windows does not have Makefile by default.
|
# NOTE: Windows does not have Makefile by default.
|
||||||
self.run(
|
self.run("uv", "run", "pytest", "-v", "--ignore", r"tests\test_large_set.py")
|
||||||
"poetry", "run", "pytest", "-v", "--ignore", r"tests\test_large_set.py"
|
|
||||||
)
|
|
||||||
|
|
||||||
@QABase.task("Build Dangerzone .exe", ref="REF_BUILD", auto=True)
|
@QABase.task("Build Dangerzone .exe", ref="REF_BUILD", auto=True)
|
||||||
def build_dangerzone_exe(self):
|
def build_dangerzone_exe(self):
|
||||||
self.run("poetry", "run", "python", r".\setup-windows.py", "build")
|
self.run("uv", "run", r".\setup-windows.py", "build")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_id(cls):
|
def get_id(cls):
|
||||||
|
@ -860,7 +888,7 @@ class QAWindows(QABase):
|
||||||
def start(self):
|
def start(self):
|
||||||
self.install_python()
|
self.install_python()
|
||||||
self.install_docker()
|
self.install_docker()
|
||||||
self.install_poetry()
|
self.install_uv()
|
||||||
self.build_image()
|
self.build_image()
|
||||||
self.download_tessdata()
|
self.download_tessdata()
|
||||||
self.run_tests()
|
self.run_tests()
|
||||||
|
@ -892,9 +920,9 @@ class QALinux(QABase):
|
||||||
args_str = " ".join(args)
|
args_str = " ".join(args)
|
||||||
self.container_run("bash", "-c", f"cd dangerzone; {args_str}")
|
self.container_run("bash", "-c", f"cd dangerzone; {args_str}")
|
||||||
|
|
||||||
def poetry_run(self, *args):
|
def uv_run(self, *args):
|
||||||
"""Run a command via Poetry inside a Dangerzone environment."""
|
"""Run a command via `uv` inside a Dangerzone environment."""
|
||||||
self.shell_run("poetry", "run", *args)
|
self.shell_run("uv", "run", *args)
|
||||||
|
|
||||||
@QABase.task(
|
@QABase.task(
|
||||||
"Create Dangerzone build environment",
|
"Create Dangerzone build environment",
|
||||||
|
@ -921,7 +949,7 @@ class QALinux(QABase):
|
||||||
|
|
||||||
@QABase.task("Run tests", ref="REF_BUILD", auto=True)
|
@QABase.task("Run tests", ref="REF_BUILD", auto=True)
|
||||||
def run_tests(self):
|
def run_tests(self):
|
||||||
self.poetry_run("make", "test")
|
self.uv_run("make", "test")
|
||||||
|
|
||||||
def build_package(self):
|
def build_package(self):
|
||||||
"""Build the Dangerzone .deb/.rpm package"""
|
"""Build the Dangerzone .deb/.rpm package"""
|
||||||
|
|
19
dev_scripts/verify-attestation.sh
Executable file
19
dev_scripts/verify-attestation.sh
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
# First, login to the container registry.
|
||||||
|
# (We only need this because images are not publicly available yet)
|
||||||
|
# Enter "USERNAME" instead of your username
|
||||||
|
# and use your PAT as a password
|
||||||
|
# regctl registry login ghcr.io
|
||||||
|
|
||||||
|
# Get the manifest from the latest tag
|
||||||
|
regctl manifest get --format raw-body ghcr.io/freedomofpress/dangerzone/dangerzone:latest > manifest.json
|
||||||
|
|
||||||
|
# The attestation for this manifest hash is available
|
||||||
|
# at the tag named "sha256-sha256(manifest.json)"
|
||||||
|
DIGEST="sha256-$(sha256sum manifest.json | awk '{ print $1 }')"
|
||||||
|
regctl artifact get ghcr.io/freedomofpress/dangerzone/dangerzone:${DIGEST} > bundle.json
|
||||||
|
|
||||||
|
# Finally verify that the attestation is the right one
|
||||||
|
cosign verify-blob-attestation --bundle bundle.json --new-bundle-format\
|
||||||
|
--certificate-oidc-issuer="https://token.actions.githubusercontent.com"\
|
||||||
|
--certificate-identity-regexp="^https://github.com/freedomofpress/dangerzone/.github/workflows/release-container-image.yml@refs/heads/test/image-publication-cosign"\
|
||||||
|
manifest.json
|
|
@ -9,7 +9,7 @@ The following assumes that you have already setup the development environment.
|
||||||
Unit / integration tests are run with:
|
Unit / integration tests are run with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run make test
|
uv run make test
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run large tests
|
## Run large tests
|
||||||
|
@ -17,7 +17,7 @@ poetry run make test
|
||||||
We also have a larger set of tests that can take a day or more to run, where we evaluate the completeness of Dangerzone conversions.
|
We also have a larger set of tests that can take a day or more to run, where we evaluate the completeness of Dangerzone conversions.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run make test-large
|
uv run make test-large
|
||||||
```
|
```
|
||||||
|
|
||||||
### Test report generation
|
### Test report generation
|
||||||
|
|
|
@ -24,26 +24,40 @@ We picked Doit out of the various tools out there for the following reasons:
|
||||||
|
|
||||||
## How to Doit?
|
## How to Doit?
|
||||||
|
|
||||||
First, enter your Poetry shell. Then, make sure that your environment is clean,
|
Make sure that your environment is clean, and you have ample disk space. You
|
||||||
and you have ample disk space. You can run:
|
can run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
doit clean --dry-run # if you want to see what would happen
|
uv run doit clean --dry-run # if you want to see what would happen
|
||||||
doit clean # you'll be asked to cofirm that you want to clean everything
|
uv run doit clean # you'll be asked to cofirm that you want to clean everything
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally, you can build all the release artifacts with `doit`, or a specific task
|
Finally, you can build all the release artifacts with `doit`, or a specific task
|
||||||
with:
|
with:
|
||||||
|
|
||||||
```
|
```
|
||||||
doit <task>
|
uv run doit <task>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tips and tricks
|
## Tips and tricks
|
||||||
|
|
||||||
* You can run `doit list --all -s` to see the full list of tasks, their
|
* You can run `uv run doit list --all -s` to see the full list of tasks, their
|
||||||
dependencies, and whether they are up to date.
|
dependencies, and whether they are up to date.
|
||||||
* You can run `doit info <task>` to see which dependencies are missing.
|
* You can run `uv run doit info <task>` to see which dependencies are missing.
|
||||||
|
* You can change this line in `pyproject.toml` to `true`, to allow using the
|
||||||
|
Docker/Podman build cache:
|
||||||
|
|
||||||
|
```
|
||||||
|
use_cache = true
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> Using caching may speed up image builds, but is not suitable for release
|
||||||
|
> artifacts. The ID of our base container image (Alpine Linux) does not change
|
||||||
|
> that often, but its APK package index does. So, if we use caching, we risk
|
||||||
|
> skipping the `apk upgrade` layer and end up with packages that are days
|
||||||
|
> behind.
|
||||||
|
|
||||||
* You can pass the following environment variables to the script, in order to
|
* You can pass the following environment variables to the script, in order to
|
||||||
affect some global parameters:
|
affect some global parameters:
|
||||||
- `CONTAINER_RUNTIME`: The container runtime to use. Either `podman` (default)
|
- `CONTAINER_RUNTIME`: The container runtime to use. Either `podman` (default)
|
||||||
|
|
|
@ -9,11 +9,11 @@ It supports two types of environments:
|
||||||
1. Dev environment. This environment has developer tools, necessary for
|
1. Dev environment. This environment has developer tools, necessary for
|
||||||
Dangerzone, baked in. Also, it mounts the Dangerzone source under
|
Dangerzone, baked in. Also, it mounts the Dangerzone source under
|
||||||
`/home/user/dangerzone` in the container. The developer can then run
|
`/home/user/dangerzone` in the container. The developer can then run
|
||||||
Dangerzone from source, with `poetry run ./dev_scripts/dangerzone`.
|
Dangerzone from source, with `uv run ./dev_scripts/dangerzone`.
|
||||||
2. End-user environment. This environment has only Dangerzone installed in it,
|
2. End-user environment. This environment has only Dangerzone installed in it,
|
||||||
from the .deb/.rpm package that we have created. For convenience, it also has
|
from the .deb/.rpm package that we have created. For convenience, it also has
|
||||||
the Dangerzone source mounted under `/home/user/dangerzone`, but it lacks
|
the Dangerzone source mounted under `/home/user/dangerzone`, but it lacks
|
||||||
Poetry and other build tools. The developer can run Dangerzone there with
|
uv and other build tools. The developer can run Dangerzone there with
|
||||||
`dangerzone`. This environment is the most vanilla Dangerzone environment,
|
`dangerzone`. This environment is the most vanilla Dangerzone environment,
|
||||||
and should be closer to the end user's environment, than the development
|
and should be closer to the end user's environment, than the development
|
||||||
environment.
|
environment.
|
||||||
|
@ -92,7 +92,7 @@ In order to build Dangerzone environments, the script uses the following inputs:
|
||||||
|
|
||||||
* Dev environment:
|
* Dev environment:
|
||||||
- Distro name and version. Together, these comprise the base container image.
|
- Distro name and version. Together, these comprise the base container image.
|
||||||
- `poetry.lock` and `pyproject.toml`. Together, these comprise the build
|
- `uv.lock` and `pyproject.toml`. Together, these comprise the build
|
||||||
context.
|
context.
|
||||||
* End-user environment:
|
* End-user environment:
|
||||||
- Distro name and version. Together, these comprise the base container image.
|
- Distro name and version. Together, these comprise the base container image.
|
||||||
|
|
13
dodo.py
13
dodo.py
|
@ -53,6 +53,7 @@ TESSDATA_TARGETS = list_language_data()
|
||||||
|
|
||||||
IMAGE_DEPS = [
|
IMAGE_DEPS = [
|
||||||
"Dockerfile",
|
"Dockerfile",
|
||||||
|
"uv.lock",
|
||||||
*list_files("dangerzone/conversion"),
|
*list_files("dangerzone/conversion"),
|
||||||
*list_files("dangerzone/container_helpers"),
|
*list_files("dangerzone/container_helpers"),
|
||||||
"install/common/build-image.py",
|
"install/common/build-image.py",
|
||||||
|
@ -65,7 +66,7 @@ SOURCE_DEPS = [
|
||||||
*list_files("dangerzone", recursive=True),
|
*list_files("dangerzone", recursive=True),
|
||||||
]
|
]
|
||||||
|
|
||||||
PYTHON_DEPS = ["poetry.lock", "pyproject.toml"]
|
PYTHON_DEPS = ["uv.lock", "pyproject.toml"]
|
||||||
|
|
||||||
DMG_DEPS = [
|
DMG_DEPS = [
|
||||||
*list_files("install/macos"),
|
*list_files("install/macos"),
|
||||||
|
@ -206,9 +207,9 @@ def task_build_image():
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def task_poetry_install():
|
def task_uv_install():
|
||||||
"""Setup the Poetry environment"""
|
"""Setup the uv environment"""
|
||||||
return {"actions": ["poetry install --sync"], "clean": ["poetry env remove --all"]}
|
return {"actions": ["uv sync"], "clean": ["rm -rf .venv"]}
|
||||||
|
|
||||||
|
|
||||||
def task_macos_build_dmg():
|
def task_macos_build_dmg():
|
||||||
|
@ -220,7 +221,7 @@ def task_macos_build_dmg():
|
||||||
return {
|
return {
|
||||||
"actions": [
|
"actions": [
|
||||||
(copy_dir, [".", dz_dir]),
|
(copy_dir, [".", dz_dir]),
|
||||||
f"cd {dz_dir} && poetry run install/macos/build-app.py --with-codesign",
|
f"cd {dz_dir} && uv run install/macos/build-app.py --with-codesign",
|
||||||
(
|
(
|
||||||
"xcrun notarytool submit --wait --apple-id %(apple_id)s"
|
"xcrun notarytool submit --wait --apple-id %(apple_id)s"
|
||||||
f" --keychain-profile dz-notarytool-release-key {dmg_src}"
|
f" --keychain-profile dz-notarytool-release-key {dmg_src}"
|
||||||
|
@ -234,7 +235,7 @@ def task_macos_build_dmg():
|
||||||
"task_dep": [
|
"task_dep": [
|
||||||
"macos_check_system",
|
"macos_check_system",
|
||||||
"init_release_dir",
|
"init_release_dir",
|
||||||
"poetry_install",
|
"uv_install",
|
||||||
"download_tessdata",
|
"download_tessdata",
|
||||||
],
|
],
|
||||||
"targets": [dmg_src, dmg_dst],
|
"targets": [dmg_src, dmg_dst],
|
||||||
|
|
|
@ -27,13 +27,13 @@ def build(build_dir, qubes=False):
|
||||||
The build process is the following:
|
The build process is the following:
|
||||||
|
|
||||||
1. Clean up any stale data from previous runs under ./dist. Note that this directory
|
1. Clean up any stale data from previous runs under ./dist. Note that this directory
|
||||||
is used by `poetry build` and `rpmbuild`.
|
is used by `uv build` and `rpmbuild`.
|
||||||
2. Create the necessary RPM project structure under the specified build directory
|
2. Create the necessary RPM project structure under the specified build directory
|
||||||
(default: ~/rpmbuild), and use symlinks to point to ./dist, so that we don't need
|
(default: ~/rpmbuild), and use symlinks to point to ./dist, so that we don't need
|
||||||
to move files explicitly.
|
to move files explicitly.
|
||||||
3. Create a Python source distribution using `poetry build`. If we are building a
|
3. Create a Python source distribution using `uv build --sdist`.
|
||||||
Qubes package and there is a container image under `share/`, stash it temporarily
|
If we are building a Qubes package and there is a container image under
|
||||||
under a different directory.
|
`share/`, stash it temporarily under a different directory.
|
||||||
4. Build both binary and source RPMs using rpmbuild. Optionally, pass to the SPEC
|
4. Build both binary and source RPMs using rpmbuild. Optionally, pass to the SPEC
|
||||||
`_qubes` flag, that denotes we want to build a package for Qubes.
|
`_qubes` flag, that denotes we want to build a package for Qubes.
|
||||||
"""
|
"""
|
||||||
|
@ -75,7 +75,7 @@ def build(build_dir, qubes=False):
|
||||||
if stash_container and container_tar.exists():
|
if stash_container and container_tar.exists():
|
||||||
container_tar.rename(container_tar_bak)
|
container_tar.rename(container_tar_bak)
|
||||||
try:
|
try:
|
||||||
subprocess.run(["poetry", "build", "-f", "sdist"], cwd=root, check=True)
|
subprocess.run(["uv", "build", "--sdist"], cwd=root, check=True)
|
||||||
# Copy and unlink the Dangerzone sdist, instead of just renaming it. If the
|
# Copy and unlink the Dangerzone sdist, instead of just renaming it. If the
|
||||||
# build directory is outside the filesystem boundary (e.g., due to a container
|
# build directory is outside the filesystem boundary (e.g., due to a container
|
||||||
# mount), then a simple rename will not work.
|
# mount), then a simple rename will not work.
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# 1. It expects a `dangerzone-<version>.tar.gz` package under SOURCES. It is
|
# 1. It expects a `dangerzone-<version>.tar.gz` package under SOURCES. It is
|
||||||
# best not to invoke `tar` yourself, but create a Python source distribution
|
# best not to invoke `tar` yourself, but create a Python source distribution
|
||||||
# instead, via `poetry build`.
|
# instead, via `uv build --sdist`.
|
||||||
# 2. It detects the `_qubes` parameter. If 1, it will build a package
|
# 2. It detects the `_qubes` parameter. If 1, it will build a package
|
||||||
# tailored for installation in Qubes environments. Else, it will build a
|
# tailored for installation in Qubes environments. Else, it will build a
|
||||||
# regular RPM package. The key differences between these packages are that:
|
# regular RPM package. The key differences between these packages are that:
|
||||||
|
@ -41,7 +41,7 @@ URL: https://dangerzone.rocks
|
||||||
|
|
||||||
# XXX: rpmbuild attempts to find a tarball in SOURCES using the basename in the
|
# XXX: rpmbuild attempts to find a tarball in SOURCES using the basename in the
|
||||||
# Source0 url. In our case, GitHub uses `v<version>.tar.gz`. However, the name
|
# Source0 url. In our case, GitHub uses `v<version>.tar.gz`. However, the name
|
||||||
# of the source distribution that `poetry build` creates is
|
# of the source distribution that `uv build --sdist` creates is
|
||||||
# `dangerzone-<version>.tar.gz`, so rpmbuild cannot find it.
|
# `dangerzone-<version>.tar.gz`, so rpmbuild cannot find it.
|
||||||
#
|
#
|
||||||
# Taking a hint from SecureDrop Workstation, we can fix this by adding an
|
# Taking a hint from SecureDrop Workstation, we can fix this by adding an
|
||||||
|
|
|
@ -28,7 +28,7 @@ def main():
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info("Getting PyMuPDF deps as requirements.txt")
|
logger.info("Getting PyMuPDF deps as requirements.txt")
|
||||||
cmd = ["poetry", "export", "--only", "debian"]
|
cmd = ["uv", "export", "--only-group", "debian"]
|
||||||
container_requirements_txt = subprocess.check_output(cmd)
|
container_requirements_txt = subprocess.check_output(cmd)
|
||||||
|
|
||||||
logger.info(f"Vendoring PyMuPDF under '{args.dest}'")
|
logger.info(f"Vendoring PyMuPDF under '{args.dest}'")
|
||||||
|
@ -36,12 +36,9 @@ def main():
|
||||||
# instructed here:
|
# instructed here:
|
||||||
# https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program
|
# https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program
|
||||||
cmd = [
|
cmd = [
|
||||||
sys.executable,
|
"uv", "pip", "install",
|
||||||
"-m",
|
"--no-cache",
|
||||||
"pip",
|
"--no-compile-bytecode",
|
||||||
"install",
|
|
||||||
"--no-cache-dir",
|
|
||||||
"--no-compile",
|
|
||||||
"--target",
|
"--target",
|
||||||
args.dest,
|
args.dest,
|
||||||
"--requirement",
|
"--requirement",
|
||||||
|
|
1486
poetry.lock
generated
1486
poetry.lock
generated
File diff suppressed because it is too large
Load diff
151
pyproject.toml
151
pyproject.toml
|
@ -1,69 +1,90 @@
|
||||||
[tool.poetry]
|
[project]
|
||||||
|
requires-python = ">=3.9,<3.14"
|
||||||
name = "dangerzone"
|
name = "dangerzone"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
description = "Take potentially dangerous PDFs, office documents, or images and convert them to safe PDFs"
|
description = "Take potentially dangerous PDFs, office documents, or images and convert them to safe PDFs"
|
||||||
authors = ["Freedom of the Press Foundation <info@freedom.press>", "Micah Lee <micah.lee@theintercept.com>"]
|
authors = [
|
||||||
license = "AGPL-3.0"
|
{ name = "Freedom of the Press Foundation", email = "info@freedom.press" },
|
||||||
# NOTE: See also https://github.com/freedomofpress/dangerzone/issues/677
|
{ name = "Micah Lee", email = "micah.lee@theintercept.com" }, ]
|
||||||
include = [
|
license = { text = "AGPL-3.0"}
|
||||||
{ path = "share/*", format = "sdist" },
|
|
||||||
{ path = "qubes/*", format = "sdist" },
|
dependencies = [
|
||||||
{ path = "install/linux/press.freedom.dangerzone.*", format = "sdist" },
|
"appdirs",
|
||||||
{ path = "README.md", format = "sdist" },
|
"click",
|
||||||
|
"platformdirs",
|
||||||
|
"colorama",
|
||||||
|
"markdown",
|
||||||
|
"packaging",
|
||||||
|
"pymupdf",
|
||||||
|
"pyside6 (>=6.7.1, < 6.8)",
|
||||||
|
"pyxdg; sys_platform == 'linux'",
|
||||||
|
"requests",]
|
||||||
|
|
||||||
|
dynamic = ["readme",] # "classifiers"]
|
||||||
|
|
||||||
|
classifiers = [
|
||||||
|
"Programming Language :: Python",
|
||||||
|
"Intended Audience :: End Users/Desktop",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
"Topic :: Security",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[dependency-groups]
|
||||||
python = ">=3.9,<3.14"
|
# Dependencies installed inside the container
|
||||||
click = "*"
|
container = [
|
||||||
platformdirs = "*"
|
"pymupdf",
|
||||||
PySide6 = "^6.7.1"
|
]
|
||||||
PyMuPDF = "^1.23.3" # The version in Fedora 39
|
|
||||||
colorama = "*"
|
|
||||||
pyxdg = {version = "*", platform = "linux"}
|
|
||||||
requests = "*"
|
|
||||||
markdown = "*"
|
|
||||||
packaging = "*"
|
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
# debian = [
|
||||||
dangerzone = 'dangerzone:main'
|
# "pymupdf (>=1.24.11, <1.25)",
|
||||||
dangerzone-cli = 'dangerzone:main'
|
# ]
|
||||||
|
|
||||||
# Dependencies required for packaging the code on various platforms.
|
# Dependencies required only for development
|
||||||
[tool.poetry.group.package.dependencies]
|
dev = [
|
||||||
setuptools = "*"
|
"httpx",
|
||||||
cx_freeze = {version = "^7.2.5", platform = "win32"}
|
]
|
||||||
pywin32 = {version = "*", platform = "win32"}
|
|
||||||
pyinstaller = {version = "*", platform = "darwin"}
|
|
||||||
doit = "^0.36.0"
|
|
||||||
jinja2-cli = "^0.8.2"
|
|
||||||
|
|
||||||
# Dependencies required for linting the code.
|
# Dependencies required for linting the code.
|
||||||
[tool.poetry.group.lint.dependencies]
|
lint = [
|
||||||
click = "*" # Install click so mypy is able to reason about it.
|
"click",
|
||||||
mypy = "*"
|
"mypy",
|
||||||
ruff = "*"
|
"ruff",
|
||||||
types-colorama = "*"
|
"types-colorama",
|
||||||
types-PySide2 = "*"
|
"types-pyside2",
|
||||||
types-Markdown = "*"
|
"types-markdown",
|
||||||
types-pygments = "*"
|
"types-pygments",
|
||||||
types-requests = "*"
|
"types-requests",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Dependencies required for packaging the code on various platforms.
|
||||||
|
package = [
|
||||||
|
"cx-freeze; sys_platform == 'win32'",
|
||||||
|
"doit",
|
||||||
|
"jinja2-cli",
|
||||||
|
"pywin32; sys_platform == 'win32'",
|
||||||
|
"pyinstaller; sys_platform == 'darwin'",
|
||||||
|
"setuptools",
|
||||||
|
"doit",
|
||||||
|
]
|
||||||
|
|
||||||
|
test = [
|
||||||
|
"pytest",
|
||||||
|
"pytest-cov",
|
||||||
|
"pytest-mock",
|
||||||
|
"pytest-qt",
|
||||||
|
"pytest-rerunfailures",
|
||||||
|
"pytest-subprocess",
|
||||||
|
"strip-ansi",
|
||||||
|
"numpy (>=2.0, <3.0)" # for python 3.9 compatibility
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
# Dependencies required for testing the code.
|
# Dependencies required for testing the code.
|
||||||
[tool.poetry.group.test.dependencies]
|
# XXX Shoul we keep ?
|
||||||
pytest = "^7.1.2"
|
|
||||||
pytest-mock = "^3.10.0"
|
|
||||||
pytest-qt = "^4.2.0"
|
|
||||||
pytest-cov = "^5.0.0"
|
|
||||||
strip-ansi = "*"
|
|
||||||
pytest-subprocess = "^1.5.2"
|
|
||||||
pytest-rerunfailures = "^14.0"
|
|
||||||
numpy = "2.0" # bump when we remove python 3.9 support
|
|
||||||
|
|
||||||
[tool.poetry.group.debian.dependencies]
|
[project.scripts]
|
||||||
pymupdf = "^1.24.11"
|
dangerzone = 'dangerzone:main'
|
||||||
|
dangerzone-cli = 'dangerzone:main'
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
httpx = "^0.27.2"
|
|
||||||
|
|
||||||
[tool.doit]
|
[tool.doit]
|
||||||
verbosity = 3
|
verbosity = 3
|
||||||
|
@ -74,6 +95,24 @@ select = [
|
||||||
"I",
|
"I",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[tool.setuptools.dynamic]
|
||||||
|
readme = {file = "README.md"}
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = [
|
||||||
|
"dangerzone",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
|
include = [
|
||||||
|
"dangerzone/*",
|
||||||
|
"share/*",
|
||||||
|
"qubes/*",
|
||||||
|
"install/linux/press.freedom.dangerzone.*",
|
||||||
|
"README.md",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.2.0"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
962
uv.lock
Normal file
962
uv.lock
Normal file
|
@ -0,0 +1,962 @@
|
||||||
|
version = 1
|
||||||
|
requires-python = ">=3.9, <3.13"
|
||||||
|
resolution-markers = [
|
||||||
|
"(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'",
|
||||||
|
"platform_machine == 'aarch64' and sys_platform == 'linux'",
|
||||||
|
"platform_machine == 'armv7l' and sys_platform == 'linux'",
|
||||||
|
"platform_machine == 'i686' and sys_platform == 'linux'",
|
||||||
|
"platform_machine == 'ppc64le' and sys_platform == 'linux'",
|
||||||
|
"platform_machine == 's390x' and sys_platform == 'linux'",
|
||||||
|
"platform_machine == 'x86_64' and sys_platform == 'linux'",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "altgraph"
|
||||||
|
version = "0.17.4"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/de/a8/7145824cf0b9e3c28046520480f207df47e927df83aa9555fb47f8505922/altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406", size = 48418 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4d/3f/3bc3f1d83f6e4a7fcb834d3720544ca597590425be5ba9db032b2bf322a2/altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff", size = 21212 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyio"
|
||||||
|
version = "4.7.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "exceptiongroup", marker = "python_full_version < '3.11'" },
|
||||||
|
{ name = "idna" },
|
||||||
|
{ name = "sniffio" },
|
||||||
|
{ name = "typing-extensions" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f6/40/318e58f669b1a9e00f5c4453910682e2d9dd594334539c7b7817dabb765f/anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48", size = 177076 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a0/7a/4daaf3b6c08ad7ceffea4634ec206faeff697526421c20f07628c7372156/anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352", size = 93052 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "appdirs"
|
||||||
|
version = "1.4.4"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "certifi"
|
||||||
|
version = "2024.12.14"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "charset-normalizer"
|
||||||
|
version = "3.4.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/54/2f/28659eee7f5d003e0f5a3b572765bf76d6e0fe6601ab1f1b1dd4cba7e4f1/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", size = 196326 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/18/92869d5c0057baa973a3ee2af71573be7b084b3c3d428fe6463ce71167f8/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", size = 125614 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d6/27/327904c5a54a7796bb9f36810ec4173d2df5d88b401d2b95ef53111d214e/charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", size = 120450 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a4/23/65af317914a0308495133b2d654cf67b11bbd6ca16637c4e8a38f80a5a69/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", size = 140135 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f2/41/6190102ad521a8aa888519bb014a74251ac4586cde9b38e790901684f9ab/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", size = 150413 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7b/ab/f47b0159a69eab9bd915591106859f49670c75f9a19082505ff16f50efc0/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", size = 142992 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/28/89/60f51ad71f63aaaa7e51a2a2ad37919985a341a1d267070f212cdf6c2d22/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", size = 144871 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0c/48/0050550275fea585a6e24460b42465020b53375017d8596c96be57bfabca/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", size = 146756 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/dc/b5/47f8ee91455946f745e6c9ddbb0f8f50314d2416dd922b213e7d5551ad09/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", size = 141034 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/84/79/5c731059ebab43e80bf61fa51666b9b18167974b82004f18c76378ed31a3/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", size = 149434 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ca/f3/0719cd09fc4dc42066f239cb3c48ced17fc3316afca3e2a30a4756fe49ab/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", size = 152443 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f7/0e/c6357297f1157c8e8227ff337e93fd0a90e498e3d6ab96b2782204ecae48/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", size = 150294 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/54/9a/acfa96dc4ea8c928040b15822b59d0863d6e1757fba8bd7de3dc4f761c13/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", size = 145314 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/73/1c/b10a63032eaebb8d7bcb8544f12f063f41f5f463778ac61da15d9985e8b6/charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", size = 94724 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c5/77/3a78bf28bfaa0863f9cfef278dbeadf55efe064eafff8c7c424ae3c4c1bf/charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", size = 102159 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "click"
|
||||||
|
version = "8.1.7"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cloudpickle"
|
||||||
|
version = "3.1.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/97/c7/f746cadd08c4c08129215cf1b984b632f9e579fc781301e63da9e85c76c1/cloudpickle-3.1.0.tar.gz", hash = "sha256:81a929b6e3c7335c863c771d673d105f02efdb89dfaba0c90495d1c64796601b", size = 66155 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/48/41/e1d85ca3cab0b674e277c8c4f678cf66a91cd2cecf93df94353a606fe0db/cloudpickle-3.1.0-py3-none-any.whl", hash = "sha256:fe11acda67f61aaaec473e3afe030feb131d78a43461b718185363384f1ba12e", size = 22021 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorama"
|
||||||
|
version = "0.4.6"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "coverage"
|
||||||
|
version = "7.6.9"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/5b/d2/c25011f4d036cf7e8acbbee07a8e09e9018390aee25ba085596c4b83d510/coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", size = 801710 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/49/f3/f830fb53bf7e4f1d5542756f61d9b740352a188f43854aab9409c8cdeb18/coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb", size = 207024 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4e/e3/ea5632a3a6efd00ab0a791adc0f3e48512097a757ee7dcbee5505f57bafa/coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710", size = 207463 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e4/ae/18ff8b5580e27e62ebcc888082aa47694c2772782ea7011ddf58e377e98f/coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa", size = 235902 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6a/52/57030a8d15ab935624d298360f0a6704885578e39f7b4f68569e59f5902d/coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1", size = 233806 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d0/c5/4466602195ecaced298d55af1e29abceb812addabefd5bd9116a204f7bab/coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec", size = 234966 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b0/1c/55552c3009b7bf96732e36548596ade771c87f89cf1f5a8e3975b33539b5/coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3", size = 234029 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bb/7d/da3dca6878701182ea42c51df47a47c80eaef2a76f5aa3e891dc2a8cce3f/coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5", size = 232494 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/28/cc/39de85ac1d5652bc34ff2bee39ae251b1fdcaae53fab4b44cab75a432bc0/coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073", size = 233611 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/2b/7eb011a9378911088708f121825a71134d0c15fac96972a0ae7a8f5a4049/coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198", size = 209712 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5b/35/c3f40a2269b416db34ce1dedf682a7132c26f857e33596830fa4deebabf9/coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717", size = 210553 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/91/b3dc2f7f38b5cca1236ab6bbb03e84046dd887707b4ec1db2baa47493b3b/coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", size = 207133 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0d/2b/53fd6cb34d443429a92b3ec737f4953627e38b3bee2a67a3c03425ba8573/coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", size = 207577 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/74/f2/68edb1e6826f980a124f21ea5be0d324180bf11de6fd1defcf9604f76df0/coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", size = 239524 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d3/83/8fec0ee68c2c4a5ab5f0f8527277f84ed6f2bd1310ae8a19d0c5532253ab/coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9", size = 236925 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8b/20/8f50e7c7ad271144afbc2c1c6ec5541a8c81773f59352f8db544cad1a0ec/coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4", size = 238792 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6f/62/4ac2e5ad9e7a5c9ec351f38947528e11541f1f00e8a0cdce56f1ba7ae301/coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1", size = 237682 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/58/2f/9d2203f012f3b0533c73336c74134b608742be1ce475a5c72012573cfbb4/coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b", size = 236310 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/33/6d/31f6ab0b4f0f781636075f757eb02141ea1b34466d9d1526dbc586ed7078/coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3", size = 237096 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7d/fb/e14c38adebbda9ed8b5f7f8e03340ac05d68d27b24397f8d47478927a333/coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0", size = 209682 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a4/11/a782af39b019066af83fdc0e8825faaccbe9d7b19a803ddb753114b429cc/coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b", size = 210542 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/60/52/b16af8989a2daf0f80a88522bd8e8eed90b5fcbdecf02a6888f3e80f6ba7/coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8", size = 207325 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/79/6b7826fca8846c1216a113227b9f114ac3e6eacf168b4adcad0cb974aaca/coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a", size = 207563 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a7/07/0bc73da0ccaf45d0d64ef86d33b7d7fdeef84b4c44bf6b85fb12c215c5a6/coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015", size = 240580 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/71/8a/9761f409910961647d892454687cedbaccb99aae828f49486734a82ede6e/coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3", size = 237613 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8b/10/ee7d696a17ac94f32f2dbda1e17e730bf798ae9931aec1fc01c1944cd4de/coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae", size = 239684 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/16/60/aa1066040d3c52fff051243c2d6ccda264da72dc6d199d047624d395b2b2/coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4", size = 239112 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4e/e5/69f35344c6f932ba9028bf168d14a79fedb0dd4849b796d43c81ce75a3c9/coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6", size = 237428 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/32/20/adc895523c4a28f63441b8ac645abd74f9bdd499d2d175bef5b41fc7f92d/coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f", size = 239098 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a9/a6/e0e74230c9bb3549ec8ffc137cfd16ea5d56e993d6bffed2218bff6187e3/coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692", size = 209940 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/18/cb5b88349d4aa2f41ec78d65f92ea32572b30b3f55bc2b70e87578b8f434/coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97", size = 210726 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/93/fe/8873d88999b8e4b0d8150df554d72d6943b3938bba328fcb5422572cfd84/coverage-7.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902", size = 207022 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/23/c1/5dc48dfe3714a6ae9d2cd128a9df39570e46d3831f19a9be84011e767209/coverage-7.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be", size = 207458 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e8/08/5644e101c823f0b18aa5c408037c2438fad05e6eb9f9e6581459aa0bfb92/coverage-7.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599", size = 235494 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b2/02/995c019c0a2d70188d4d8184a0376eb28fcfb759981bb0e9961b463344fd/coverage-7.6.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08", size = 233416 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/eb/d3/48ce8c9a89c7013f89ec7e01402e7a136a2e849c8f8664ea7f17b225295c/coverage-7.6.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464", size = 234546 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/20/d2/11ac147bd76cc5d8a6254c9a9b6beaab51c3532ba0abdfaf669bf48d2c67/coverage-7.6.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845", size = 233655 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/cb/6e35c5766041737f14c31ad02b5404ae6ec05d4e17ccffd69f6d99431e0a/coverage-7.6.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf", size = 232145 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ff/62/5de767f225e09ce959b71d1f3efc9e86e1c3de1fded85886bf705248905d/coverage-7.6.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678", size = 233131 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/65/72/bacb4b4c9da226e2343aa4bfebcb2bc008eda2f28aa913474aef27bfc397/coverage-7.6.9-cp39-cp39-win32.whl", hash = "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6", size = 209735 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f4/4d/096d19dbd8998c9aaf8798078dd884f65652eb891fe7b0e657b5ac07411d/coverage-7.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4", size = 210517 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/15/0e/4ac9035ee2ee08d2b703fdad2d84283ec0bad3b46eb4ad6affb150174cb6/coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b", size = 199270 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.optional-dependencies]
|
||||||
|
toml = [
|
||||||
|
{ name = "tomli", marker = "python_full_version <= '3.11'" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cx-freeze"
|
||||||
|
version = "7.2.7"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "cx-logging", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "importlib-metadata", marker = "(python_full_version < '3.10.2' and platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version < '3.10.2' and sys_platform != 'linux')" },
|
||||||
|
{ name = "lief", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "packaging", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "setuptools", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "tomli", marker = "(python_full_version < '3.11' and platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version < '3.11' and sys_platform != 'linux')" },
|
||||||
|
{ name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version < '3.10' and sys_platform != 'linux')" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/07/22/bdcee73874fbedcdeddb6b492124a29f47721d39ab2981095733e83fdb89/cx_freeze-7.2.7.tar.gz", hash = "sha256:c4d43a4e5357352ac5a89203fda3a8cfadf033d43682f73abbefd3860ce50fb4", size = 3133225 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/11/3d/0ccdfb7f7d559bb3c6e67ad6c4c3811343dbb6ec12689ec96be663ce7267/cx_Freeze-7.2.7-cp310-cp310-win32.whl", hash = "sha256:c34a6e85897f5cb1be84a204feef564adb6f1c753626bf0cf7713a8c4809ed27", size = 2045061 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/dc/7cec5a53e76e4ba77a0bb9f26d842f103699e923a0de616e139e0e4e1dbe/cx_Freeze-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:5ea3f05d31a7432b0516a58e4b7301277c0a5ac693597d531d9ca913d79169ce", size = 2048050 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c3/fc/7f84ec40ab8b25ccc362e08adfae4ab3c1fe3acac0863f2c1dc6d79fb219/cx_Freeze-7.2.7-cp311-cp311-win32.whl", hash = "sha256:909784281dad31c92c0f402894d99a6188bb81f22b593d9d55fc437d54ab35e0", size = 2141804 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b2/6f/c92b2c12c47d388c8f9bcca63d1f823434df98f42633e4d0638424f28dae/cx_Freeze-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:8fff35321128f680a825d28074edd14b81bdd68b98128d4fa655c6c8901de3ce", size = 2144806 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/04/43/09e892796ec99328801906b4297a87b769e6e269183019f65721d5d7ab1d/cx_Freeze-7.2.7-cp312-cp312-win32.whl", hash = "sha256:344276a8354e4688c20dd3cf70c143d7666f1b93f56532ba9549718c2fac4e56", size = 2126907 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a6/20/e7c4ab9aac37e885994d8caa15dcb68d4dd0f242694575ad18ec3409eb57/cx_Freeze-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9a727914e702d98648def98626b13864413a4a5d52b8bd7f6f0d8ffaf7b9207f", size = 2129950 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9c/b3/c1dde4eca91e40250cb5de8f26b15a30e3152b8e8c997d972436174b2bf7/cx_Freeze-7.2.7-cp39-cp39-win32.whl", hash = "sha256:0c8512d24a7dcf3b35bd1e17f9e2d6f6a75e227aff243cd00c1aa4668b64ec01", size = 2042767 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/60/c4/a2aa2bee72c9f464cf3bbe3a347d0dcaf613f1198070756d01918adcbf81/cx_Freeze-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:3b1cdb80b75e142a3e85e71721edd8c423ff41a974dfe9436a09593129446ebf", size = 2045741 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cx-logging"
|
||||||
|
version = "3.2.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/9d/69/50b0c38e26658072b0221f1ea243c47dd56a9f3f50e5754aa5a39189145c/cx_logging-3.2.1.tar.gz", hash = "sha256:812665ae5012680a6fe47095c3772bce638e47cf05b2c3483db3bdbe6b06da44", size = 26966 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/65/94/1cf7a9265a11d9a272be881d4a16d2ce974558f1a4b5339d0b81e3935039/cx_Logging-3.2.1-cp310-cp310-win32.whl", hash = "sha256:4fb0d7c6dc9a8c403e4c62a3be87301946102d036fbe7bd66c6851225ac05a2e", size = 22792 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/59/df/93bdca669af28c4fe0ada18ef5313dece70b5611ee46d90bd2fd156401e3/cx_Logging-3.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:42f48fae8254b6de27710b6bfd34467fde88072d5961f67e88914d7e2bb6c13e", size = 26748 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/97/5f/0307bd16b05c332611e020d0864c1f7e820a671399a125b08b3762069b3a/cx_Logging-3.2.1-cp311-cp311-win32.whl", hash = "sha256:ef526f0ddeba8611942ee76f2117cebb6319a2413b4077c2c1bf0947a61b9148", size = 22715 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/64/7b/e2208fa901b3375ed0dada2d03fd8ff78399f3e14dd4b6933d896becb2fd/cx_Logging-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:4f6366871aa70439c4e3c25c3bb3dd70e8ee98bc190fd30862d7b199948b26f8", size = 26887 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/9b/d8babcfafa7233b862b310a6fe630fc5e6ced02453ca4e60b0c819afbaff/cx_Logging-3.2.1-cp312-cp312-win32.whl", hash = "sha256:3f3de06cf09d5986b39e930c213567c340b3237dfce03d8d3bf6099475eaa02e", size = 22869 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5c/52/b6bd4f4d51eb4f3523da182cdf5969a560e35f4ef178f34841ba6795addc/cx_Logging-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:3452add0544db6ff29116b72a4c48761aaffa9b638728330433853c0c4ad2ea1", size = 26911 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f6/25/1b2c8983944122cec9484a2d371001e2aa8a34b917aa79b9226bc032e65e/cx_Logging-3.2.1-cp39-cp39-win32.whl", hash = "sha256:8f4d60a1a1508e88f2dab78494a1a8fd417ce335f94c01b0d443560cf8838115", size = 22783 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f9/15/da26daacf51d9043b8be3dec15c77e65bea1610f665ea514359d41f0a5ee/cx_Logging-3.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:26b707221077119606195fc14a65df2f21bd7bea78b383528ae8df4ea4298246", size = 26762 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dangerzone"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = { editable = "." }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "appdirs" },
|
||||||
|
{ name = "click" },
|
||||||
|
{ name = "colorama" },
|
||||||
|
{ name = "markdown" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pymupdf" },
|
||||||
|
{ name = "pyside6" },
|
||||||
|
{ name = "pyxdg", marker = "sys_platform == 'linux'" },
|
||||||
|
{ name = "requests" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dev-dependencies]
|
||||||
|
container = [
|
||||||
|
{ name = "pymupdf" },
|
||||||
|
]
|
||||||
|
dev = [
|
||||||
|
{ name = "httpx" },
|
||||||
|
]
|
||||||
|
lint = [
|
||||||
|
{ name = "mypy" },
|
||||||
|
{ name = "ruff" },
|
||||||
|
{ name = "types-colorama" },
|
||||||
|
{ name = "types-markdown" },
|
||||||
|
{ name = "types-pygments" },
|
||||||
|
{ name = "types-pyside2" },
|
||||||
|
{ name = "types-requests" },
|
||||||
|
]
|
||||||
|
package = [
|
||||||
|
{ name = "cx-freeze", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "doit" },
|
||||||
|
{ name = "pyinstaller", marker = "sys_platform == 'darwin'" },
|
||||||
|
{ name = "pywin32", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "setuptools" },
|
||||||
|
]
|
||||||
|
test = [
|
||||||
|
{ name = "pytest" },
|
||||||
|
{ name = "pytest-cov" },
|
||||||
|
{ name = "pytest-mock" },
|
||||||
|
{ name = "pytest-qt" },
|
||||||
|
{ name = "pytest-rerunfailures" },
|
||||||
|
{ name = "pytest-subprocess" },
|
||||||
|
{ name = "strip-ansi" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.metadata]
|
||||||
|
requires-dist = [
|
||||||
|
{ name = "appdirs" },
|
||||||
|
{ name = "click" },
|
||||||
|
{ name = "colorama" },
|
||||||
|
{ name = "markdown" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pymupdf", specifier = ">=1.23.3,<1.24.0" },
|
||||||
|
{ name = "pyside6", specifier = ">=6.7.1,<6.8" },
|
||||||
|
{ name = "pyxdg", marker = "sys_platform == 'linux'" },
|
||||||
|
{ name = "requests" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.metadata.requires-dev]
|
||||||
|
container = [{ name = "pymupdf" }]
|
||||||
|
dev = [{ name = "httpx" }]
|
||||||
|
lint = [
|
||||||
|
{ name = "mypy" },
|
||||||
|
{ name = "ruff" },
|
||||||
|
{ name = "types-colorama" },
|
||||||
|
{ name = "types-markdown" },
|
||||||
|
{ name = "types-pygments" },
|
||||||
|
{ name = "types-pyside2" },
|
||||||
|
{ name = "types-requests" },
|
||||||
|
]
|
||||||
|
package = [
|
||||||
|
{ name = "cx-freeze", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "doit" },
|
||||||
|
{ name = "pyinstaller", marker = "sys_platform == 'darwin'" },
|
||||||
|
{ name = "pywin32", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "setuptools" },
|
||||||
|
]
|
||||||
|
test = [
|
||||||
|
{ name = "pytest" },
|
||||||
|
{ name = "pytest-cov" },
|
||||||
|
{ name = "pytest-mock" },
|
||||||
|
{ name = "pytest-qt" },
|
||||||
|
{ name = "pytest-rerunfailures" },
|
||||||
|
{ name = "pytest-subprocess" },
|
||||||
|
{ name = "strip-ansi" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "doit"
|
||||||
|
version = "0.36.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "cloudpickle" },
|
||||||
|
{ name = "importlib-metadata" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/5a/36/66b7dea1bb5688ba0d2d7bc113e9c0d57df697bd3f39ce2a139d9612aeee/doit-0.36.0.tar.gz", hash = "sha256:71d07ccc9514cb22fe59d98999577665eaab57e16f644d04336ae0b4bae234bc", size = 1448096 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/44/83/a2960d2c975836daa629a73995134fd86520c101412578c57da3d2aa71ee/doit-0.36.0-py3-none-any.whl", hash = "sha256:ebc285f6666871b5300091c26eafdff3de968a6bd60ea35dd1e3fc6f2e32479a", size = 85937 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "exceptiongroup"
|
||||||
|
version = "1.2.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "h11"
|
||||||
|
version = "0.14.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpcore"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "certifi" },
|
||||||
|
{ name = "h11" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpx"
|
||||||
|
version = "0.28.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "anyio" },
|
||||||
|
{ name = "certifi" },
|
||||||
|
{ name = "httpcore" },
|
||||||
|
{ name = "idna" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "idna"
|
||||||
|
version = "3.10"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "importlib-metadata"
|
||||||
|
version = "8.5.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "zipp" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", size = 55304 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", size = 26514 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iniconfig"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lief"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b3/73/3d58051ca9997876493f6b68d7f3f75c3835946204f57082222741cd73c2/lief-0.15.1-cp310-cp310-win32.whl", hash = "sha256:38b9cee48f42c355359ad7e3ff18bf1ec95e518238e4e8fb25657a49169dbf4c", size = 2185592 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/cb/845eda783c36993b5813128f36b2037cdc2211bc61c211ce0e259c497bc6/lief-0.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ddf2ebd73766169594d631b35f84c49ef42871de552ad49f36002c60164d0aca", size = 2334520 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ee/1d/870db82152bcfda4a24e534792a8b7d06faa8230fd226d16ab4a9185daea/lief-0.15.1-cp311-cp311-win32.whl", hash = "sha256:dbdcd70fd23c90017705b7fe6c716f0a69c01d0d0ea7a2ff653d83dc4a61fefb", size = 2185448 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/29/fe/ac50b4554825884c57e846e236b40b5349bf203c2be6a0da095b00cba86f/lief-0.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9b96a37bf11ca777ff305d85d957eabad2a92a6e577b6e2fb3ab79514e5a12e", size = 2334338 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d9/94/a1ce1bb89e46c9a95f575ecc344baee9049a81952fb8c8f60c42d93a99b0/lief-0.15.1-cp312-cp312-win32.whl", hash = "sha256:db38619edf70e27fb3686b8c0f0bec63ad494ac88ab51660c5ecd2720b506e41", size = 2189872 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/41/569d821d7b87a8d38c279eddcaf90a782afd7476fa0b1c5f2febc391848a/lief-0.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:28bf0922de5fb74502a29cc47930d3a052df58dc23ab6519fa590e564f194a60", size = 2343019 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a0/84/e393a3994c2e9acc8477c8515b9bd534d776d3905aad697e620ee7c18290/lief-0.15.1-cp39-cp39-win32.whl", hash = "sha256:4e47324736d6aa559421720758de4ce12d04fb56bdffa3dcc051fe8cdd42ed17", size = 2185910 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b5/dd/6a635272c723682b79680275c7c50b8e88f2b4593b5b8620f9261521710e/lief-0.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:382a189514c0e6ebfb41e0db6106936c7ba94d8400651276add2899ff3570585", size = 2334708 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "macholib"
|
||||||
|
version = "1.16.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "altgraph", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/95/ee/af1a3842bdd5902ce133bd246eb7ffd4375c38642aeb5dc0ae3a0329dfa2/macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30", size = 59309 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/5d/c059c180c84f7962db0aeae7c3b9303ed1d73d76f2bfbc32bc231c8be314/macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c", size = 38094 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "markdown"
|
||||||
|
version = "3.7"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "importlib-metadata", marker = "python_full_version < '3.10'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/54/28/3af612670f82f4c056911fbbbb42760255801b3068c48de792d354ff4472/markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", size = 357086 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803", size = 106349 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mypy"
|
||||||
|
version = "1.13.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "mypy-extensions" },
|
||||||
|
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
||||||
|
{ name = "typing-extensions" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5e/8c/206de95a27722b5b5a8c85ba3100467bd86299d92a4f71c6b9aa448bfa2f/mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", size = 11020731 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ab/bb/b31695a29eea76b1569fd28b4ab141a1adc9842edde080d1e8e1776862c7/mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", size = 10184276 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a5/2d/4a23849729bb27934a0e079c9c1aad912167d875c7b070382a408d459651/mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", size = 12587706 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5c/c3/d318e38ada50255e22e23353a469c791379825240e71b0ad03e76ca07ae6/mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", size = 13105586 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4a/25/3918bc64952370c3dbdbd8c82c363804678127815febd2925b7273d9482c/mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", size = 9632318 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/1d/676e76f07f7d5ddcd4227af3938a9c9640f293b7d8a44dd4ff41d4db25c1/mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", size = 12984688 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9c/03/5a85a30ae5407b1d28fab51bd3e2103e52ad0918d1e68f02a7778669a307/mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", size = 9626811 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fb/31/c526a7bd2e5c710ae47717c7a5f53f616db6d9097caf48ad650581e81748/mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", size = 11077900 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/83/67/b7419c6b503679d10bd26fc67529bc6a1f7a5f220bbb9f292dc10d33352f/mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", size = 10074818 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5f/d4/b33ddd40dad230efb317898a2d1c267c04edba73bc5086bf77edeb410fb2/mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc", size = 11013906 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f4/e6/f414bca465b44d01cd5f4a82761e15044bedd1bf8025c5af3cc64518fac5/mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732", size = 10180657 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/38/e9/fc3865e417722f98d58409770be01afb961e2c1f99930659ff4ae7ca8b7e/mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc", size = 12586394 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2e/35/f4d8b6d2cb0b3dad63e96caf159419dda023f45a358c6c9ac582ccaee354/mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d", size = 13103591 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/22/1d/80594aef135f921dd52e142fa0acd19df197690bd0cde42cea7b88cf5aa2/mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24", size = 9634690 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mypy-extensions"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "packaging"
|
||||||
|
version = "24.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pluggy"
|
||||||
|
version = "1.5.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyinstaller"
|
||||||
|
version = "6.11.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "altgraph", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "importlib-metadata", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version < '3.10' and sys_platform != 'linux')" },
|
||||||
|
{ name = "macholib", marker = "sys_platform == 'darwin'" },
|
||||||
|
{ name = "packaging", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "pyinstaller-hooks-contrib", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "setuptools", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/55/d4/54f5f5c73b803e6256ea97ffc6ba8a305d9a5f57f85f9b00b282512bf18a/pyinstaller-6.11.1.tar.gz", hash = "sha256:491dfb4d9d5d1d9650d9507daec1ff6829527a254d8e396badd60a0affcb72ef", size = 4249772 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/96/15/b0f1c0985ee32fcd2f6ad9a486ef94e4db3fef9af025a3655e76cb708009/pyinstaller-6.11.1-py3-none-macosx_10_13_universal2.whl", hash = "sha256:44e36172de326af6d4e7663b12f71dbd34e2e3e02233e181e457394423daaf03", size = 991780 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyinstaller-hooks-contrib"
|
||||||
|
version = "2024.10"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "importlib-metadata", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version < '3.10' and sys_platform != 'linux')" },
|
||||||
|
{ name = "packaging", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
{ name = "setuptools", marker = "(platform_machine != 'aarch64' and platform_machine != 'armv7l' and platform_machine != 'i686' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_machine != 'x86_64') or sys_platform != 'linux'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/73/6a/9d0057e312b85fbd17a79e1c1955d115fd9bbc78b85bab757777c8ef2307/pyinstaller_hooks_contrib-2024.10.tar.gz", hash = "sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c", size = 140592 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a9/64/445861ee7a5fd32874c0f6cfe8222aacc8feda22539332e0d8ff50dadec6/pyinstaller_hooks_contrib-2024.10-py3-none-any.whl", hash = "sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10", size = 338417 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pymupdf"
|
||||||
|
version = "1.23.26"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pymupdfb" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/c5/47/ebd9cdc09d82462533f69f983c7f57ebbf01e68adb111a3c49acacde2540/PyMuPDF-1.23.26.tar.gz", hash = "sha256:a904261b317b761b0aa2bd2c1f6cd25d25aa4258be67a90c02a878efc5dca649", size = 21988655 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b2/a5/8fcde41b77a2b978b3b609767820822068310f04e3bd39f2f3ffedced7ba/PyMuPDF-1.23.26-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:645a05321aecc8c45739f71f0eb574ce33138d19189582ffa5241fea3a8e2549", size = 4185890 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/38/0f/e4299ce5fc313742dfa798d83ac9691bfdd33e2851016126e2a9333fa447/PyMuPDF-1.23.26-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2dfc9e010669ae92fade6fb72aaea49ebe3b8dcd7ee4dcbbe50115abcaa4d3fe", size = 3715849 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/00/d4/365907e1b2401e86a01b96a0124d2bf1b9c6b019ded1325ca3f019b285ad/PyMuPDF-1.23.26-cp310-none-manylinux2014_aarch64.whl", hash = "sha256:734ee380b3abd038602be79114194a3cb74ac102b7c943bcb333104575922c50", size = 3873375 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7b/36/d5c900e302cb220558b046fea8f4eeed740578351e47cf3a8abc6169447b/PyMuPDF-1.23.26-cp310-none-manylinux2014_x86_64.whl", hash = "sha256:b22f8d854f8196ad5b20308c1cebad3d5189ed9f0988acbafa043947ea7e6c55", size = 4374619 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/70/23/0b3e467aba9ce14124b22b2bc5ffdf9067981372337585b5c055f0520899/PyMuPDF-1.23.26-cp310-none-win32.whl", hash = "sha256:cc0f794e3466bc96b5bf79d42fbc1551428751e3fef38ebc10ac70396b676144", size = 3173349 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/11/c3/487544356045e9b4b67c54a1268ecc868808ff405736824b647b16cd06aa/PyMuPDF-1.23.26-cp310-none-win_amd64.whl", hash = "sha256:2eb701247d8e685a24e45899d1175f01a3ce5fc792a4431c91fbb68633b29298", size = 3394187 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e6/3e/ba4632c10eb4bdaa074de45d4c51603dddc95dc849a0e51d85f11d4c5b65/PyMuPDF-1.23.26-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:e2804a64bb57da414781e312fb0561f6be67658ad57ed4a73dce008b23fc70a6", size = 4185833 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5d/06/82fc8201522989b7bbf0c1d86da6a133c589d02c6cd1bc14da1dd5f2109f/PyMuPDF-1.23.26-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:97b40bb22e3056874634617a90e0ed24a5172cf71791b9e25d1d91c6743bc567", size = 3715853 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/56/19/86414064deb4b8662fb8cd52dd6afa0b56990d5114afa64597f041c185ee/PyMuPDF-1.23.26-cp311-none-manylinux2014_aarch64.whl", hash = "sha256:fab8833559bc47ab26ce736f915b8fc1dd37c108049b90396f7cd5e1004d7593", size = 3873371 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/23/67/1eefac0bc228c80c58456a6bfc04310874e7c0aa0ede73c7ea3a829cad42/PyMuPDF-1.23.26-cp311-none-manylinux2014_x86_64.whl", hash = "sha256:f25aafd3e7fb9d7761a22acf2b67d704f04cc36d4dc33a3773f0eb3f4ec3606f", size = 4374364 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/18/03324982153a1d982584397f443cfadf6928740ea2430744bbb36d5a65d4/PyMuPDF-1.23.26-cp311-none-win32.whl", hash = "sha256:05e672ed3e82caca7ef02a88ace30130b1dd392a1190f03b2b58ffe7aa331400", size = 3173530 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cf/28/a50440fd3cdb263c1843bf166d48fc68d219ff7dccff7b854f19426ef4ee/PyMuPDF-1.23.26-cp311-none-win_amd64.whl", hash = "sha256:92b3c4dd4d0491d495f333be2d41f4e1c155a409bc9d04b5ff29655dccbf4655", size = 3394056 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bb/ef/e2566f524ef5a3d8c62f51afd16bd1a042fc812ab3cc3b987a125d322f89/PyMuPDF-1.23.26-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:a217689ede18cc6991b4e6a78afee8a440b3075d53b9dec4ba5ef7487d4547e9", size = 4216295 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4b/6b/6f6bcd072e90cc0f8e563916222edc36c7adc0d7b5768d996c57652d7b54/PyMuPDF-1.23.26-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:42ad2b819b90ce1947e11b90ec5085889df0a2e3aa0207bc97ecacfc6157cabc", size = 3727595 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/19/07/40f7b3420e8bba1b20a22ddb361fac3b4994427aa113ca628abf2f7dc341/PyMuPDF-1.23.26-cp312-none-manylinux2014_aarch64.whl", hash = "sha256:99607649f89a02bba7d8ebe96e2410664316adc95e9337f7dfeff6a154f93049", size = 3861387 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/95/5e/e5e01b772d4765937b9d0fe6d51124de58c39a7ec8eb06d99f87a73bb05b/PyMuPDF-1.23.26-cp312-none-manylinux2014_x86_64.whl", hash = "sha256:bb42d4b8407b4de7cb58c28f01449f16f32a6daed88afb41108f1aeb3552bdd4", size = 4371602 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/eb/0f/cd6382cde48faf60d4a712e60bc202f7fa5813e849bfd0b454163e1439cb/PyMuPDF-1.23.26-cp312-none-win32.whl", hash = "sha256:c40d044411615e6f0baa7d3d933b3032cf97e168c7fa77d1be8a46008c109aee", size = 3181771 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2d/4e/2dd13cb8d8a4153ba6b6e990c9059f1481afdaf00a5d2c718b16ef106fe5/PyMuPDF-1.23.26-cp312-none-win_amd64.whl", hash = "sha256:3f876533aa7f9a94bcd9a0225ce72571b7808260903fec1d95c120bc842fb52d", size = 3404301 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ce/f5/d55cee40c6170c903c3d3bd4eeefe941f7b17a0f6d21bc38a85b90a0733f/PyMuPDF-1.23.26-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:73fce034f2afea886a59ead2d0caedf27e2b2a8558b5da16d0286882e0b1eb82", size = 4185971 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1e/ce/64983e30ac5354e738a30ba9efecde21023b58744e9b66090f0fa525bf65/PyMuPDF-1.23.26-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:b3de8618b7cb5b36db611083840b3bcf09b11a893e2d8262f4e042102c7e65de", size = 3715893 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2f/a9/4d9645924fa718acb3a39450ddd68322043894b0a290f5f04894535ae4bf/PyMuPDF-1.23.26-cp39-none-manylinux2014_aarch64.whl", hash = "sha256:879e7f5ad35709d8760ab6103c3d5dac8ab8043a856ab3653fd324af7358ee87", size = 3862969 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/cd/e5b9ca2ec2041124f3d5339d653bd47c09b7a263b111ca74748630b394e8/PyMuPDF-1.23.26-cp39-none-manylinux2014_x86_64.whl", hash = "sha256:deee96c2fd415ded7b5070d8d5b2c60679aee6ed0e28ac0d2cb998060d835c2c", size = 4353875 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e5/ee/96e44180c7be69d9cb12356153dee89b6ece186e5a6be523096e193f6680/PyMuPDF-1.23.26-cp39-none-win32.whl", hash = "sha256:9f7f4ef99dd8ac97fb0b852efa3dcbee515798078b6c79a6a13c7b1e7c5d41a4", size = 3173559 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/93/d6/b4f03823a84bdb89d81fecab3b0eb12b28d3c5168c5430e5545681712b36/PyMuPDF-1.23.26-cp39-none-win_amd64.whl", hash = "sha256:ba9a54552c7afb9ec85432c765e2fa9a81413acfaa7d70db7c9b528297749e5b", size = 3394594 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pymupdfb"
|
||||||
|
version = "1.23.22"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/70/f1/2ba669bbc8221ec7b39d7536bd6d5fd0daf7efb5b9d98458462432e3c1ef/PyMuPDFb-1.23.22-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9085a1e2fbf16f2820f9f7ad3d25e85f81d9b9eb0409110c1670d4cf5a27a678", size = 30146890 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7f/40/f02986ac1c9f580bdf90e405ae29b216fd6b481be04ec7b9a70b6b502cf1/PyMuPDFb-1.23.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:01016dd33220cef4ecaf929d09fd27a584dc3ec3e5c9f4112dfe63613ea35135", size = 29372686 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/c1/00a293fb4dfe1dd0bf1f579bd34150f6d34a685b8dc933fab73861ba01c1/PyMuPDFb-1.23.22-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf50e814db91f2a2325219302fbac229a23682c372cf8232aabd51ea3f18210e", size = 30182731 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/65/33/4a3732db87ca2ea72ad6b3496f921b25d040f4ac853da1932d8cceb5cc33/PyMuPDFb-1.23.22-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ffa713ad18e816e584c8a5f569995c32d22f8ac76ab6e4a61f2d2983c4b73d9", size = 30599393 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1d/f8/0eee323d45c41231cd7af667e6ca0672eb7b649213b8a056139bea2fb715/PyMuPDFb-1.23.22-py3-none-win32.whl", hash = "sha256:d00e372452845aea624659c302d25e935052269fd3aafe26948301576d6f2ee8", size = 21753119 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a7/79/2822a5c60909fdacaa1bc455c91e2b2dec9fc79537860b538f09ccad229d/PyMuPDFb-1.23.22-py3-none-win_amd64.whl", hash = "sha256:7c9c157281fdee9f296e666a323307dbf74cb38f017921bb131fa7bfcd39c2bd", size = 24487431 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyside6"
|
||||||
|
version = "6.7.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pyside6-addons" },
|
||||||
|
{ name = "pyside6-essentials" },
|
||||||
|
{ name = "shiboken6" },
|
||||||
|
]
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d4/34/86b0fd9b5ce8eee35bd1311a620e8cdfd56d0ca36edca314a6189336682d/PySide6-6.7.3-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:1c21c4cf6cdd29bd13bbd7a2514756a19188eab992b92af03e64bf06a9b33d5b", size = 532108 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/36/8a/af0c2c91bcd8a0003e4233a0c74dd6b0e5af5534e96185d48a2c03a8f359/PySide6-6.7.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a21480cc746358f70768975fcc452322f03b3c3622625bfb1743b40ce4e24beb", size = 532727 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8a/56/a5347e273de35bd63fd3204bd9d80a134db959ff6f2bbeb299867dbe83db/PySide6-6.7.3-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:c2a1313296c0088d1c3d231d0a8ccf0eda52b84139d0c4065fded76e4a4378f4", size = 532630 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/69/f0/18c6b7f5087eec0d673eb8703c3e9eb76d62cfc427b015d4fc833287c1c4/PySide6-6.7.3-cp39-abi3-win_amd64.whl", hash = "sha256:3ac8dcb4ca82d276e319f89dd99098b01061f255a2b9104216504aece5e0faf8", size = 539981 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyside6-addons"
|
||||||
|
version = "6.7.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pyside6-essentials" },
|
||||||
|
{ name = "shiboken6" },
|
||||||
|
]
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/03/35/e4b69e36d3ffdb6818e546188a99ab2c2fe9834f7d06d57a47d9bfce8fd3/PySide6_Addons-6.7.3-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:3174cb3a373c09c98740b452e8e8f4945d64cfa18ed8d43964111d570f0dc647", size = 292945102 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bb/57/1b16719360c23ddf4aafffbb281fc5cd8949db42c868d0df1ac466814508/PySide6_Addons-6.7.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:bde1eb03dbffd089b50cd445847aaecaf4056cea84c49ea592d00f84f247251e", size = 138279265 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/77/4d/547d8d5d7471a725b7221925266f5e8075bfd495f4d39156efdad4f59fa4/PySide6_Addons-6.7.3-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:5a9e0df31345fe6caea677d916ea48b53ba86f95cc6499c57f89e392447ad6db", size = 123148721 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/ca/1b34d0785298f86bed27582103760f67f7f78d9e2006405e256e9c770993/PySide6_Addons-6.7.3-cp39-abi3-win_amd64.whl", hash = "sha256:d8a19c2b2446407724c81c33ebf3217eaabd092f0f72da8130c17079e04a7813", size = 123578170 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyside6-essentials"
|
||||||
|
version = "6.7.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "shiboken6" },
|
||||||
|
]
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bf/d8/053a3a95454ebc5313b3a4a9167b2f959fc6eaee3536b6e4269b75ce9716/PySide6_Essentials-6.7.3-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:f9e08a4e9e7dc7b5ab72fde20abce8c97df7af1b802d9743f098f577dfe1f649", size = 158595022 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8d/d8/a08ca6eca6839be5d604e4035ce899f9d6df0f612191f4ed4d03e51f1e0e/PySide6_Essentials-6.7.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cda6fd26aead48f32e57f044d18aa75dc39265b49d7957f515ce7ac3989e7029", size = 90396416 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5c/4d/00a5716e56c35c5621368c89abb360f6e953e2be639cd5f11e8075894e41/PySide6_Essentials-6.7.3-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:acdde06b74f26e7d26b4ae1461081b32a6cb17fcaa2a580050b5e0f0f12236c9", size = 87264397 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0b/18/8679adff0b7a6ccacc2e0febd15c1b78d02abc0180b56007c24e94c9d582/PySide6_Essentials-6.7.3-cp39-abi3-win_amd64.whl", hash = "sha256:f0950fcdcbcd4f2443336dc6a5fe692172adc225f876839583503ded0ab2f2a7", size = 68887979 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest"
|
||||||
|
version = "8.3.4"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||||
|
{ name = "exceptiongroup", marker = "python_full_version < '3.11'" },
|
||||||
|
{ name = "iniconfig" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pluggy" },
|
||||||
|
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-cov"
|
||||||
|
version = "6.0.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "coverage", extra = ["toml"] },
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/be/45/9b538de8cef30e17c7b45ef42f538a94889ed6a16f2387a6c89e73220651/pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0", size = 66945 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/36/3b/48e79f2cd6a61dbbd4807b4ed46cb564b4fd50a76166b1c4ea5c1d9e2371/pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", size = 22949 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-mock"
|
||||||
|
version = "3.14.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/c6/90/a955c3ab35ccd41ad4de556596fa86685bf4fc5ffcc62d22d856cfd4e29a/pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0", size = 32814 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f2/3b/b26f90f74e2986a82df6e7ac7e319b8ea7ccece1caec9f8ab6104dc70603/pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f", size = 9863 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-qt"
|
||||||
|
version = "4.4.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pluggy" },
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/53/2c/6a477108342bbe1f5a81a2c54c86c3efadc35f6ad47c76f00c75764a0f7c/pytest-qt-4.4.0.tar.gz", hash = "sha256:76896142a940a4285339008d6928a36d4be74afec7e634577e842c9cc5c56844", size = 125443 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4c/51/6cc5b9c1ecdcd78e6cde97e03d05f5a4ace8f720c5ce0f26f9dce474a0da/pytest_qt-4.4.0-py3-none-any.whl", hash = "sha256:001ed2f8641764b394cf286dc8a4203e40eaf9fff75bf0bfe5103f7f8d0c591d", size = 36286 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-rerunfailures"
|
||||||
|
version = "15.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/26/47/ec4e12f45f4b9fac027a41ccaabb353ed4f23695aae860258ba11a84ed9b/pytest-rerunfailures-15.0.tar.gz", hash = "sha256:2d9ac7baf59f4c13ac730b47f6fa80e755d1ba0581da45ce30b72fb3542b4474", size = 21816 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/89/37/54e5ffc7c0cebee7cf30a3ac5915faa7e7abf8bdfdf3228c277f7c192489/pytest_rerunfailures-15.0-py3-none-any.whl", hash = "sha256:dd150c4795c229ef44320adc9a0c0532c51b78bb7a6843a8c53556b9a611df1a", size = 13017 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-subprocess"
|
||||||
|
version = "1.5.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/3d/02/0c8323e6013ea967f0461ef5653bd129b2d673d74f070c681c7a8663285c/pytest_subprocess-1.5.2.tar.gz", hash = "sha256:ad3ca8a35e798bf9c82d9f16d88700b30d98c5a28236117b86c5d6e581a8ed97", size = 40468 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/10/77/a80e8f9126b95ffd5ad4d04bd14005c68dcbf0d88f53b2b14893f6cc7232/pytest_subprocess-1.5.2-py3-none-any.whl", hash = "sha256:23ac7732aa8bd45f1757265b1316eb72a7f55b41fb21e2ca22e149ba3629fa46", size = 20886 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pywin32"
|
||||||
|
version = "308"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/72/a6/3e9f2c474895c1bb61b11fa9640be00067b5c5b363c501ee9c3fa53aec01/pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e", size = 5927028 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d9/b4/84e2463422f869b4b718f79eb7530a4c1693e96b8a4e5e968de38be4d2ba/pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e", size = 6558484 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9f/8f/fb84ab789713f7c6feacaa08dad3ec8105b88ade8d1c4f0f0dfcaaa017d6/pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c", size = 7971454 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a8/41/ead05a7657ffdbb1edabb954ab80825c4f87a3de0285d59f8290457f9016/pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341", size = 5991824 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e4/cd/0838c9a6063bff2e9bac2388ae36524c26c50288b5d7b6aebb6cdf8d375d/pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920", size = 6640327 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyxdg"
|
||||||
|
version = "0.28"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/b0/25/7998cd2dec731acbd438fbf91bc619603fc5188de0a9a17699a781840452/pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4", size = 77776 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e5/8d/cf41b66a8110670e3ad03dab9b759704eeed07fa96e90fdc0357b2ba70e2/pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab", size = 49520 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "requests"
|
||||||
|
version = "2.32.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "certifi" },
|
||||||
|
{ name = "charset-normalizer" },
|
||||||
|
{ name = "idna" },
|
||||||
|
{ name = "urllib3" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ruff"
|
||||||
|
version = "0.8.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/bf/5e/683c7ef7a696923223e7d95ca06755d6e2acbc5fd8382b2912a28008137c/ruff-0.8.3.tar.gz", hash = "sha256:5e7558304353b84279042fc584a4f4cb8a07ae79b2bf3da1a7551d960b5626d3", size = 3378522 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f8/c4/bfdbb8b9c419ff3b52479af8581026eeaac3764946fdb463dec043441b7d/ruff-0.8.3-py3-none-linux_armv6l.whl", hash = "sha256:8d5d273ffffff0acd3db5bf626d4b131aa5a5ada1276126231c4174543ce20d6", size = 10535860 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/c5/0aabdc9314b4b6f051168ac45227e2aa8e1c6d82718a547455e40c9c9faa/ruff-0.8.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4d66a21de39f15c9757d00c50c8cdd20ac84f55684ca56def7891a025d7e939", size = 10346327 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1a/78/4843a59e7e7b398d6019cf91ab06502fd95397b99b2b858798fbab9151f5/ruff-0.8.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c356e770811858bd20832af696ff6c7e884701115094f427b64b25093d6d932d", size = 9942585 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/91/5a/642ed8f1ba23ffc2dd347697e01eef3c42fad6ac76603be4a8c3a9d6311e/ruff-0.8.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0a60a825e3e177116c84009d5ebaa90cf40dfab56e1358d1df4e29a9a14b13", size = 10797597 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/30/25/2e654bc7226da09a49730a1a2ea6e89f843b362db80b4b2a7a4f948ac986/ruff-0.8.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fb782f4db39501210ac093c79c3de581d306624575eddd7e4e13747e61ba18", size = 10307244 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c0/2d/a224d56bcd4383583db53c2b8f410ebf1200866984aa6eb9b5a70f04e71f/ruff-0.8.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f26bc76a133ecb09a38b7868737eded6941b70a6d34ef53a4027e83913b6502", size = 11362439 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/82/01/03e2857f9c371b8767d3e909f06a33bbdac880df17f17f93d6f6951c3381/ruff-0.8.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01b14b2f72a37390c1b13477c1c02d53184f728be2f3ffc3ace5b44e9e87b90d", size = 12078538 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/af/ae/ff7f97b355da16d748ceec50e1604a8215d3659b36b38025a922e0612e9b/ruff-0.8.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53babd6e63e31f4e96ec95ea0d962298f9f0d9cc5990a1bbb023a6baf2503a82", size = 11616172 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6a/d0/6156d4d1e53ebd17747049afe801c5d7e3014d9b2f398b9236fe36ba4320/ruff-0.8.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ae441ce4cf925b7f363d33cd6570c51435972d697e3e58928973994e56e1452", size = 12919886 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4e/84/affcb30bacb94f6036a128ad5de0e29f543d3f67ee42b490b17d68e44b8a/ruff-0.8.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c65bc0cadce32255e93c57d57ecc2cca23149edd52714c0c5d6fa11ec328cd", size = 11212599 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/60/b9/5694716bdefd8f73df7c0104334156c38fb0f77673d2966a5a1345bab94d/ruff-0.8.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5be450bb18f23f0edc5a4e5585c17a56ba88920d598f04a06bd9fd76d324cb20", size = 10784637 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/24/7e/0e8f835103ac7da81c3663eedf79dec8359e9ae9a3b0d704bae50be59176/ruff-0.8.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8faeae3827eaa77f5721f09b9472a18c749139c891dbc17f45e72d8f2ca1f8fc", size = 10390591 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/27/da/180ec771fc01c004045962ce017ca419a0281f4bfaf867ed0020f555b56e/ruff-0.8.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:db503486e1cf074b9808403991663e4277f5c664d3fe237ee0d994d1305bb060", size = 10894298 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6d/f8/29f241742ed3954eb2222314b02db29f531a15cab3238d1295e8657c5f18/ruff-0.8.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6567be9fb62fbd7a099209257fef4ad2c3153b60579818b31a23c886ed4147ea", size = 11275965 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/79/e9/5b81dc9afc8a80884405b230b9429efeef76d04caead904bd213f453b973/ruff-0.8.3-py3-none-win32.whl", hash = "sha256:19048f2f878f3ee4583fc6cb23fb636e48c2635e30fb2022b3a1cd293402f964", size = 8807651 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ea/67/7291461066007617b59a707887b90e319b6a043c79b4d19979f86b7a20e7/ruff-0.8.3-py3-none-win_amd64.whl", hash = "sha256:f7df94f57d7418fa7c3ffb650757e0c2b96cf2501a0b192c18e4fb5571dfada9", size = 9625289 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/03/8f/e4fa95288b81233356d9a9dcaed057e5b0adc6399aa8fd0f6d784041c9c3/ruff-0.8.3-py3-none-win_arm64.whl", hash = "sha256:fe2756edf68ea79707c8d68b78ca9a58ed9af22e430430491ee03e718b5e4936", size = 9078754 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "setuptools"
|
||||||
|
version = "75.6.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/43/54/292f26c208734e9a7f067aea4a7e282c080750c4546559b58e2e45413ca0/setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", size = 1337429 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", size = 1224032 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "shiboken6"
|
||||||
|
version = "6.7.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/7f/85d2234371fd260393760656e1f5977c0b6e270a0a6aca6bf7231a3e60de/shiboken6-6.7.3-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:285fe3cf79be3135fe1ad1e2b9ff6db3a48698887425af6aa6ed7a05a9abc3d6", size = 388568 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b2/e9/5c0c67de510da7818703d01123f7998cc495e99c0e6979a6ed6eb2ee09d0/shiboken6-6.7.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f0852e5781de78be5b13c140ec4c7fb9734e2aaf2986eb2d6a224363e03efccc", size = 189890 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/3c/bb524437df11ae79845b230d682b162935c7226b1fb7be2544dceca01e0f/shiboken6-6.7.3-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:f0dd635178e64a45be2f84c9f33dd79ac30328da87f834f21a0baf69ae210e6e", size = 178147 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/cc/e2b95aedb5e5f900c20325ef347e51c7750d18369d157f9b7da99943dae1/shiboken6-6.7.3-cp39-abi3-win_amd64.whl", hash = "sha256:5f29325dfa86fde0274240f1f38e421303749d3174ce3ada178715b5f4719db9", size = 1136685 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sniffio"
|
||||||
|
version = "1.3.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strip-ansi"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/b9/bd/273a435b7f9fd111b22f740b2661b6b734938c93d86531f9689747323c43/strip-ansi-0.1.1.tar.gz", hash = "sha256:5d60f239cc8a37fdd52b43c3e66e893d45ba0423115db59eca0d2eef83b07729", size = 1733 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/22/a1/077deda41f949b3412434fda858396ee9927a3260a43537c2ae333bd688c/strip_ansi-0.1.1-py3-none-any.whl", hash = "sha256:9f55280e1b0ba84dac49d4f18aa6b51b90ff766b22e4918ffc01cc87b394ecd1", size = 1815 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tomli"
|
||||||
|
version = "2.2.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-colorama"
|
||||||
|
version = "0.4.15.20240311"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/59/73/0fb0b9fe4964b45b2a06ed41b60c352752626db46aa0fb70a49a9e283a75/types-colorama-0.4.15.20240311.tar.gz", hash = "sha256:a28e7f98d17d2b14fb9565d32388e419f4108f557a7d939a66319969b2b99c7a", size = 5608 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b7/83/6944b4fa01efb2e63ac62b791a8ddf0fee358f93be9f64b8f152648ad9d3/types_colorama-0.4.15.20240311-py3-none-any.whl", hash = "sha256:6391de60ddc0db3f147e31ecb230006a6823e81e380862ffca1e4695c13a0b8e", size = 5840 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-docutils"
|
||||||
|
version = "0.21.0.20241128"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/dd/df/64e7ab01a4fc5ce46895dc94e31cffc8b8087c8d91ee54c45ac2d8d82445/types_docutils-0.21.0.20241128.tar.gz", hash = "sha256:4dd059805b83ac6ec5a223699195c4e9eeb0446a4f7f2aeff1759a4a7cc17473", size = 26739 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/59/b6/10ba95739f2cbb9c5bd2f6568148d62b468afe01a94c633e8892a2936d8a/types_docutils-0.21.0.20241128-py3-none-any.whl", hash = "sha256:e0409204009639e9b0bf4521eeabe58b5e574ce9c0db08421c2ac26c32be0039", size = 34677 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-markdown"
|
||||||
|
version = "3.7.0.20241204"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d4/3c/874ac6ce93f4e6bd0283a5df2c8065f4e623c6c3bc0b2fb98c098313cb73/types_markdown-3.7.0.20241204.tar.gz", hash = "sha256:ecca2b25cd23163fd28ed5ba34d183d731da03e8a5ed3a20b60daded304c5410", size = 17820 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/04/26/3c9730e845cfd0d587e0dfa9c1975f02f9f49407afbf30800094bdac0286/types_Markdown-3.7.0.20241204-py3-none-any.whl", hash = "sha256:f96146c367ea9c82bfe9903559d72706555cc2a1a3474c58ebba03b418ab18da", size = 23572 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-pygments"
|
||||||
|
version = "2.18.0.20240506"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "types-docutils" },
|
||||||
|
{ name = "types-setuptools" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/f0/ed/0a70203637650ecaa74731faf441d128edb908ed6ca184013bfc498283ba/types-Pygments-2.18.0.20240506.tar.gz", hash = "sha256:4b4c37812c87bbde687dbf27adf5bac593745a321e57f678dbc311571ba2ac9d", size = 13516 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4a/52/1a740a823dcfbe7fe7c44c2ff83528df2c2b5b6e93c299e8db7bf4205c1b/types_Pygments-2.18.0.20240506-py3-none-any.whl", hash = "sha256:11c90bc1737c9af55e5569558b88df7c2233e12325cb516215f722271444e91d", size = 20775 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-pyside2"
|
||||||
|
version = "5.15.2.1.7"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/18/b9/b9691abe89b0dd6f02e52604dda35112e202084970edf1515eba22e45ab8/types_pyside2-5.15.2.1.7.tar.gz", hash = "sha256:1d65072deb97481ad481b3414f94d02fd5da07f5e709c2d439ced14f79b2537c", size = 539112 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c1/19/b093a69c7964ab9abea8130fc4ca7e5f1f0f9c19433e53e2ca41a38d1285/types_pyside2-5.15.2.1.7-py2.py3-none-any.whl", hash = "sha256:a7bec4cb4657179415ca7ec7c70a45f9f9938664e22f385c85fd7cd724b07d4d", size = 572176 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-requests"
|
||||||
|
version = "2.32.0.20241016"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "urllib3" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/fa/3c/4f2a430c01a22abd49a583b6b944173e39e7d01b688190a5618bd59a2e22/types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95", size = 18065 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d7/01/485b3026ff90e5190b5e24f1711522e06c79f4a56c8f4b95848ac072e20f/types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747", size = 15836 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "types-setuptools"
|
||||||
|
version = "75.6.0.20241126"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/c2/d2/15ede73bc3faf647af2c7bfefa90dde563a4b6bb580b1199f6255463c272/types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0", size = 48569 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/a0/898a1363592d372d4103b76b7c723d84fcbde5fa4ed0c3a29102805ed7db/types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b", size = 72732 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typing-extensions"
|
||||||
|
version = "4.12.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "urllib3"
|
||||||
|
version = "2.2.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zipp"
|
||||||
|
version = "3.21.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 },
|
||||||
|
]
|
Loading…
Reference in a new issue