circup 1.9.0__tar.gz → 2.0.2__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.
- {circup-1.9.0 → circup-2.0.2}/.github/workflows/build.yml +2 -2
- circup-2.0.2/.github/workflows/release.yml +34 -0
- {circup-1.9.0 → circup-2.0.2}/CONTRIBUTING.rst +13 -4
- {circup-1.9.0/circup.egg-info → circup-2.0.2}/PKG-INFO +40 -50
- {circup-1.9.0 → circup-2.0.2}/circup/backends.py +15 -3
- {circup-1.9.0 → circup-2.0.2}/circup/commands.py +18 -3
- {circup-1.9.0 → circup-2.0.2/circup.egg-info}/PKG-INFO +40 -50
- {circup-1.9.0 → circup-2.0.2}/circup.egg-info/SOURCES.txt +1 -1
- circup-2.0.2/circup.egg-info/requires.txt +13 -0
- circup-2.0.2/pyproject.toml +51 -0
- circup-1.9.0/.github/workflows/release.yml +0 -39
- circup-1.9.0/circup.egg-info/requires.txt +0 -50
- circup-1.9.0/setup.py +0 -104
- {circup-1.9.0 → circup-2.0.2}/.github/ISSUE_TEMPLATE.md +0 -0
- {circup-1.9.0 → circup-2.0.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {circup-1.9.0 → circup-2.0.2}/.gitignore +0 -0
- {circup-1.9.0 → circup-2.0.2}/.isort.cfg +0 -0
- {circup-1.9.0 → circup-2.0.2}/.pre-commit-config.yaml +0 -0
- {circup-1.9.0 → circup-2.0.2}/.pylintrc +0 -0
- {circup-1.9.0 → circup-2.0.2}/CODE_OF_CONDUCT.rst +0 -0
- {circup-1.9.0 → circup-2.0.2}/CODE_OF_CONDUCT.rst.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/CONTRIBUTING.rst.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/LICENSE +0 -0
- {circup-1.9.0 → circup-2.0.2}/LICENSES/CC-BY-4.0.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/LICENSES/MIT.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/LICENSES/Unlicense.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/README.rst +0 -0
- {circup-1.9.0 → circup-2.0.2}/README.rst.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/__init__.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/bundle.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/command_utils.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/config/bundle_config.json +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/config/bundle_config.json.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/logging.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/module.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup/shared.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup.egg-info/dependency_links.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup.egg-info/entry_points.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/circup.egg-info/top_level.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/_static/favicon.ico +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/_static/favicon.ico.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/conf.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/index.rst +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/index.rst.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/logo.png +0 -0
- {circup-1.9.0 → circup-2.0.2}/docs/logo.png.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/optional_requirements.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/optional_requirements.txt.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/readthedocs.yml +0 -0
- {circup-1.9.0 → circup-2.0.2}/requirements.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/requirements.txt.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/setup.cfg +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/__init__.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/bad_module/__init__.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/bad_module/my_module.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/bad_python.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/bundle.json +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/bundle.json.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/device.json +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/device.json.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/dir_module/__init__.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/dir_module/my_module.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/import_styles.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/local_module.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/local_module_cp7.mpy +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/local_module_cp7.mpy.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mock_device/boot_out.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mock_device/boot_out.txt.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mock_device/lib/adafruit_waveform/.gitkeep +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mount_exists.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mount_exists.txt.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mount_missing.txt +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/mount_missing.txt.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/remote_module.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_bundle_config.json +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_bundle_config.json.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_bundle_config_local.json +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_bundle_config_local.json.license +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_circup.py +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_module.mpy +0 -0
- {circup-1.9.0 → circup-2.0.2}/tests/test_module.mpy.license +0 -0
|
@@ -17,10 +17,10 @@ jobs:
|
|
|
17
17
|
- name: Translate Repo Name For Build Tools filename_prefix
|
|
18
18
|
id: repo-name
|
|
19
19
|
run: echo ::set-output name=repo-name::circup
|
|
20
|
-
- name: Set up Python 3.
|
|
20
|
+
- name: Set up Python 3.11
|
|
21
21
|
uses: actions/setup-python@v1
|
|
22
22
|
with:
|
|
23
|
-
python-version: 3.
|
|
23
|
+
python-version: 3.11
|
|
24
24
|
- name: Pip install Sphinx & pre-commit
|
|
25
25
|
run: |
|
|
26
26
|
pip install --force-reinstall Sphinx sphinx-rtd-theme pre-commit
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries
|
|
2
|
+
# SPDX-FileCopyrightText: 2021 James Carr
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: MIT
|
|
5
|
+
|
|
6
|
+
name: Release Actions
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
release:
|
|
10
|
+
types: [published]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
upload-pypi:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
filter: 'blob:none'
|
|
19
|
+
depth: 0
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.11'
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: |
|
|
26
|
+
python -m pip install --upgrade pip
|
|
27
|
+
pip install build setuptools wheel twine
|
|
28
|
+
- name: Build and publish
|
|
29
|
+
env:
|
|
30
|
+
TWINE_USERNAME: ${{ secrets.pypi_username }}
|
|
31
|
+
TWINE_PASSWORD: ${{ secrets.pypi_password }}
|
|
32
|
+
run: |
|
|
33
|
+
python -m build
|
|
34
|
+
twine upload dist/*
|
|
@@ -25,15 +25,24 @@ Developer Setup
|
|
|
25
25
|
|
|
26
26
|
.. note::
|
|
27
27
|
|
|
28
|
-
Please try to use Python 3.
|
|
28
|
+
Please try to use Python 3.9+ while developing CircUp. This is so we can
|
|
29
29
|
use the
|
|
30
30
|
`Black code formatter <https://black.readthedocs.io/en/stable/index.html>`_
|
|
31
|
-
|
|
31
|
+
and so that we're supporting versions which still receive security updates.
|
|
32
|
+
|
|
32
33
|
|
|
33
34
|
Clone the repository and from the root of the project,
|
|
34
|
-
install the requirements::
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
If you'd like you can setup a virtual environment and activate it.::
|
|
38
|
+
|
|
39
|
+
python3 -m venv .env
|
|
40
|
+
source .env/bin/activate
|
|
41
|
+
|
|
42
|
+
install the development requirements::
|
|
43
|
+
|
|
44
|
+
pip install -r optional_requirements.txt
|
|
45
|
+
|
|
37
46
|
|
|
38
47
|
Run the test suite::
|
|
39
48
|
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: circup
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: A tool to manage/update libraries on CircuitPython devices.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: Adafruit Industries <circuitpython@adafruit.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2019 Adafruit Industries
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: homepage, https://github.com/adafruit/circup
|
|
9
29
|
Keywords: adafruit,blinka,circuitpython,micropython,libraries
|
|
10
30
|
Classifier: Development Status :: 3 - Alpha
|
|
11
31
|
Classifier: Environment :: Console
|
|
@@ -15,58 +35,28 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
15
35
|
Classifier: Operating System :: POSIX
|
|
16
36
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
17
37
|
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
-
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
38
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
39
|
Classifier: Programming Language :: Python :: 3.9
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
42
|
Classifier: Topic :: Education
|
|
23
43
|
Classifier: Topic :: Software Development :: Embedded Systems
|
|
24
44
|
Classifier: Topic :: System :: Software Distribution
|
|
45
|
+
Requires-Python: >=3.9
|
|
25
46
|
Description-Content-Type: text/x-rst
|
|
26
47
|
License-File: LICENSE
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: Click
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist: requests
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist: toml
|
|
33
|
-
Requires-Dist: importlib_metadata; python_version == "3.7"
|
|
48
|
+
Requires-Dist: appdirs
|
|
49
|
+
Requires-Dist: Click
|
|
50
|
+
Requires-Dist: findimports
|
|
51
|
+
Requires-Dist: requests
|
|
52
|
+
Requires-Dist: semver
|
|
53
|
+
Requires-Dist: toml
|
|
34
54
|
Requires-Dist: update_checker
|
|
35
|
-
Provides-Extra:
|
|
36
|
-
Requires-Dist: pytest; extra == "
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist: pytest-
|
|
39
|
-
Requires-Dist: pytest-random-order
|
|
40
|
-
Requires-Dist: pytest-faulthandler; extra == "tests"
|
|
41
|
-
Requires-Dist: coverage; extra == "tests"
|
|
42
|
-
Requires-Dist: black; extra == "tests"
|
|
43
|
-
Provides-Extra: docs
|
|
44
|
-
Requires-Dist: sphinx; extra == "docs"
|
|
45
|
-
Provides-Extra: package
|
|
46
|
-
Requires-Dist: wheel; extra == "package"
|
|
47
|
-
Requires-Dist: twine; extra == "package"
|
|
48
|
-
Provides-Extra: dev
|
|
49
|
-
Requires-Dist: pytest; extra == "dev"
|
|
50
|
-
Requires-Dist: pylint; extra == "dev"
|
|
51
|
-
Requires-Dist: pytest-cov; extra == "dev"
|
|
52
|
-
Requires-Dist: pytest-random-order>=1.0.0; extra == "dev"
|
|
53
|
-
Requires-Dist: pytest-faulthandler; extra == "dev"
|
|
54
|
-
Requires-Dist: coverage; extra == "dev"
|
|
55
|
-
Requires-Dist: black; extra == "dev"
|
|
56
|
-
Requires-Dist: sphinx; extra == "dev"
|
|
57
|
-
Requires-Dist: wheel; extra == "dev"
|
|
58
|
-
Requires-Dist: twine; extra == "dev"
|
|
59
|
-
Provides-Extra: all
|
|
60
|
-
Requires-Dist: pytest; extra == "all"
|
|
61
|
-
Requires-Dist: sphinx; extra == "all"
|
|
62
|
-
Requires-Dist: wheel; extra == "all"
|
|
63
|
-
Requires-Dist: pytest-random-order>=1.0.0; extra == "all"
|
|
64
|
-
Requires-Dist: pytest-faulthandler; extra == "all"
|
|
65
|
-
Requires-Dist: coverage; extra == "all"
|
|
66
|
-
Requires-Dist: pylint; extra == "all"
|
|
67
|
-
Requires-Dist: twine; extra == "all"
|
|
68
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
69
|
-
Requires-Dist: black; extra == "all"
|
|
55
|
+
Provides-Extra: optional
|
|
56
|
+
Requires-Dist: pytest; extra == "optional"
|
|
57
|
+
Requires-Dist: pytest-cov; extra == "optional"
|
|
58
|
+
Requires-Dist: pytest-faulthandler; extra == "optional"
|
|
59
|
+
Requires-Dist: pytest-random-order; extra == "optional"
|
|
70
60
|
|
|
71
61
|
|
|
72
62
|
CircUp
|
|
@@ -29,9 +29,10 @@ class Backend:
|
|
|
29
29
|
implementations
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
|
-
def __init__(self, logger):
|
|
32
|
+
def __init__(self, logger, version_override=None):
|
|
33
33
|
self.device_location = None
|
|
34
34
|
self.LIB_DIR_PATH = None
|
|
35
|
+
self.version_override = version_override
|
|
35
36
|
self.logger = logger
|
|
36
37
|
|
|
37
38
|
def get_circuitpython_version(self):
|
|
@@ -275,7 +276,9 @@ class WebBackend(Backend):
|
|
|
275
276
|
Backend for interacting with a device via Web Workflow
|
|
276
277
|
"""
|
|
277
278
|
|
|
278
|
-
def __init__(
|
|
279
|
+
def __init__( # pylint: disable=too-many-arguments
|
|
280
|
+
self, host, password, logger, timeout=10, version_override=None
|
|
281
|
+
):
|
|
279
282
|
super().__init__(logger)
|
|
280
283
|
if password is None:
|
|
281
284
|
raise ValueError("--host needs --password")
|
|
@@ -301,6 +304,7 @@ class WebBackend(Backend):
|
|
|
301
304
|
self.session.mount(self.device_location, HTTPAdapter(max_retries=5))
|
|
302
305
|
self.library_path = self.device_location + "/" + self.LIB_DIR_PATH
|
|
303
306
|
self.timeout = timeout
|
|
307
|
+
self.version_override = version_override
|
|
304
308
|
|
|
305
309
|
def install_file_http(self, source, location=None):
|
|
306
310
|
"""
|
|
@@ -401,6 +405,9 @@ class WebBackend(Backend):
|
|
|
401
405
|
|
|
402
406
|
:return: A tuple with the version string for CircuitPython and the board ID string.
|
|
403
407
|
"""
|
|
408
|
+
if self.version_override is not None:
|
|
409
|
+
return self.version_override
|
|
410
|
+
|
|
404
411
|
# pylint: disable=arguments-renamed
|
|
405
412
|
with self.session.get(
|
|
406
413
|
self.device_location + "/cp/version.json", timeout=self.timeout
|
|
@@ -741,9 +748,10 @@ class DiskBackend(Backend):
|
|
|
741
748
|
:param logger: logger to use for outputting messages
|
|
742
749
|
:param String boot_out: Optional mock contents of a boot_out.txt file
|
|
743
750
|
to use for version information.
|
|
751
|
+
:param String version_override: Optional mock version to use.
|
|
744
752
|
"""
|
|
745
753
|
|
|
746
|
-
def __init__(self, device_location, logger, boot_out=None):
|
|
754
|
+
def __init__(self, device_location, logger, boot_out=None, version_override=None):
|
|
747
755
|
if device_location is None:
|
|
748
756
|
raise ValueError(
|
|
749
757
|
"Auto locating USB Disk based device failed. "
|
|
@@ -757,6 +765,7 @@ class DiskBackend(Backend):
|
|
|
757
765
|
self.version_info = None
|
|
758
766
|
if boot_out is not None:
|
|
759
767
|
self.version_info = self.parse_boot_out_file(boot_out)
|
|
768
|
+
self.version_override = version_override
|
|
760
769
|
|
|
761
770
|
def get_circuitpython_version(self):
|
|
762
771
|
"""
|
|
@@ -773,6 +782,9 @@ class DiskBackend(Backend):
|
|
|
773
782
|
|
|
774
783
|
:return: A tuple with the version string for CircuitPython and the board ID string.
|
|
775
784
|
"""
|
|
785
|
+
if self.version_override is not None:
|
|
786
|
+
return self.version_override
|
|
787
|
+
|
|
776
788
|
if not self.version_info:
|
|
777
789
|
try:
|
|
778
790
|
with open(
|
|
@@ -57,7 +57,10 @@ from circup.command_utils import (
|
|
|
57
57
|
help="Hostname or IP address of a device. Overrides automatic path detection.",
|
|
58
58
|
)
|
|
59
59
|
@click.option(
|
|
60
|
-
"--password",
|
|
60
|
+
"--password",
|
|
61
|
+
help="Password to use for authentication when --host is used."
|
|
62
|
+
" You can optionally set an environment variable CIRCUP_WEBWORKFLOW_PASSWORD"
|
|
63
|
+
" instead of passing this argument. If both exist the CLI arg takes precedent.",
|
|
61
64
|
)
|
|
62
65
|
@click.option(
|
|
63
66
|
"--timeout",
|
|
@@ -90,6 +93,10 @@ def main( # pylint: disable=too-many-locals
|
|
|
90
93
|
# pylint: disable=too-many-arguments,too-many-branches,too-many-statements,too-many-locals
|
|
91
94
|
ctx.ensure_object(dict)
|
|
92
95
|
ctx.obj["TIMEOUT"] = timeout
|
|
96
|
+
|
|
97
|
+
if password is None:
|
|
98
|
+
password = os.getenv("CIRCUP_WEBWORKFLOW_PASSWORD")
|
|
99
|
+
|
|
93
100
|
device_path = get_device_path(host, password, path)
|
|
94
101
|
|
|
95
102
|
using_webworkflow = "host" in ctx.params.keys() and ctx.params["host"] is not None
|
|
@@ -105,7 +112,11 @@ def main( # pylint: disable=too-many-locals
|
|
|
105
112
|
device_path = device_path.replace("circuitpython.local", host)
|
|
106
113
|
try:
|
|
107
114
|
ctx.obj["backend"] = WebBackend(
|
|
108
|
-
host=host,
|
|
115
|
+
host=host,
|
|
116
|
+
password=password,
|
|
117
|
+
logger=logger,
|
|
118
|
+
timeout=timeout,
|
|
119
|
+
version_override=cpy_version,
|
|
109
120
|
)
|
|
110
121
|
except ValueError as e:
|
|
111
122
|
click.secho(e, fg="red")
|
|
@@ -116,7 +127,11 @@ def main( # pylint: disable=too-many-locals
|
|
|
116
127
|
sys.exit(1)
|
|
117
128
|
else:
|
|
118
129
|
try:
|
|
119
|
-
ctx.obj["backend"] = DiskBackend(
|
|
130
|
+
ctx.obj["backend"] = DiskBackend(
|
|
131
|
+
device_path,
|
|
132
|
+
logger,
|
|
133
|
+
version_override=cpy_version,
|
|
134
|
+
)
|
|
120
135
|
except ValueError as e:
|
|
121
136
|
print(e)
|
|
122
137
|
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: circup
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: A tool to manage/update libraries on CircuitPython devices.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: Adafruit Industries <circuitpython@adafruit.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2019 Adafruit Industries
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: homepage, https://github.com/adafruit/circup
|
|
9
29
|
Keywords: adafruit,blinka,circuitpython,micropython,libraries
|
|
10
30
|
Classifier: Development Status :: 3 - Alpha
|
|
11
31
|
Classifier: Environment :: Console
|
|
@@ -15,58 +35,28 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
15
35
|
Classifier: Operating System :: POSIX
|
|
16
36
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
17
37
|
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
-
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
38
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
39
|
Classifier: Programming Language :: Python :: 3.9
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
42
|
Classifier: Topic :: Education
|
|
23
43
|
Classifier: Topic :: Software Development :: Embedded Systems
|
|
24
44
|
Classifier: Topic :: System :: Software Distribution
|
|
45
|
+
Requires-Python: >=3.9
|
|
25
46
|
Description-Content-Type: text/x-rst
|
|
26
47
|
License-File: LICENSE
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: Click
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist: requests
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist: toml
|
|
33
|
-
Requires-Dist: importlib_metadata; python_version == "3.7"
|
|
48
|
+
Requires-Dist: appdirs
|
|
49
|
+
Requires-Dist: Click
|
|
50
|
+
Requires-Dist: findimports
|
|
51
|
+
Requires-Dist: requests
|
|
52
|
+
Requires-Dist: semver
|
|
53
|
+
Requires-Dist: toml
|
|
34
54
|
Requires-Dist: update_checker
|
|
35
|
-
Provides-Extra:
|
|
36
|
-
Requires-Dist: pytest; extra == "
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist: pytest-
|
|
39
|
-
Requires-Dist: pytest-random-order
|
|
40
|
-
Requires-Dist: pytest-faulthandler; extra == "tests"
|
|
41
|
-
Requires-Dist: coverage; extra == "tests"
|
|
42
|
-
Requires-Dist: black; extra == "tests"
|
|
43
|
-
Provides-Extra: docs
|
|
44
|
-
Requires-Dist: sphinx; extra == "docs"
|
|
45
|
-
Provides-Extra: package
|
|
46
|
-
Requires-Dist: wheel; extra == "package"
|
|
47
|
-
Requires-Dist: twine; extra == "package"
|
|
48
|
-
Provides-Extra: dev
|
|
49
|
-
Requires-Dist: pytest; extra == "dev"
|
|
50
|
-
Requires-Dist: pylint; extra == "dev"
|
|
51
|
-
Requires-Dist: pytest-cov; extra == "dev"
|
|
52
|
-
Requires-Dist: pytest-random-order>=1.0.0; extra == "dev"
|
|
53
|
-
Requires-Dist: pytest-faulthandler; extra == "dev"
|
|
54
|
-
Requires-Dist: coverage; extra == "dev"
|
|
55
|
-
Requires-Dist: black; extra == "dev"
|
|
56
|
-
Requires-Dist: sphinx; extra == "dev"
|
|
57
|
-
Requires-Dist: wheel; extra == "dev"
|
|
58
|
-
Requires-Dist: twine; extra == "dev"
|
|
59
|
-
Provides-Extra: all
|
|
60
|
-
Requires-Dist: pytest; extra == "all"
|
|
61
|
-
Requires-Dist: sphinx; extra == "all"
|
|
62
|
-
Requires-Dist: wheel; extra == "all"
|
|
63
|
-
Requires-Dist: pytest-random-order>=1.0.0; extra == "all"
|
|
64
|
-
Requires-Dist: pytest-faulthandler; extra == "all"
|
|
65
|
-
Requires-Dist: coverage; extra == "all"
|
|
66
|
-
Requires-Dist: pylint; extra == "all"
|
|
67
|
-
Requires-Dist: twine; extra == "all"
|
|
68
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
69
|
-
Requires-Dist: black; extra == "all"
|
|
55
|
+
Provides-Extra: optional
|
|
56
|
+
Requires-Dist: pytest; extra == "optional"
|
|
57
|
+
Requires-Dist: pytest-cov; extra == "optional"
|
|
58
|
+
Requires-Dist: pytest-faulthandler; extra == "optional"
|
|
59
|
+
Requires-Dist: pytest-random-order; extra == "optional"
|
|
70
60
|
|
|
71
61
|
|
|
72
62
|
CircUp
|
|
@@ -11,10 +11,10 @@ README.rst
|
|
|
11
11
|
README.rst.license
|
|
12
12
|
optional_requirements.txt
|
|
13
13
|
optional_requirements.txt.license
|
|
14
|
+
pyproject.toml
|
|
14
15
|
readthedocs.yml
|
|
15
16
|
requirements.txt
|
|
16
17
|
requirements.txt.license
|
|
17
|
-
setup.py
|
|
18
18
|
.github/ISSUE_TEMPLATE.md
|
|
19
19
|
.github/PULL_REQUEST_TEMPLATE.md
|
|
20
20
|
.github/workflows/build.yml
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2024 Jev Kuznetsov, ROX Automation
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
[build-system]
|
|
6
|
+
requires = ["setuptools>=61.0", "setuptools-scm"]
|
|
7
|
+
build-backend = "setuptools.build_meta"
|
|
8
|
+
|
|
9
|
+
[project]
|
|
10
|
+
name = "circup"
|
|
11
|
+
dynamic = ["version", "dependencies", "optional-dependencies"]
|
|
12
|
+
description = "A tool to manage/update libraries on CircuitPython devices."
|
|
13
|
+
readme = "README.rst"
|
|
14
|
+
authors = [{ name = "Adafruit Industries", email = "circuitpython@adafruit.com" }]
|
|
15
|
+
license = { file = "LICENSE" }
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"Intended Audience :: Education",
|
|
21
|
+
"License :: OSI Approved :: MIT License",
|
|
22
|
+
"Operating System :: POSIX",
|
|
23
|
+
"Operating System :: MacOS :: MacOS X",
|
|
24
|
+
"Operating System :: Microsoft :: Windows",
|
|
25
|
+
"Programming Language :: Python :: 3",
|
|
26
|
+
"Programming Language :: Python :: 3.9",
|
|
27
|
+
"Programming Language :: Python :: 3.10",
|
|
28
|
+
"Programming Language :: Python :: 3.11",
|
|
29
|
+
"Topic :: Education",
|
|
30
|
+
"Topic :: Software Development :: Embedded Systems",
|
|
31
|
+
"Topic :: System :: Software Distribution"
|
|
32
|
+
]
|
|
33
|
+
keywords = ["adafruit", "blinka", "circuitpython", "micropython", "libraries"]
|
|
34
|
+
|
|
35
|
+
requires-python = ">=3.9"
|
|
36
|
+
|
|
37
|
+
[tool.setuptools.dynamic]
|
|
38
|
+
dependencies = {file = ["requirements.txt"]}
|
|
39
|
+
optional-dependencies = {optional = {file = ["optional_requirements.txt"]}}
|
|
40
|
+
|
|
41
|
+
[tool.setuptools_scm]
|
|
42
|
+
|
|
43
|
+
[project.scripts]
|
|
44
|
+
circup = "circup:main"
|
|
45
|
+
|
|
46
|
+
[project.urls]
|
|
47
|
+
homepage = "https://github.com/adafruit/circup"
|
|
48
|
+
|
|
49
|
+
[tool.setuptools.packages.find]
|
|
50
|
+
where = ["."] # This tells setuptools to look in the project root directory
|
|
51
|
+
include = ["circup"] # This pattern includes your main package and any sub-packages within it
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2019 Nicholas Tollervey, written for Adafruit Industries
|
|
2
|
-
|
|
3
|
-
# SPDX-License-Identifier: MIT
|
|
4
|
-
|
|
5
|
-
name: Release Actions
|
|
6
|
-
|
|
7
|
-
on:
|
|
8
|
-
release:
|
|
9
|
-
types: [published]
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
upload-pypi:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
with:
|
|
17
|
-
show-progress: false
|
|
18
|
-
- name: Check For setup.py
|
|
19
|
-
id: need-pypi
|
|
20
|
-
run: |
|
|
21
|
-
echo ::set-output name=setup-py::$( find . -wholename './setup.py' )
|
|
22
|
-
- name: Set up Python
|
|
23
|
-
if: contains(steps.need-pypi.outputs.setup-py, 'setup.py')
|
|
24
|
-
uses: actions/setup-python@v1
|
|
25
|
-
with:
|
|
26
|
-
python-version: '3.x'
|
|
27
|
-
- name: Install dependencies
|
|
28
|
-
if: contains(steps.need-pypi.outputs.setup-py, 'setup.py')
|
|
29
|
-
run: |
|
|
30
|
-
python -m pip install --upgrade pip
|
|
31
|
-
pip install setuptools wheel twine
|
|
32
|
-
- name: Build and publish
|
|
33
|
-
if: contains(steps.need-pypi.outputs.setup-py, 'setup.py')
|
|
34
|
-
env:
|
|
35
|
-
TWINE_USERNAME: ${{ secrets.pypi_username }}
|
|
36
|
-
TWINE_PASSWORD: ${{ secrets.pypi_password }}
|
|
37
|
-
run: |
|
|
38
|
-
python setup.py sdist
|
|
39
|
-
twine upload dist/*
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
semver~=3.0
|
|
2
|
-
Click>=8.0
|
|
3
|
-
appdirs>=1.4.3
|
|
4
|
-
requests>=2.22.0
|
|
5
|
-
findimports>=2.1.0
|
|
6
|
-
toml>=0.10.2
|
|
7
|
-
update_checker
|
|
8
|
-
|
|
9
|
-
[:python_version == "3.7"]
|
|
10
|
-
importlib_metadata
|
|
11
|
-
|
|
12
|
-
[all]
|
|
13
|
-
pytest
|
|
14
|
-
sphinx
|
|
15
|
-
wheel
|
|
16
|
-
pytest-random-order>=1.0.0
|
|
17
|
-
pytest-faulthandler
|
|
18
|
-
coverage
|
|
19
|
-
pylint
|
|
20
|
-
twine
|
|
21
|
-
pytest-cov
|
|
22
|
-
black
|
|
23
|
-
|
|
24
|
-
[dev]
|
|
25
|
-
pytest
|
|
26
|
-
pylint
|
|
27
|
-
pytest-cov
|
|
28
|
-
pytest-random-order>=1.0.0
|
|
29
|
-
pytest-faulthandler
|
|
30
|
-
coverage
|
|
31
|
-
black
|
|
32
|
-
sphinx
|
|
33
|
-
wheel
|
|
34
|
-
twine
|
|
35
|
-
|
|
36
|
-
[docs]
|
|
37
|
-
sphinx
|
|
38
|
-
|
|
39
|
-
[package]
|
|
40
|
-
wheel
|
|
41
|
-
twine
|
|
42
|
-
|
|
43
|
-
[tests]
|
|
44
|
-
pytest
|
|
45
|
-
pylint
|
|
46
|
-
pytest-cov
|
|
47
|
-
pytest-random-order>=1.0.0
|
|
48
|
-
pytest-faulthandler
|
|
49
|
-
coverage
|
|
50
|
-
black
|
circup-1.9.0/setup.py
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2019 Nicholas Tollervey, written for Adafruit Industries
|
|
2
|
-
#
|
|
3
|
-
# SPDX-License-Identifier: MIT
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"""A setuptools based setup module.
|
|
7
|
-
See:
|
|
8
|
-
https://packaging.python.org/guides/distributing-packages-using-setuptools/
|
|
9
|
-
https://github.com/pypa/sampleproject
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
# Always prefer setuptools over distutils
|
|
13
|
-
from setuptools import setup, find_packages
|
|
14
|
-
|
|
15
|
-
# To use a consistent encoding
|
|
16
|
-
from codecs import open
|
|
17
|
-
from os import path
|
|
18
|
-
|
|
19
|
-
here = path.abspath(path.dirname(__file__))
|
|
20
|
-
|
|
21
|
-
# Get the long description from the README file
|
|
22
|
-
with open(path.join(here, "README.rst"), encoding="utf-8") as f:
|
|
23
|
-
long_description = f.read()
|
|
24
|
-
|
|
25
|
-
install_requires = [
|
|
26
|
-
"semver~=3.0",
|
|
27
|
-
"Click>=8.0",
|
|
28
|
-
"appdirs>=1.4.3",
|
|
29
|
-
"requests>=2.22.0",
|
|
30
|
-
"findimports>=2.1.0",
|
|
31
|
-
"toml>=0.10.2",
|
|
32
|
-
# importlib_metadata is only available for 3.7, and is not needed for 3.8 and up.
|
|
33
|
-
"importlib_metadata; python_version == '3.7'",
|
|
34
|
-
"update_checker",
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
extras_require = {
|
|
38
|
-
"tests": [
|
|
39
|
-
"pytest",
|
|
40
|
-
"pylint",
|
|
41
|
-
"pytest-cov",
|
|
42
|
-
"pytest-random-order>=1.0.0",
|
|
43
|
-
"pytest-faulthandler",
|
|
44
|
-
"coverage",
|
|
45
|
-
"black",
|
|
46
|
-
],
|
|
47
|
-
"docs": ["sphinx"],
|
|
48
|
-
"package": [
|
|
49
|
-
# Wheel building and PyPI uploading
|
|
50
|
-
"wheel",
|
|
51
|
-
"twine",
|
|
52
|
-
],
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
extras_require["dev"] = (
|
|
56
|
-
extras_require["tests"] + extras_require["docs"] + extras_require["package"]
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
extras_require["all"] = list(
|
|
60
|
-
{req for extra, reqs in extras_require.items() for req in reqs}
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
setup(
|
|
64
|
-
name="circup",
|
|
65
|
-
use_scm_version=True,
|
|
66
|
-
setup_requires=["setuptools_scm"],
|
|
67
|
-
description="A tool to manage/update libraries on CircuitPython devices.",
|
|
68
|
-
long_description=long_description,
|
|
69
|
-
long_description_content_type="text/x-rst",
|
|
70
|
-
# The project's main homepage.
|
|
71
|
-
url="https://github.com/adafruit/circup",
|
|
72
|
-
# Author details
|
|
73
|
-
author="Adafruit Industries",
|
|
74
|
-
author_email="circuitpython@adafruit.com",
|
|
75
|
-
install_requires=install_requires,
|
|
76
|
-
extras_require=extras_require,
|
|
77
|
-
# Choose your license
|
|
78
|
-
license="MIT",
|
|
79
|
-
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers
|
|
80
|
-
classifiers=[
|
|
81
|
-
"Development Status :: 3 - Alpha",
|
|
82
|
-
"Environment :: Console",
|
|
83
|
-
"Intended Audience :: Developers",
|
|
84
|
-
"Intended Audience :: Education",
|
|
85
|
-
"License :: OSI Approved :: MIT License",
|
|
86
|
-
"Operating System :: POSIX",
|
|
87
|
-
"Operating System :: MacOS :: MacOS X",
|
|
88
|
-
"Operating System :: Microsoft :: Windows",
|
|
89
|
-
"Programming Language :: Python :: 3.6",
|
|
90
|
-
"Programming Language :: Python :: 3.7",
|
|
91
|
-
"Programming Language :: Python :: 3.8",
|
|
92
|
-
"Programming Language :: Python :: 3.9",
|
|
93
|
-
"Topic :: Education",
|
|
94
|
-
"Topic :: Software Development :: Embedded Systems",
|
|
95
|
-
"Topic :: System :: Software Distribution",
|
|
96
|
-
],
|
|
97
|
-
entry_points={"console_scripts": ["circup=circup:main"]},
|
|
98
|
-
# What does your project relate to?
|
|
99
|
-
keywords="adafruit, blinka, circuitpython, micropython, libraries",
|
|
100
|
-
# You can just specify the packages manually here if your project is
|
|
101
|
-
# simple. Or you can use find_packages().
|
|
102
|
-
packages=["circup"],
|
|
103
|
-
package_data={"circup": ["config/bundle_config.json"]},
|
|
104
|
-
)
|
|
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
|