circfirm 5.0.0__tar.gz → 5.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {circfirm-5.0.0 → circfirm-5.1.1}/.readthedocs.yaml +6 -3
- {circfirm-5.0.0 → circfirm-5.1.1}/PKG-INFO +5 -5
- circfirm-5.1.1/VERSION +1 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/VERSION.license +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/__init__.py +4 -2
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/py.typed +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/templates/settings.yaml.license +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/PKG-INFO +5 -5
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/SOURCES.txt +1 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/requires.txt +4 -4
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/index.rst.license +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/pyproject.toml +4 -4
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/responses/full_list.txt.license +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/responses/specific_board.txt.license +0 -1
- circfirm-5.1.1/tests/cli/test_cli.py +72 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_cache.py +1 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_query.py +3 -5
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_update.py +1 -3
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/conftest.py +5 -11
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/helpers.py +3 -3
- {circfirm-5.0.0 → circfirm-5.1.1}/uv.lock +40 -27
- circfirm-5.0.0/VERSION +0 -1
- {circfirm-5.0.0 → circfirm-5.1.1}/.github/dependabot.yml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.github/workflows/codeql.yml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.github/workflows/publish.yml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.github/workflows/push.yml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.gitignore +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.pre-commit-config.yaml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/.reuse/dep5 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/LICENSE +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/LICENSES/MIT.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/LICENSES/Unlicense.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/Makefile +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/NOTICE +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/NOTICE.license +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/README.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/__init__.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/backend/__init__.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/backend/cache.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/backend/device.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/backend/github.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/backend/s3.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/about.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/cache.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/config.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/current.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/detect.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/install.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/query.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/cli/update.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/startup.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm/templates/settings.yaml +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/dependency_links.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/entry_points.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/circfirm.egg-info/top_level.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/cache.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/config.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/current.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/detect.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/install.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/query.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/commands/update.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/conf.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/examples/update_many.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/examples/weekly_cache.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/index.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/ci.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/codecheck.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/docs.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/license.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/notice.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/docs/infrastructure/tests.rst +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/examples/bash/update_many.sh +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/examples/bash/weekly_cache.sh +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/examples/powershell/update_many.ps1 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/examples/powershell/weekly_cache.ps1 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/scripts/rmdir.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/setup.cfg +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/boot_out.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/info_uf2.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/responses/full_list.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/assets/responses/specific_board.txt +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/backend/test_backend.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/backend/test_backend_cache.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/backend/test_backend_device.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/backend/test_backend_github.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/backend/test_backend_s3.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_about.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_config.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_current.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_detect.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/cli/test_cli_install.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/tests/test_startup.py +0 -0
- {circfirm-5.0.0 → circfirm-5.1.1}/uv.lock.license +0 -0
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
version: 2
|
|
5
5
|
|
|
6
6
|
build:
|
|
7
|
-
os: ubuntu-
|
|
7
|
+
os: ubuntu-24.04
|
|
8
8
|
tools:
|
|
9
|
-
python: "3.
|
|
9
|
+
python: "3.14"
|
|
10
10
|
|
|
11
11
|
sphinx:
|
|
12
12
|
configuration: docs/conf.py
|
|
13
13
|
|
|
14
14
|
python:
|
|
15
15
|
install:
|
|
16
|
-
|
|
16
|
+
- method: pip
|
|
17
|
+
path: .
|
|
18
|
+
extra_requirements:
|
|
19
|
+
- dev
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: circfirm
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.1.1
|
|
4
4
|
Summary: CLI tool for install firmware for CircuitPython boards
|
|
5
5
|
Author-email: Alec Delaney <tekktrik@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -34,16 +34,16 @@ Requires-Dist: boto3==1.42.42
|
|
|
34
34
|
Requires-Dist: boto3-stubs[essential]==1.42.42
|
|
35
35
|
Requires-Dist: click==8.3.1
|
|
36
36
|
Requires-Dist: click-spinner==0.1.10
|
|
37
|
-
Requires-Dist: packaging==
|
|
38
|
-
Requires-Dist: psutil==
|
|
37
|
+
Requires-Dist: packaging==26.0
|
|
38
|
+
Requires-Dist: psutil==7.2.2
|
|
39
39
|
Requires-Dist: pyyaml==6.0.3
|
|
40
40
|
Requires-Dist: requests==2.32.5
|
|
41
41
|
Provides-Extra: dev
|
|
42
42
|
Requires-Dist: build==1.4.0; extra == "dev"
|
|
43
43
|
Requires-Dist: coverage==7.13.3; extra == "dev"
|
|
44
44
|
Requires-Dist: pre-commit==4.5.1; extra == "dev"
|
|
45
|
-
Requires-Dist: pytest==
|
|
46
|
-
Requires-Dist: sphinx==
|
|
45
|
+
Requires-Dist: pytest==9.0.2; extra == "dev"
|
|
46
|
+
Requires-Dist: sphinx==8.1.3; extra == "dev"
|
|
47
47
|
Requires-Dist: sphinx-tabs==3.4.7; extra == "dev"
|
|
48
48
|
Requires-Dist: sphinx-rtd-theme==3.1.0; extra == "dev"
|
|
49
49
|
Dynamic: license-file
|
circfirm-5.1.1/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5.1.1
|
|
@@ -17,6 +17,7 @@ from typing import Any, TypeVar
|
|
|
17
17
|
|
|
18
18
|
import click
|
|
19
19
|
import click_spinner
|
|
20
|
+
import requests
|
|
20
21
|
import yaml
|
|
21
22
|
|
|
22
23
|
import circfirm
|
|
@@ -103,9 +104,10 @@ def download_if_needed(board: str, version: str, language: str) -> None:
|
|
|
103
104
|
circfirm.backend.cache.download_uf2,
|
|
104
105
|
args=(board, version, language),
|
|
105
106
|
)
|
|
106
|
-
except ConnectionError as err:
|
|
107
|
+
except (ConnectionError, requests.exceptions.ConnectionError) as err:
|
|
107
108
|
click.echo(" failed") # Mark as failed
|
|
108
|
-
|
|
109
|
+
if isinstance(err, ConnectionError):
|
|
110
|
+
click.echo(f"Error: {err.args[0]}")
|
|
109
111
|
sys.exit(4)
|
|
110
112
|
else:
|
|
111
113
|
click.echo("Using cached firmware file")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: circfirm
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.1.1
|
|
4
4
|
Summary: CLI tool for install firmware for CircuitPython boards
|
|
5
5
|
Author-email: Alec Delaney <tekktrik@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -34,16 +34,16 @@ Requires-Dist: boto3==1.42.42
|
|
|
34
34
|
Requires-Dist: boto3-stubs[essential]==1.42.42
|
|
35
35
|
Requires-Dist: click==8.3.1
|
|
36
36
|
Requires-Dist: click-spinner==0.1.10
|
|
37
|
-
Requires-Dist: packaging==
|
|
38
|
-
Requires-Dist: psutil==
|
|
37
|
+
Requires-Dist: packaging==26.0
|
|
38
|
+
Requires-Dist: psutil==7.2.2
|
|
39
39
|
Requires-Dist: pyyaml==6.0.3
|
|
40
40
|
Requires-Dist: requests==2.32.5
|
|
41
41
|
Provides-Extra: dev
|
|
42
42
|
Requires-Dist: build==1.4.0; extra == "dev"
|
|
43
43
|
Requires-Dist: coverage==7.13.3; extra == "dev"
|
|
44
44
|
Requires-Dist: pre-commit==4.5.1; extra == "dev"
|
|
45
|
-
Requires-Dist: pytest==
|
|
46
|
-
Requires-Dist: sphinx==
|
|
45
|
+
Requires-Dist: pytest==9.0.2; extra == "dev"
|
|
46
|
+
Requires-Dist: sphinx==8.1.3; extra == "dev"
|
|
47
47
|
Requires-Dist: sphinx-tabs==3.4.7; extra == "dev"
|
|
48
48
|
Requires-Dist: sphinx-rtd-theme==3.1.0; extra == "dev"
|
|
49
49
|
Dynamic: license-file
|
|
@@ -107,6 +107,7 @@ tests/backend/test_backend_cache.py
|
|
|
107
107
|
tests/backend/test_backend_device.py
|
|
108
108
|
tests/backend/test_backend_github.py
|
|
109
109
|
tests/backend/test_backend_s3.py
|
|
110
|
+
tests/cli/test_cli.py
|
|
110
111
|
tests/cli/test_cli_about.py
|
|
111
112
|
tests/cli/test_cli_cache.py
|
|
112
113
|
tests/cli/test_cli_config.py
|
|
@@ -2,8 +2,8 @@ boto3==1.42.42
|
|
|
2
2
|
boto3-stubs[essential]==1.42.42
|
|
3
3
|
click==8.3.1
|
|
4
4
|
click-spinner==0.1.10
|
|
5
|
-
packaging==
|
|
6
|
-
psutil==
|
|
5
|
+
packaging==26.0
|
|
6
|
+
psutil==7.2.2
|
|
7
7
|
pyyaml==6.0.3
|
|
8
8
|
requests==2.32.5
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ requests==2.32.5
|
|
|
11
11
|
build==1.4.0
|
|
12
12
|
coverage==7.13.3
|
|
13
13
|
pre-commit==4.5.1
|
|
14
|
-
pytest==
|
|
15
|
-
sphinx==
|
|
14
|
+
pytest==9.0.2
|
|
15
|
+
sphinx==8.1.3
|
|
16
16
|
sphinx-tabs==3.4.7
|
|
17
17
|
sphinx-rtd-theme==3.1.0
|
|
@@ -50,8 +50,8 @@ dependencies = [
|
|
|
50
50
|
"boto3-stubs[essential]==1.42.42",
|
|
51
51
|
"click==8.3.1",
|
|
52
52
|
"click-spinner==0.1.10",
|
|
53
|
-
"packaging==
|
|
54
|
-
"psutil==
|
|
53
|
+
"packaging==26.0",
|
|
54
|
+
"psutil==7.2.2",
|
|
55
55
|
"pyyaml==6.0.3",
|
|
56
56
|
"requests==2.32.5",
|
|
57
57
|
]
|
|
@@ -62,8 +62,8 @@ dev = [
|
|
|
62
62
|
"build==1.4.0",
|
|
63
63
|
"coverage==7.13.3",
|
|
64
64
|
"pre-commit==4.5.1",
|
|
65
|
-
"pytest==
|
|
66
|
-
"sphinx==
|
|
65
|
+
"pytest==9.0.2",
|
|
66
|
+
"sphinx==8.1.3",
|
|
67
67
|
"sphinx-tabs==3.4.7",
|
|
68
68
|
"sphinx-rtd-theme==3.1.0",
|
|
69
69
|
]
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 Alec Delaney
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
"""Tests the core CLI functionality.
|
|
5
|
+
|
|
6
|
+
Author(s): Alec Delaney
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import shutil
|
|
10
|
+
from typing import NoReturn
|
|
11
|
+
|
|
12
|
+
import pytest
|
|
13
|
+
|
|
14
|
+
import circfirm.backend.cache
|
|
15
|
+
import circfirm.cli
|
|
16
|
+
|
|
17
|
+
BOARD = "feather_m0_express"
|
|
18
|
+
LANGUAGE = "cs"
|
|
19
|
+
VERSION = "6.1.0"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.mark.parametrize(
|
|
23
|
+
"cached",
|
|
24
|
+
(
|
|
25
|
+
(True,),
|
|
26
|
+
(False,),
|
|
27
|
+
),
|
|
28
|
+
)
|
|
29
|
+
def test_download_if_needed_cached(
|
|
30
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
31
|
+
cached: bool,
|
|
32
|
+
) -> None:
|
|
33
|
+
"""Tests the install command when there is a cached firmware and has internet."""
|
|
34
|
+
monkeypatch.setattr(
|
|
35
|
+
circfirm.backend.cache, "is_downloaded", lambda _x, _y, _z: cached
|
|
36
|
+
)
|
|
37
|
+
try:
|
|
38
|
+
circfirm.cli.download_if_needed(BOARD, VERSION, LANGUAGE)
|
|
39
|
+
finally:
|
|
40
|
+
board_folder = circfirm.backend.cache.get_board_folder(BOARD)
|
|
41
|
+
if board_folder.exists(): # pragma: no cover
|
|
42
|
+
shutil.rmtree(board_folder)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@pytest.mark.parametrize(
|
|
46
|
+
"cached,succeeds",
|
|
47
|
+
(
|
|
48
|
+
(True, True),
|
|
49
|
+
(False, False),
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
def test_download_if_needed_cached_no_internet(
|
|
53
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
54
|
+
mock_no_internet: NoReturn,
|
|
55
|
+
cached: bool,
|
|
56
|
+
succeeds: bool,
|
|
57
|
+
) -> None:
|
|
58
|
+
"""Tests the install command when there is a cached firmware but no internet."""
|
|
59
|
+
monkeypatch.setattr(
|
|
60
|
+
circfirm.backend.cache, "is_downloaded", lambda _x, _y, _z: cached
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
if succeeds:
|
|
65
|
+
circfirm.cli.download_if_needed(BOARD, VERSION, LANGUAGE)
|
|
66
|
+
else:
|
|
67
|
+
with pytest.raises(SystemExit):
|
|
68
|
+
circfirm.cli.download_if_needed(BOARD, VERSION, LANGUAGE)
|
|
69
|
+
finally:
|
|
70
|
+
board_folder = circfirm.backend.cache.get_board_folder(BOARD)
|
|
71
|
+
if board_folder.exists(): # pragma: no cover
|
|
72
|
+
shutil.rmtree(board_folder)
|
|
@@ -273,7 +273,7 @@ def test_cache_latest() -> None:
|
|
|
273
273
|
shutil.rmtree(board_folder)
|
|
274
274
|
|
|
275
275
|
|
|
276
|
-
def test_cache_latest_no_internet(
|
|
276
|
+
def test_cache_latest_no_internet(mock_no_internet: NoReturn) -> None:
|
|
277
277
|
"""Test the update command when in CIRCUITPY mode when there is no internet connection."""
|
|
278
278
|
board = "feather_m0_express"
|
|
279
279
|
language = "cs"
|
|
@@ -69,9 +69,7 @@ def test_query_board_ids_bad_token(token: None) -> None:
|
|
|
69
69
|
assert result.exit_code != 0
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
def test_query_board_ids_no_internet(
|
|
73
|
-
token: None, mock_requests_no_internet: NoReturn
|
|
74
|
-
) -> None:
|
|
72
|
+
def test_query_board_ids_no_internet(token: None, mock_no_internet: NoReturn) -> None:
|
|
75
73
|
"""Tests failure when cannot fetch results due to no network connection."""
|
|
76
74
|
result = RUNNER.invoke(cli, ["query", "board-ids"])
|
|
77
75
|
assert result.exit_code != 0
|
|
@@ -124,7 +122,7 @@ def test_query_versions() -> None:
|
|
|
124
122
|
assert result.output == "6.2.0-beta.1\n"
|
|
125
123
|
|
|
126
124
|
|
|
127
|
-
def test_query_versions_no_internet(
|
|
125
|
+
def test_query_versions_no_internet(mock_no_internet: NoReturn) -> None:
|
|
128
126
|
"""Tests the ability to query firmware versions using the CLI."""
|
|
129
127
|
board = "adafruit_feather_rp2040"
|
|
130
128
|
language = "cs"
|
|
@@ -180,7 +178,7 @@ def test_query_latest() -> None:
|
|
|
180
178
|
assert result.output == expected_output
|
|
181
179
|
|
|
182
180
|
|
|
183
|
-
def test_query_latest_no_internet(
|
|
181
|
+
def test_query_latest_no_internet(mock_no_internet: NoReturn) -> None:
|
|
184
182
|
"""Tests the ability to query the latest version of the firmware using the CLI."""
|
|
185
183
|
board = "adafruit_feather_rp2040"
|
|
186
184
|
language = "cs"
|
|
@@ -46,9 +46,7 @@ def test_update(mock_with_circuitpy: None) -> None:
|
|
|
46
46
|
shutil.rmtree(board_folder)
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def test_update_no_internet(
|
|
50
|
-
mock_s3_no_internet: None, mock_with_circuitpy: None
|
|
51
|
-
) -> None:
|
|
49
|
+
def test_update_no_internet(mock_no_internet: None, mock_with_circuitpy: None) -> None:
|
|
52
50
|
"""Test the update command when in CIRCUITPY mode."""
|
|
53
51
|
try:
|
|
54
52
|
tests.helpers.set_firmware_version(ORIGINAL_VERSION)
|
|
@@ -120,25 +120,19 @@ def mock_with_firmwares_archived() -> Iterator[None]:
|
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
@pytest.fixture
|
|
123
|
-
def
|
|
123
|
+
def mock_no_internet(monkeypatch: pytest.MonkeyPatch) -> NoReturn:
|
|
124
124
|
"""Simulate a network error by raising requests.ConnectionError."""
|
|
125
125
|
|
|
126
|
-
def
|
|
126
|
+
def mock_requests_get(*args, **kwargs) -> NoReturn:
|
|
127
127
|
"""Mock GET function."""
|
|
128
128
|
raise requests.ConnectionError
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
@pytest.fixture
|
|
134
|
-
def mock_s3_no_internet(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
135
|
-
"""Monkeypatch for an S3 command run without an internet connection."""
|
|
136
|
-
|
|
137
|
-
def mock_send(self, *args, **kwargs) -> NoReturn:
|
|
130
|
+
def mock_urllib3session_send(self, *args, **kwargs) -> NoReturn:
|
|
138
131
|
"""Mock send method."""
|
|
139
132
|
raise botocore.exceptions.EndpointConnectionError(endpoint_url="test")
|
|
140
133
|
|
|
141
|
-
monkeypatch.setattr(
|
|
134
|
+
monkeypatch.setattr(requests, "get", mock_requests_get)
|
|
135
|
+
monkeypatch.setattr(URLLib3Session, "send", mock_urllib3session_send)
|
|
142
136
|
|
|
143
137
|
|
|
144
138
|
# Fixtures for working with GitHub tokens in settings file
|
|
@@ -71,9 +71,9 @@ def delete_mount_node(path: str, missing_ok: bool = False) -> None:
|
|
|
71
71
|
|
|
72
72
|
def _copy_text_file(filename: str) -> None:
|
|
73
73
|
"""Copy a text file to the mounted test drive."""
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
shutil.copyfile(
|
|
74
|
+
template_file = os.path.join("tests", "assets", filename)
|
|
75
|
+
mount_dest = os.path.join(get_mount(), filename)
|
|
76
|
+
shutil.copyfile(template_file, mount_dest)
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
def copy_uf2_info() -> None:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
version = 1
|
|
2
|
-
revision =
|
|
2
|
+
revision = 3
|
|
3
3
|
requires-python = ">=3.10.0"
|
|
4
4
|
resolution-markers = [
|
|
5
|
-
"python_full_version >= '3.13' and python_full_version < '4
|
|
5
|
+
"python_full_version >= '3.13' and python_full_version < '4'",
|
|
6
6
|
"python_full_version >= '3.11' and python_full_version < '3.13'",
|
|
7
7
|
"python_full_version < '3.11'",
|
|
8
|
-
"python_full_version >= '4
|
|
8
|
+
"python_full_version >= '4'",
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
[[package]]
|
|
@@ -247,13 +247,13 @@ requires-dist = [
|
|
|
247
247
|
{ name = "click", specifier = "==8.3.1" },
|
|
248
248
|
{ name = "click-spinner", specifier = "==0.1.10" },
|
|
249
249
|
{ name = "coverage", marker = "extra == 'dev'", specifier = "==7.13.3" },
|
|
250
|
-
{ name = "packaging", specifier = "==
|
|
250
|
+
{ name = "packaging", specifier = "==26.0" },
|
|
251
251
|
{ name = "pre-commit", marker = "extra == 'dev'", specifier = "==4.5.1" },
|
|
252
|
-
{ name = "psutil", specifier = "==
|
|
253
|
-
{ name = "pytest", marker = "extra == 'dev'", specifier = "==
|
|
252
|
+
{ name = "psutil", specifier = "==7.2.2" },
|
|
253
|
+
{ name = "pytest", marker = "extra == 'dev'", specifier = "==9.0.2" },
|
|
254
254
|
{ name = "pyyaml", specifier = "==6.0.3" },
|
|
255
255
|
{ name = "requests", specifier = "==2.32.5" },
|
|
256
|
-
{ name = "sphinx", marker = "extra == 'dev'", specifier = "==
|
|
256
|
+
{ name = "sphinx", marker = "extra == 'dev'", specifier = "==8.1.3" },
|
|
257
257
|
{ name = "sphinx-rtd-theme", marker = "extra == 'dev'", specifier = "==3.1.0" },
|
|
258
258
|
{ name = "sphinx-tabs", marker = "extra == 'dev'", specifier = "==3.4.7" },
|
|
259
259
|
]
|
|
@@ -676,11 +676,11 @@ wheels = [
|
|
|
676
676
|
|
|
677
677
|
[[package]]
|
|
678
678
|
name = "packaging"
|
|
679
|
-
version = "
|
|
679
|
+
version = "26.0"
|
|
680
680
|
source = { registry = "https://pypi.org/simple" }
|
|
681
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
681
|
+
sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" }
|
|
682
682
|
wheels = [
|
|
683
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
683
|
+
{ url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
|
|
684
684
|
]
|
|
685
685
|
|
|
686
686
|
[[package]]
|
|
@@ -719,17 +719,30 @@ wheels = [
|
|
|
719
719
|
|
|
720
720
|
[[package]]
|
|
721
721
|
name = "psutil"
|
|
722
|
-
version = "
|
|
723
|
-
source = { registry = "https://pypi.org/simple" }
|
|
724
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
725
|
-
wheels = [
|
|
726
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
727
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
728
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
729
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
730
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
731
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
732
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
722
|
+
version = "7.2.2"
|
|
723
|
+
source = { registry = "https://pypi.org/simple" }
|
|
724
|
+
sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" }
|
|
725
|
+
wheels = [
|
|
726
|
+
{ url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" },
|
|
727
|
+
{ url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" },
|
|
728
|
+
{ url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" },
|
|
729
|
+
{ url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" },
|
|
730
|
+
{ url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" },
|
|
731
|
+
{ url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" },
|
|
732
|
+
{ url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" },
|
|
733
|
+
{ url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" },
|
|
734
|
+
{ url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" },
|
|
735
|
+
{ url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" },
|
|
736
|
+
{ url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" },
|
|
737
|
+
{ url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" },
|
|
738
|
+
{ url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" },
|
|
739
|
+
{ url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" },
|
|
740
|
+
{ url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" },
|
|
741
|
+
{ url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" },
|
|
742
|
+
{ url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" },
|
|
743
|
+
{ url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" },
|
|
744
|
+
{ url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" },
|
|
745
|
+
{ url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" },
|
|
733
746
|
]
|
|
734
747
|
|
|
735
748
|
[[package]]
|
|
@@ -752,7 +765,7 @@ wheels = [
|
|
|
752
765
|
|
|
753
766
|
[[package]]
|
|
754
767
|
name = "pytest"
|
|
755
|
-
version = "
|
|
768
|
+
version = "9.0.2"
|
|
756
769
|
source = { registry = "https://pypi.org/simple" }
|
|
757
770
|
dependencies = [
|
|
758
771
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
@@ -763,9 +776,9 @@ dependencies = [
|
|
|
763
776
|
{ name = "pygments" },
|
|
764
777
|
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
|
765
778
|
]
|
|
766
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
779
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
|
|
767
780
|
wheels = [
|
|
768
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
781
|
+
{ url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
|
|
769
782
|
]
|
|
770
783
|
|
|
771
784
|
[[package]]
|
|
@@ -891,7 +904,7 @@ wheels = [
|
|
|
891
904
|
|
|
892
905
|
[[package]]
|
|
893
906
|
name = "sphinx"
|
|
894
|
-
version = "
|
|
907
|
+
version = "8.1.3"
|
|
895
908
|
source = { registry = "https://pypi.org/simple" }
|
|
896
909
|
dependencies = [
|
|
897
910
|
{ name = "alabaster" },
|
|
@@ -912,9 +925,9 @@ dependencies = [
|
|
|
912
925
|
{ name = "sphinxcontrib-serializinghtml" },
|
|
913
926
|
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
|
914
927
|
]
|
|
915
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
928
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" }
|
|
916
929
|
wheels = [
|
|
917
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
930
|
+
{ url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" },
|
|
918
931
|
]
|
|
919
932
|
|
|
920
933
|
[[package]]
|
circfirm-5.0.0/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
5.0.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|