circfirm 4.0.1__tar.gz → 5.1.0__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.1.0/.github/dependabot.yml +11 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/.github/workflows/codeql.yml +3 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/.github/workflows/publish.yml +4 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/.github/workflows/push.yml +10 -12
- {circfirm-4.0.1 → circfirm-5.1.0}/.gitignore +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/.pre-commit-config.yaml +4 -5
- {circfirm-4.0.1 → circfirm-5.1.0}/.readthedocs.yaml +6 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/Makefile +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/PKG-INFO +18 -18
- circfirm-5.1.0/VERSION +1 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/VERSION.license +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/__init__.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/backend/__init__.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/backend/cache.py +1 -3
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/backend/device.py +3 -5
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/backend/github.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/backend/s3.py +2 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/__init__.py +8 -9
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/about.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/cache.py +4 -6
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/config.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/current.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/detect.py +0 -2
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/install.py +1 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/query.py +1 -2
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/cli/update.py +1 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/py.typed +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/startup.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/templates/settings.yaml.license +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm.egg-info/PKG-INFO +18 -18
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm.egg-info/SOURCES.txt +3 -2
- circfirm-5.1.0/circfirm.egg-info/requires.txt +17 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/conf.py +0 -3
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/index.rst.license +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/examples/bash/update_many.sh +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/examples/bash/weekly_cache.sh +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/examples/powershell/update_many.ps1 +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/examples/powershell/weekly_cache.ps1 +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/pyproject.toml +26 -9
- {circfirm-4.0.1 → circfirm-5.1.0}/scripts/rmdir.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/responses/full_list.txt.license +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/responses/specific_board.txt.license +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/backend/test_backend.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/backend/test_backend_cache.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/backend/test_backend_device.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/backend/test_backend_github.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/backend/test_backend_s3.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_about.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_cache.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_config.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_current.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_detect.py +0 -4
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_install.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_query.py +0 -2
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/cli/test_cli_update.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/conftest.py +2 -3
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/helpers.py +0 -1
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/test_startup.py +0 -1
- circfirm-5.1.0/uv.lock +1139 -0
- circfirm-5.1.0/uv.lock.license +2 -0
- circfirm-4.0.1/VERSION +0 -1
- circfirm-4.0.1/circfirm.egg-info/requires.txt +0 -17
- circfirm-4.0.1/requirements-dev.txt +0 -11
- circfirm-4.0.1/requirements.txt +0 -12
- {circfirm-4.0.1 → circfirm-5.1.0}/.reuse/dep5 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/LICENSE +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/LICENSES/MIT.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/LICENSES/Unlicense.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/NOTICE +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/NOTICE.license +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/README.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm/templates/settings.yaml +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm.egg-info/dependency_links.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm.egg-info/entry_points.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/circfirm.egg-info/top_level.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/cache.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/config.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/current.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/detect.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/install.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/query.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/commands/update.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/examples/update_many.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/examples/weekly_cache.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/index.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/ci.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/codecheck.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/docs.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/license.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/notice.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/docs/infrastructure/tests.rst +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/setup.cfg +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/boot_out.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-en_US-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-fr-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m0_express/adafruit-circuitpython-feather_m0_express-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-en_US-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-fr-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/feather_m4_express/adafruit-circuitpython-feather_m4_express-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-en_US-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-fr-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.0.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.1.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/firmwares/pygamer/adafruit-circuitpython-pygamer-zh_Latn_pinyin-7.2.0.uf2 +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/info_uf2.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/responses/full_list.txt +0 -0
- {circfirm-4.0.1 → circfirm-5.1.0}/tests/assets/responses/specific_board.txt +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
name: "CodeQL Analysis"
|
|
@@ -22,12 +21,12 @@ jobs:
|
|
|
22
21
|
security-events: write
|
|
23
22
|
steps:
|
|
24
23
|
- name: Checkout repository
|
|
25
|
-
uses: actions/checkout@
|
|
24
|
+
uses: actions/checkout@v6
|
|
26
25
|
- name: Initialize CodeQL
|
|
27
|
-
uses: github/codeql-action/init@
|
|
26
|
+
uses: github/codeql-action/init@v4
|
|
28
27
|
with:
|
|
29
28
|
languages: python
|
|
30
29
|
- name: Perform CodeQL Analysis
|
|
31
|
-
uses: github/codeql-action/analyze@
|
|
30
|
+
uses: github/codeql-action/analyze@v4
|
|
32
31
|
with:
|
|
33
32
|
category: /language:python
|
|
@@ -14,13 +14,13 @@ jobs:
|
|
|
14
14
|
id-token: write
|
|
15
15
|
steps:
|
|
16
16
|
- name: Checkout the repository
|
|
17
|
-
uses: actions/checkout@
|
|
17
|
+
uses: actions/checkout@v6
|
|
18
18
|
with:
|
|
19
19
|
submodules: true
|
|
20
|
-
- name: Install Python
|
|
21
|
-
uses: actions/setup-python@
|
|
20
|
+
- name: Install Python
|
|
21
|
+
uses: actions/setup-python@v6
|
|
22
22
|
with:
|
|
23
|
-
python-version: "3.
|
|
23
|
+
python-version: "3.X"
|
|
24
24
|
- name: Install dependencies
|
|
25
25
|
run: |
|
|
26
26
|
python -m pip install -U pip
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
name: Build CI
|
|
@@ -16,11 +15,11 @@ jobs:
|
|
|
16
15
|
fail-fast: false
|
|
17
16
|
matrix:
|
|
18
17
|
py-version: [
|
|
19
|
-
"3.9",
|
|
20
18
|
"3.10",
|
|
21
19
|
"3.11",
|
|
22
20
|
"3.12",
|
|
23
21
|
"3.13",
|
|
22
|
+
"3.14",
|
|
24
23
|
]
|
|
25
24
|
os: [
|
|
26
25
|
"ubuntu-latest",
|
|
@@ -28,34 +27,33 @@ jobs:
|
|
|
28
27
|
"macos-latest",
|
|
29
28
|
]
|
|
30
29
|
exclude:
|
|
31
|
-
- os: windows-latest
|
|
32
|
-
py-version: "3.10"
|
|
33
30
|
- os: windows-latest
|
|
34
31
|
py-version: "3.11"
|
|
35
32
|
- os: windows-latest
|
|
36
33
|
py-version: "3.12"
|
|
37
34
|
- os: windows-latest
|
|
38
35
|
py-version: "3.13"
|
|
39
|
-
- os:
|
|
40
|
-
py-version: "3.
|
|
36
|
+
- os: windows-latest
|
|
37
|
+
py-version: "3.14"
|
|
41
38
|
- os: macos-latest
|
|
42
39
|
py-version: "3.11"
|
|
43
40
|
- os: macos-latest
|
|
44
41
|
py-version: "3.12"
|
|
45
42
|
- os: macos-latest
|
|
46
43
|
py-version: "3.13"
|
|
44
|
+
- os: macos-latest
|
|
45
|
+
py-version: "3.14"
|
|
47
46
|
|
|
48
47
|
steps:
|
|
49
48
|
- name: Setup Python 3.x
|
|
50
|
-
uses: actions/setup-python@
|
|
49
|
+
uses: actions/setup-python@v6
|
|
51
50
|
with:
|
|
52
51
|
python-version: ${{ matrix.py-version }}
|
|
53
52
|
- name: Checkout the repository
|
|
54
|
-
uses: actions/checkout@
|
|
53
|
+
uses: actions/checkout@v6
|
|
55
54
|
- name: Install requirements
|
|
56
55
|
run: |
|
|
57
|
-
pip install
|
|
58
|
-
pip install -r requirements-dev.txt
|
|
56
|
+
pip install ".[dev]"
|
|
59
57
|
- name: Run pre-commit via make
|
|
60
58
|
run: |
|
|
61
59
|
make check
|
|
@@ -80,9 +78,9 @@ jobs:
|
|
|
80
78
|
run: |
|
|
81
79
|
coverage xml -o coverage_${{ matrix.os }}_${{ matrix.py-version }}.xml
|
|
82
80
|
- name: Upload coverage report to Codecov
|
|
83
|
-
uses: codecov/codecov-action@
|
|
81
|
+
uses: codecov/codecov-action@v5
|
|
84
82
|
with:
|
|
85
83
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
86
84
|
fail_ci_if_error: true
|
|
87
|
-
|
|
85
|
+
files: coverage_${{ matrix.os }}_${{ matrix.py-version }}.xml
|
|
88
86
|
flags: "${{ matrix.os }}-py-${{ matrix.py-version }}"
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2022 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
repos:
|
|
6
5
|
- repo: https://github.com/Yelp/detect-secrets
|
|
7
|
-
rev: v1.
|
|
6
|
+
rev: v1.5.0
|
|
8
7
|
hooks:
|
|
9
8
|
- id: detect-secrets
|
|
10
9
|
name: Detect secrets
|
|
11
10
|
- repo: https://github.com/fsfe/reuse-tool
|
|
12
|
-
rev:
|
|
11
|
+
rev: v6.2.0
|
|
13
12
|
hooks:
|
|
14
13
|
- id: reuse
|
|
15
14
|
name: Check REUSE compatibility
|
|
16
15
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
17
|
-
rev:
|
|
16
|
+
rev: v6.0.0
|
|
18
17
|
hooks:
|
|
19
18
|
- id: check-yaml
|
|
20
19
|
name: Check YAML
|
|
@@ -29,7 +28,7 @@ repos:
|
|
|
29
28
|
- id: trailing-whitespace
|
|
30
29
|
name: Trim trailing whitespace
|
|
31
30
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
32
|
-
rev: v0.
|
|
31
|
+
rev: v0.15.0
|
|
33
32
|
hooks:
|
|
34
33
|
- id: ruff-format
|
|
35
34
|
name: Format via ruff
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2022 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
version: 2
|
|
6
5
|
|
|
7
6
|
build:
|
|
8
|
-
os: ubuntu-
|
|
7
|
+
os: ubuntu-24.04
|
|
9
8
|
tools:
|
|
10
|
-
python: "3.
|
|
9
|
+
python: "3.14"
|
|
11
10
|
|
|
12
11
|
sphinx:
|
|
13
12
|
configuration: docs/conf.py
|
|
14
13
|
|
|
15
14
|
python:
|
|
16
15
|
install:
|
|
17
|
-
|
|
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:
|
|
3
|
+
Version: 5.1.0
|
|
4
4
|
Summary: CLI tool for install firmware for CircuitPython boards
|
|
5
5
|
Author-email: Alec Delaney <tekktrik@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -15,37 +15,37 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
15
15
|
Classifier: Development Status :: 5 - Production/Stable
|
|
16
16
|
Classifier: Environment :: Console
|
|
17
17
|
Classifier: Natural Language :: English
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
23
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
24
|
Classifier: Operating System :: Unix
|
|
25
25
|
Classifier: Operating System :: Microsoft :: Windows
|
|
26
26
|
Classifier: Operating System :: MacOS
|
|
27
27
|
Classifier: Typing :: Typed
|
|
28
|
-
Requires-Python: >=3.
|
|
28
|
+
Requires-Python: >=3.10.0
|
|
29
29
|
Description-Content-Type: text/x-rst
|
|
30
30
|
License-File: LICENSE
|
|
31
31
|
License-File: NOTICE
|
|
32
32
|
License-File: NOTICE.license
|
|
33
|
-
Requires-Dist: boto3
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist: click
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: boto3==1.42.42
|
|
34
|
+
Requires-Dist: boto3-stubs[essential]==1.42.42
|
|
35
|
+
Requires-Dist: click==8.3.1
|
|
36
|
+
Requires-Dist: click-spinner==0.1.10
|
|
37
|
+
Requires-Dist: packaging==26.0
|
|
38
|
+
Requires-Dist: psutil==7.2.2
|
|
39
|
+
Requires-Dist: pyyaml==6.0.3
|
|
40
|
+
Requires-Dist: requests==2.32.5
|
|
41
41
|
Provides-Extra: dev
|
|
42
|
-
Requires-Dist: build
|
|
43
|
-
Requires-Dist: coverage
|
|
44
|
-
Requires-Dist: pre-commit
|
|
45
|
-
Requires-Dist: pytest
|
|
46
|
-
Requires-Dist: sphinx
|
|
47
|
-
Requires-Dist: sphinx-tabs
|
|
48
|
-
Requires-Dist: sphinx-rtd-theme
|
|
42
|
+
Requires-Dist: build==1.4.0; extra == "dev"
|
|
43
|
+
Requires-Dist: coverage==7.13.3; extra == "dev"
|
|
44
|
+
Requires-Dist: pre-commit==4.5.1; extra == "dev"
|
|
45
|
+
Requires-Dist: pytest==9.0.2; extra == "dev"
|
|
46
|
+
Requires-Dist: sphinx==8.1.3; extra == "dev"
|
|
47
|
+
Requires-Dist: sphinx-tabs==3.4.7; extra == "dev"
|
|
48
|
+
Requires-Dist: sphinx-rtd-theme==3.1.0; extra == "dev"
|
|
49
49
|
Dynamic: license-file
|
|
50
50
|
|
|
51
51
|
..
|
circfirm-5.1.0/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5.1.0
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""Backend functionality for the working with the cache.
|
|
@@ -9,7 +8,6 @@ Author(s): Alec Delaney
|
|
|
9
8
|
|
|
10
9
|
import os
|
|
11
10
|
import pathlib
|
|
12
|
-
from typing import Optional
|
|
13
11
|
|
|
14
12
|
import packaging.version
|
|
15
13
|
import requests
|
|
@@ -55,7 +53,7 @@ def download_uf2(board_id: str, version: str, language: str = "en_US") -> None:
|
|
|
55
53
|
uf2file.write(response.content)
|
|
56
54
|
|
|
57
55
|
|
|
58
|
-
def get_sorted_boards(board_id:
|
|
56
|
+
def get_sorted_boards(board_id: str | None) -> dict[str, dict[str, set[str]]]:
|
|
59
57
|
"""Get a sorted collection of boards, versions, and languages."""
|
|
60
58
|
boards: dict[str, dict[str, set[str]]] = {}
|
|
61
59
|
for board_folder in sorted(os.listdir(circfirm.UF2_ARCHIVE)):
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""Backend functionality for the working with the connected devices.
|
|
@@ -9,7 +8,6 @@ Author(s): Alec Delaney
|
|
|
9
8
|
|
|
10
9
|
import pathlib
|
|
11
10
|
import re
|
|
12
|
-
from typing import Optional
|
|
13
11
|
|
|
14
12
|
import psutil
|
|
15
13
|
|
|
@@ -35,7 +33,7 @@ def get_board_info(device_path: str) -> tuple[str, str]:
|
|
|
35
33
|
return board_match[1], version_match[1]
|
|
36
34
|
|
|
37
35
|
|
|
38
|
-
def _find_device(filename: str) ->
|
|
36
|
+
def _find_device(filename: str) -> str | None:
|
|
39
37
|
"""Find a specific connected device."""
|
|
40
38
|
for partition in psutil.disk_partitions():
|
|
41
39
|
try:
|
|
@@ -47,11 +45,11 @@ def _find_device(filename: str) -> Optional[str]:
|
|
|
47
45
|
return None
|
|
48
46
|
|
|
49
47
|
|
|
50
|
-
def find_circuitpy() ->
|
|
48
|
+
def find_circuitpy() -> str | None:
|
|
51
49
|
"""Find CircuitPython device in non-bootloader mode."""
|
|
52
50
|
return _find_device(circfirm.BOOTOUT_FILE)
|
|
53
51
|
|
|
54
52
|
|
|
55
|
-
def find_bootloader() ->
|
|
53
|
+
def find_bootloader() -> str | None:
|
|
56
54
|
"""Find CircuitPython device in bootloader mode."""
|
|
57
55
|
return _find_device(circfirm.UF2INFO_FILE)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""Backend functionality for the working with the CircuitPython firmware S3 bucket.
|
|
@@ -8,7 +7,6 @@ Author(s): Alec Delaney
|
|
|
8
7
|
"""
|
|
9
8
|
|
|
10
9
|
import re
|
|
11
|
-
from typing import Optional
|
|
12
10
|
|
|
13
11
|
import boto3
|
|
14
12
|
import botocore
|
|
@@ -25,7 +23,7 @@ BUCKET = S3_RESOURCE.Bucket(BUCKET_NAME)
|
|
|
25
23
|
|
|
26
24
|
|
|
27
25
|
def get_board_versions(
|
|
28
|
-
board_id: str, language: str = "en_US", *, regex:
|
|
26
|
+
board_id: str, language: str = "en_US", *, regex: str | None = None
|
|
29
27
|
) -> list[str]:
|
|
30
28
|
"""Get a list of CircuitPython versions for a given board."""
|
|
31
29
|
prefix = f"bin/{board_id}/{language}"
|
|
@@ -50,7 +48,7 @@ def get_board_versions(
|
|
|
50
48
|
|
|
51
49
|
def get_latest_board_version(
|
|
52
50
|
board_id: str, language: str, pre_release: bool
|
|
53
|
-
) ->
|
|
51
|
+
) -> str | None:
|
|
54
52
|
"""Get the latest version for a board in a given language."""
|
|
55
53
|
versions = get_board_versions(board_id, language)
|
|
56
54
|
if not pre_release:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2022 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""Main CLI functionality for the tool.
|
|
@@ -13,8 +12,8 @@ import pkgutil
|
|
|
13
12
|
import shutil
|
|
14
13
|
import sys
|
|
15
14
|
import time
|
|
16
|
-
from collections.abc import Iterable
|
|
17
|
-
from typing import Any,
|
|
15
|
+
from collections.abc import Callable, Iterable
|
|
16
|
+
from typing import Any, TypeVar
|
|
18
17
|
|
|
19
18
|
import click
|
|
20
19
|
import click_spinner
|
|
@@ -44,9 +43,9 @@ def maybe_support(msg: str) -> None:
|
|
|
44
43
|
|
|
45
44
|
|
|
46
45
|
def get_board_id(
|
|
47
|
-
circuitpy:
|
|
48
|
-
bootloader:
|
|
49
|
-
board:
|
|
46
|
+
circuitpy: str | None,
|
|
47
|
+
bootloader: str | None,
|
|
48
|
+
board: str | None,
|
|
50
49
|
timeout: int = -1,
|
|
51
50
|
) -> tuple[str, str]:
|
|
52
51
|
"""Get the board ID of a device via CLI."""
|
|
@@ -75,7 +74,7 @@ def get_board_id(
|
|
|
75
74
|
return bootloader, board
|
|
76
75
|
|
|
77
76
|
|
|
78
|
-
def get_connection_status() -> tuple[
|
|
77
|
+
def get_connection_status() -> tuple[str | None, str | None]:
|
|
79
78
|
"""Get the status of a connectted CircuitPython device as a CIRCUITPY and bootloader location."""
|
|
80
79
|
circuitpy = circfirm.backend.device.find_circuitpy()
|
|
81
80
|
bootloader = circfirm.backend.device.find_bootloader()
|
|
@@ -86,7 +85,7 @@ def get_connection_status() -> tuple[Optional[str], Optional[str]]:
|
|
|
86
85
|
return circuitpy, bootloader
|
|
87
86
|
|
|
88
87
|
|
|
89
|
-
def ensure_bootloader_mode(bootloader:
|
|
88
|
+
def ensure_bootloader_mode(bootloader: str | None) -> None:
|
|
90
89
|
"""Ensure the connected device is in bootloader mode."""
|
|
91
90
|
if not bootloader:
|
|
92
91
|
if circfirm.backend.device.find_circuitpy():
|
|
@@ -130,7 +129,7 @@ def announce_and_await(
|
|
|
130
129
|
msg: str,
|
|
131
130
|
func: Callable[..., _T],
|
|
132
131
|
args: Iterable = (),
|
|
133
|
-
kwargs:
|
|
132
|
+
kwargs: dict[str, Any] | None = None,
|
|
134
133
|
*,
|
|
135
134
|
use_spinner: bool = True,
|
|
136
135
|
) -> _T:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""CLI functionality for the cache subcommand.
|
|
@@ -11,7 +10,6 @@ import os
|
|
|
11
10
|
import pathlib
|
|
12
11
|
import re
|
|
13
12
|
import shutil
|
|
14
|
-
from typing import Optional
|
|
15
13
|
|
|
16
14
|
import botocore.exceptions
|
|
17
15
|
import click
|
|
@@ -40,9 +38,9 @@ def cli():
|
|
|
40
38
|
help="The board ID, version, and language options represent regex patterns",
|
|
41
39
|
)
|
|
42
40
|
def clear( # noqa: PLR0913
|
|
43
|
-
board_id:
|
|
44
|
-
version:
|
|
45
|
-
language:
|
|
41
|
+
board_id: str | None,
|
|
42
|
+
version: str | None,
|
|
43
|
+
language: str | None,
|
|
46
44
|
regex: bool,
|
|
47
45
|
) -> None:
|
|
48
46
|
"""Clear the cache, either entirely or for a specific board/version."""
|
|
@@ -91,7 +89,7 @@ def clear( # noqa: PLR0913
|
|
|
91
89
|
|
|
92
90
|
@cli.command(name="list")
|
|
93
91
|
@click.option("-b", "--board-id", default=None, help="CircuitPython board ID")
|
|
94
|
-
def cache_list(board_id:
|
|
92
|
+
def cache_list(board_id: str | None) -> None:
|
|
95
93
|
"""List all the boards/versions cached."""
|
|
96
94
|
board_list = os.listdir(circfirm.UF2_ARCHIVE)
|
|
97
95
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""CLI functionality for the detect subcommand.
|
|
@@ -7,7 +6,6 @@
|
|
|
7
6
|
Author(s): Alec Delaney
|
|
8
7
|
"""
|
|
9
8
|
|
|
10
|
-
|
|
11
9
|
import click
|
|
12
10
|
|
|
13
11
|
import circfirm.backend.device
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""CLI functionality for the install subcommand.
|
|
@@ -7,8 +6,6 @@
|
|
|
7
6
|
Author(s): Alec Delaney
|
|
8
7
|
"""
|
|
9
8
|
|
|
10
|
-
from typing import Optional
|
|
11
|
-
|
|
12
9
|
import click
|
|
13
10
|
|
|
14
11
|
import circfirm.cli
|
|
@@ -29,7 +26,7 @@ import circfirm.cli
|
|
|
29
26
|
default=-1,
|
|
30
27
|
help="Set a timeout in seconds for the switch to bootloader mode",
|
|
31
28
|
)
|
|
32
|
-
def cli(version: str, language: str, board_id:
|
|
29
|
+
def cli(version: str, language: str, board_id: str | None, timeout: int) -> None:
|
|
33
30
|
"""Install the specified version of CircuitPython."""
|
|
34
31
|
circuitpy, bootloader = circfirm.cli.get_connection_status()
|
|
35
32
|
try:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""CLI functionality for the query subcommand.
|
|
@@ -51,7 +50,7 @@ def query_board_ids(regex: str) -> None:
|
|
|
51
50
|
boards = circfirm.backend.github.get_board_id_list(gh_token)
|
|
52
51
|
except ValueError as err:
|
|
53
52
|
raise click.ClickException(err.args[0])
|
|
54
|
-
except requests.ConnectionError
|
|
53
|
+
except requests.ConnectionError:
|
|
55
54
|
print("Triggered!")
|
|
56
55
|
raise click.ClickException(
|
|
57
56
|
"Issue with requesting information from git repository, check network connection"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024 Alec Delaney, for Adafruit Industries
|
|
2
|
-
#
|
|
3
2
|
# SPDX-License-Identifier: MIT
|
|
4
3
|
|
|
5
4
|
"""CLI functionality for the update subcommand.
|
|
@@ -7,8 +6,6 @@
|
|
|
7
6
|
Author(s): Alec Delaney
|
|
8
7
|
"""
|
|
9
8
|
|
|
10
|
-
from typing import Optional
|
|
11
|
-
|
|
12
9
|
import botocore.exceptions
|
|
13
10
|
import click
|
|
14
11
|
import packaging.version
|
|
@@ -53,7 +50,7 @@ import circfirm.backend.s3
|
|
|
53
50
|
help="Upgrade up to patch version updates",
|
|
54
51
|
)
|
|
55
52
|
def cli( # noqa: PLR0913
|
|
56
|
-
board_id:
|
|
53
|
+
board_id: str | None,
|
|
57
54
|
language: str,
|
|
58
55
|
timeout: int,
|
|
59
56
|
pre_release: bool,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: circfirm
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.1.0
|
|
4
4
|
Summary: CLI tool for install firmware for CircuitPython boards
|
|
5
5
|
Author-email: Alec Delaney <tekktrik@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -15,37 +15,37 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
15
15
|
Classifier: Development Status :: 5 - Production/Stable
|
|
16
16
|
Classifier: Environment :: Console
|
|
17
17
|
Classifier: Natural Language :: English
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
23
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
24
|
Classifier: Operating System :: Unix
|
|
25
25
|
Classifier: Operating System :: Microsoft :: Windows
|
|
26
26
|
Classifier: Operating System :: MacOS
|
|
27
27
|
Classifier: Typing :: Typed
|
|
28
|
-
Requires-Python: >=3.
|
|
28
|
+
Requires-Python: >=3.10.0
|
|
29
29
|
Description-Content-Type: text/x-rst
|
|
30
30
|
License-File: LICENSE
|
|
31
31
|
License-File: NOTICE
|
|
32
32
|
License-File: NOTICE.license
|
|
33
|
-
Requires-Dist: boto3
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist: click
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: boto3==1.42.42
|
|
34
|
+
Requires-Dist: boto3-stubs[essential]==1.42.42
|
|
35
|
+
Requires-Dist: click==8.3.1
|
|
36
|
+
Requires-Dist: click-spinner==0.1.10
|
|
37
|
+
Requires-Dist: packaging==26.0
|
|
38
|
+
Requires-Dist: psutil==7.2.2
|
|
39
|
+
Requires-Dist: pyyaml==6.0.3
|
|
40
|
+
Requires-Dist: requests==2.32.5
|
|
41
41
|
Provides-Extra: dev
|
|
42
|
-
Requires-Dist: build
|
|
43
|
-
Requires-Dist: coverage
|
|
44
|
-
Requires-Dist: pre-commit
|
|
45
|
-
Requires-Dist: pytest
|
|
46
|
-
Requires-Dist: sphinx
|
|
47
|
-
Requires-Dist: sphinx-tabs
|
|
48
|
-
Requires-Dist: sphinx-rtd-theme
|
|
42
|
+
Requires-Dist: build==1.4.0; extra == "dev"
|
|
43
|
+
Requires-Dist: coverage==7.13.3; extra == "dev"
|
|
44
|
+
Requires-Dist: pre-commit==4.5.1; extra == "dev"
|
|
45
|
+
Requires-Dist: pytest==9.0.2; extra == "dev"
|
|
46
|
+
Requires-Dist: sphinx==8.1.3; extra == "dev"
|
|
47
|
+
Requires-Dist: sphinx-tabs==3.4.7; extra == "dev"
|
|
48
|
+
Requires-Dist: sphinx-rtd-theme==3.1.0; extra == "dev"
|
|
49
49
|
Dynamic: license-file
|
|
50
50
|
|
|
51
51
|
..
|