ledgered 0.7.1.dev2__tar.gz → 0.7.2.dev6__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.
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/.github/workflows/build_and_tests.yml +5 -2
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/.github/workflows/fast-checks.yml +1 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/CHANGELOG.md +24 -10
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/PKG-INFO +7 -4
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/pyproject.toml +6 -3
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/__version__.py +2 -2
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/cli.py +29 -15
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/PKG-INFO +7 -4
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/functional/manifest/test_cli.py +7 -1
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/functional/test_github.py +1 -1
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/.github/workflows/codeql-analysis.yml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/.gitignore +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/LICENSE +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/README.md +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/doc/binary.md +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/doc/manifest.md +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/setup.cfg +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/binary.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/github.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/app.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/constants.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/errors.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/manifest.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/tests.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/use_cases.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/manifest/utils.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/serializers.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered/utils/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/SOURCES.txt +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/dependency_links.txt +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/entry_points.txt +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/requires.txt +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/src/ledgered.egg-info/top_level.txt +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/Cargo.toml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/Makefile +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/full_correct.toml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/ledger_app.toml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/minimal.toml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/_data/one_leaf.toml +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/functional/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/functional/conftest.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/functional/manifest/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/manifest/__init__.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/manifest/test_app.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/manifest/test_manifest.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/manifest/test_tests.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/manifest/test_use_cases.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/test_binary.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/test_github.py +0 -0
- {ledgered-0.7.1.dev2 → ledgered-0.7.2.dev6}/tests/unit/test_serializers.py +0 -0
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
strategy:
|
|
26
26
|
fail-fast: false
|
|
27
27
|
matrix:
|
|
28
|
-
python_version: ['3.
|
|
28
|
+
python_version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
29
29
|
steps:
|
|
30
30
|
- name: Clone
|
|
31
31
|
uses: actions/checkout@v4
|
|
@@ -69,8 +69,11 @@ jobs:
|
|
|
69
69
|
|
|
70
70
|
- name: Build Ledgered Python package
|
|
71
71
|
run: |
|
|
72
|
+
# Needed to workaround this bug https://github.com/pypa/setuptools/issues/4759
|
|
73
|
+
# To be removed when it's fixed
|
|
74
|
+
pip install -U packaging
|
|
72
75
|
pip install --upgrade pip build twine
|
|
73
|
-
python -m build
|
|
76
|
+
python -m build
|
|
74
77
|
pip install .
|
|
75
78
|
python -m twine check dist/*
|
|
76
79
|
echo "TAG_VERSION=$(python -c 'from ledgered import __version__; print(__version__)')" >> "$GITHUB_ENV"
|
|
@@ -5,46 +5,60 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
|
|
9
|
+
## [0.8.0] - 2025-??-??
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `ledger-manifest`: new `--url` argument allows to parse manifest from an application GH repository
|
|
14
|
+
rather than a local file.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Package tested & published on Python3.12 and 3.13. Python 3.8 support is dropped.
|
|
19
|
+
|
|
20
|
+
|
|
8
21
|
## [0.7.1] - 2024-04-30
|
|
9
22
|
|
|
10
23
|
### Fixed
|
|
11
24
|
|
|
12
25
|
- Clean error management when there is not `ledger_app.toml` manifest to access to on a given
|
|
13
|
-
repository/branch
|
|
26
|
+
repository/branch.
|
|
27
|
+
|
|
14
28
|
|
|
15
29
|
## [0.7.0] - 2024-04-12
|
|
16
30
|
|
|
17
31
|
### Added
|
|
18
32
|
|
|
19
|
-
- Added wrapper around GitHub API to ease manipulating Ledger application repositories
|
|
33
|
+
- Added wrapper around GitHub API to ease manipulating Ledger application repositories.
|
|
20
34
|
|
|
21
35
|
|
|
22
36
|
## [0.6.3] - 2024-03-26
|
|
23
37
|
|
|
24
38
|
### Fixed
|
|
25
39
|
|
|
26
|
-
- ledger-binary
|
|
40
|
+
- `ledger-binary`: NanoS SDK has a unique `target_version` section.
|
|
27
41
|
|
|
28
42
|
|
|
29
43
|
## [0.6.2] - 2024-03-26
|
|
30
44
|
|
|
31
45
|
### Fixed
|
|
32
46
|
|
|
33
|
-
- ledger-binary
|
|
47
|
+
- `ledger-binary`: Striping occasional trailing newlines in metadata content.
|
|
34
48
|
|
|
35
49
|
|
|
36
50
|
## [0.6.1] - 2024-03-26
|
|
37
51
|
|
|
38
52
|
### Fixed
|
|
39
53
|
|
|
40
|
-
- ledger-binary
|
|
54
|
+
- `ledger-binary`: Adding Rust application specific metadata sections.
|
|
41
55
|
|
|
42
56
|
|
|
43
57
|
## [0.6.0] - 2024-03-26
|
|
44
58
|
|
|
45
59
|
### Added
|
|
46
60
|
|
|
47
|
-
- ledger-binary
|
|
61
|
+
- `ledger-binary`: Adding an utilitary to parse embedded application ELF file metadatas.
|
|
48
62
|
|
|
49
63
|
### Changed
|
|
50
64
|
|
|
@@ -55,7 +69,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
55
69
|
|
|
56
70
|
### Added
|
|
57
71
|
|
|
58
|
-
- ledger-manifest
|
|
72
|
+
- `ledger-manifest`: "Europa" is now a valid `app.devices` value.
|
|
59
73
|
|
|
60
74
|
### Removed
|
|
61
75
|
|
|
@@ -100,14 +114,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
100
114
|
|
|
101
115
|
### Fixed
|
|
102
116
|
|
|
103
|
-
- ledger-manifest
|
|
117
|
+
- `ledger-manifest`: typo `test` instead of `tests` was leading to runtime AttributeError.
|
|
104
118
|
|
|
105
119
|
|
|
106
120
|
## [0.2.0] - 2023-10-19
|
|
107
121
|
|
|
108
122
|
### Changed
|
|
109
123
|
|
|
110
|
-
- ledger-manifest
|
|
124
|
+
- `ledger-manifest`: devices are output as a list "[...]" rather than a set "{...}" for easier
|
|
111
125
|
reusability.
|
|
112
126
|
|
|
113
127
|
|
|
@@ -115,5 +129,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
115
129
|
|
|
116
130
|
### Added
|
|
117
131
|
|
|
118
|
-
-
|
|
132
|
+
- `ledgered` library Python package
|
|
119
133
|
- Application 'ledger_app.toml' manifest parser utilitary
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: ledgered
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2.dev6
|
|
4
4
|
Summary: Python tools, utils, libraries, to be used with Ledger cryptodevices
|
|
5
5
|
Author-email: Ledger <hello@ledger.fr>
|
|
6
6
|
License: MIT License
|
|
@@ -27,14 +27,17 @@ License: MIT License
|
|
|
27
27
|
|
|
28
28
|
Project-URL: Home, https://github.com/LedgerHQ/ledgered
|
|
29
29
|
Classifier: License :: OSI Approved :: MIT License
|
|
30
|
-
Classifier: Programming Language :: Python :: 3
|
|
30
|
+
Classifier: Programming Language :: Python :: 3
|
|
31
31
|
Classifier: Programming Language :: Python :: 3.9
|
|
32
32
|
Classifier: Programming Language :: Python :: 3.10
|
|
33
33
|
Classifier: Programming Language :: Python :: 3.11
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
34
36
|
Classifier: Operating System :: POSIX :: Linux
|
|
35
37
|
Classifier: Operating System :: Microsoft :: Windows
|
|
36
38
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
37
|
-
|
|
39
|
+
Classifier: Typing :: Typed
|
|
40
|
+
Requires-Python: >=3.9
|
|
38
41
|
Description-Content-Type: text/markdown
|
|
39
42
|
License-File: LICENSE
|
|
40
43
|
Requires-Dist: toml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools>=
|
|
3
|
+
"setuptools>=65",
|
|
4
4
|
"setuptools_scm[toml]>=6.2",
|
|
5
5
|
"wheel"
|
|
6
6
|
]
|
|
@@ -16,16 +16,19 @@ readme = { file = "README.md", content-type = "text/markdown" }
|
|
|
16
16
|
license = { file = "LICENSE" }
|
|
17
17
|
classifiers = [
|
|
18
18
|
"License :: OSI Approved :: MIT License",
|
|
19
|
-
"Programming Language :: Python :: 3
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
20
|
"Programming Language :: Python :: 3.9",
|
|
21
21
|
"Programming Language :: Python :: 3.10",
|
|
22
22
|
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
23
25
|
"Operating System :: POSIX :: Linux",
|
|
24
26
|
"Operating System :: Microsoft :: Windows",
|
|
25
27
|
"Operating System :: MacOS :: MacOS X",
|
|
28
|
+
"Typing :: Typed",
|
|
26
29
|
]
|
|
27
30
|
dynamic = [ "version" ]
|
|
28
|
-
requires-python = ">=3.
|
|
31
|
+
requires-python = ">=3.9"
|
|
29
32
|
dependencies = [
|
|
30
33
|
"toml",
|
|
31
34
|
"pyelftools",
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '0.7.
|
|
16
|
-
__version_tuple__ = version_tuple = (0, 7,
|
|
15
|
+
__version__ = version = '0.7.2.dev6'
|
|
16
|
+
__version_tuple__ = version_tuple = (0, 7, 2, 'dev6')
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Dict
|
|
8
8
|
|
|
9
9
|
from .constants import MANIFEST_FILE_NAME
|
|
10
|
+
from ..github import GitHubLedgerHQ
|
|
10
11
|
from .manifest import Manifest
|
|
11
12
|
from .utils import getLogger
|
|
12
13
|
|
|
@@ -41,7 +42,7 @@ def set_parser() -> ArgumentParser:
|
|
|
41
42
|
"'ledger_app.toml' manifest")
|
|
42
43
|
|
|
43
44
|
# generic options
|
|
44
|
-
parser.add_argument(
|
|
45
|
+
parser.add_argument("-v", "--verbose", action="count", default=0)
|
|
45
46
|
parser.add_argument("-c",
|
|
46
47
|
"--check",
|
|
47
48
|
required=False,
|
|
@@ -52,37 +53,43 @@ def set_parser() -> ArgumentParser:
|
|
|
52
53
|
# display options
|
|
53
54
|
parser.add_argument("manifest",
|
|
54
55
|
type=Path,
|
|
55
|
-
help=f"The manifest file
|
|
56
|
-
"the application's repository"
|
|
56
|
+
help=f"The manifest file (generally '{MANIFEST_FILE_NAME}' at the root of "
|
|
57
|
+
"the application's repository), or the name of the app if the `--url` "
|
|
58
|
+
"option is activated")
|
|
59
|
+
parser.add_argument("-u",
|
|
60
|
+
"--url",
|
|
61
|
+
action="store_true",
|
|
62
|
+
default=False,
|
|
63
|
+
help="Tells if the `manifest` is a repository HTTP URL rather than a file")
|
|
57
64
|
parser.add_argument("-os",
|
|
58
65
|
"--output-sdk",
|
|
59
66
|
required=False,
|
|
60
|
-
action=
|
|
67
|
+
action="store_true",
|
|
61
68
|
default=False,
|
|
62
69
|
help="outputs the SDK type")
|
|
63
70
|
parser.add_argument("-ob",
|
|
64
71
|
"--output-build-directory",
|
|
65
72
|
required=False,
|
|
66
|
-
action=
|
|
73
|
+
action="store_true",
|
|
67
74
|
default=False,
|
|
68
75
|
help="outputs the build directory (where the Makefile in C app, or the "
|
|
69
76
|
"Cargo.toml in Rust app is expected to be)")
|
|
70
77
|
parser.add_argument("-od",
|
|
71
78
|
"--output-devices",
|
|
72
79
|
required=False,
|
|
73
|
-
action=
|
|
80
|
+
action="store_true",
|
|
74
81
|
default=False,
|
|
75
82
|
help="outputs the list of devices supported by the application")
|
|
76
83
|
parser.add_argument("-otu",
|
|
77
84
|
"--output-tests-unit-directory",
|
|
78
85
|
required=False,
|
|
79
|
-
action=
|
|
86
|
+
action="store_true",
|
|
80
87
|
default=False,
|
|
81
88
|
help="outputs the directory of the unit tests. Fails if none")
|
|
82
89
|
parser.add_argument("-otp",
|
|
83
90
|
"--output-tests-pytest-directory",
|
|
84
91
|
required=False,
|
|
85
|
-
action=
|
|
92
|
+
action="store_true",
|
|
86
93
|
default=False,
|
|
87
94
|
help="outputs the directory of the pytest (functional) tests. Fails if "
|
|
88
95
|
"none")
|
|
@@ -108,11 +115,9 @@ def set_parser() -> ArgumentParser:
|
|
|
108
115
|
return parser
|
|
109
116
|
|
|
110
117
|
|
|
111
|
-
def main(): # pragma: no cover
|
|
118
|
+
def main() -> None: # pragma: no cover
|
|
112
119
|
logger = getLogger()
|
|
113
120
|
args = set_parser().parse_args()
|
|
114
|
-
assert args.manifest.is_file(), f"'{args.manifest.resolve()}' does not appear to be a file."
|
|
115
|
-
manifest = args.manifest.resolve()
|
|
116
121
|
|
|
117
122
|
# verbosity
|
|
118
123
|
if args.verbose == 1:
|
|
@@ -121,7 +126,14 @@ def main(): # pragma: no cover
|
|
|
121
126
|
logger.setLevel(logging.DEBUG)
|
|
122
127
|
|
|
123
128
|
logger.info("Loading the manifest")
|
|
124
|
-
repo_manifest
|
|
129
|
+
repo_manifest: Manifest
|
|
130
|
+
if args.url:
|
|
131
|
+
repo_manifest = GitHubLedgerHQ().get_app(str(args.manifest)).manifest
|
|
132
|
+
else:
|
|
133
|
+
assert args.manifest.is_file(), f"'{args.manifest.resolve()}' does not appear to be a file."
|
|
134
|
+
manifest = args.manifest.resolve()
|
|
135
|
+
|
|
136
|
+
repo_manifest = Manifest.from_path(manifest)
|
|
125
137
|
|
|
126
138
|
# check directory path against manifest data
|
|
127
139
|
if args.check is not None:
|
|
@@ -131,7 +143,7 @@ def main(): # pragma: no cover
|
|
|
131
143
|
|
|
132
144
|
# no check
|
|
133
145
|
logger.info("Displaying manifest info")
|
|
134
|
-
display_content = defaultdict(dict)
|
|
146
|
+
display_content: Dict = defaultdict(dict)
|
|
135
147
|
|
|
136
148
|
if args.output_build_directory:
|
|
137
149
|
display_content["build_directory"] = str(repo_manifest.app.build_directory)
|
|
@@ -142,7 +154,7 @@ def main(): # pragma: no cover
|
|
|
142
154
|
display_content["devices"] = list(repo_manifest.app.devices)
|
|
143
155
|
|
|
144
156
|
if args.output_use_cases is not None:
|
|
145
|
-
use_cases = repo_manifest.use_cases.json
|
|
157
|
+
use_cases = repo_manifest.use_cases.json if repo_manifest.use_cases else dict()
|
|
146
158
|
non_empty = len(use_cases) > 0
|
|
147
159
|
if len(args.output_use_cases) != 0:
|
|
148
160
|
use_cases = {k: v for (k, v) in use_cases.items() if k in args.output_use_cases}
|
|
@@ -152,7 +164,9 @@ def main(): # pragma: no cover
|
|
|
152
164
|
display_content["use_cases"] = use_cases
|
|
153
165
|
|
|
154
166
|
if args.output_tests_dependencies is not None:
|
|
155
|
-
dependencies =
|
|
167
|
+
dependencies = dict()
|
|
168
|
+
if repo_manifest.tests is not None and repo_manifest.tests.dependencies is not None:
|
|
169
|
+
dependencies = repo_manifest.tests.dependencies.json
|
|
156
170
|
non_empty = len(dependencies) > 0
|
|
157
171
|
if len(args.output_tests_dependencies) != 0:
|
|
158
172
|
dependencies = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: ledgered
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2.dev6
|
|
4
4
|
Summary: Python tools, utils, libraries, to be used with Ledger cryptodevices
|
|
5
5
|
Author-email: Ledger <hello@ledger.fr>
|
|
6
6
|
License: MIT License
|
|
@@ -27,14 +27,17 @@ License: MIT License
|
|
|
27
27
|
|
|
28
28
|
Project-URL: Home, https://github.com/LedgerHQ/ledgered
|
|
29
29
|
Classifier: License :: OSI Approved :: MIT License
|
|
30
|
-
Classifier: Programming Language :: Python :: 3
|
|
30
|
+
Classifier: Programming Language :: Python :: 3
|
|
31
31
|
Classifier: Programming Language :: Python :: 3.9
|
|
32
32
|
Classifier: Programming Language :: Python :: 3.10
|
|
33
33
|
Classifier: Programming Language :: Python :: 3.11
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
34
36
|
Classifier: Operating System :: POSIX :: Linux
|
|
35
37
|
Classifier: Operating System :: Microsoft :: Windows
|
|
36
38
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
37
|
-
|
|
39
|
+
Classifier: Typing :: Typed
|
|
40
|
+
Requires-Python: >=3.9
|
|
38
41
|
Description-Content-Type: text/markdown
|
|
39
42
|
License-File: LICENSE
|
|
40
43
|
Requires-Dist: toml
|
|
@@ -98,7 +98,8 @@ class TestCLIMain(TestCase):
|
|
|
98
98
|
output_tests_unit_directory=False,
|
|
99
99
|
output_tests_pytest_directory=False,
|
|
100
100
|
output_tests_dependencies=None,
|
|
101
|
-
json=False
|
|
101
|
+
json=False,
|
|
102
|
+
url=False,
|
|
102
103
|
)
|
|
103
104
|
self.patcher1 = patch("ledgered.manifest.cli.print", PrintMock())
|
|
104
105
|
self.patcher2 = patch("ledgered.manifest.cli.set_parser")
|
|
@@ -216,6 +217,11 @@ class TestCLIMain(TestCase):
|
|
|
216
217
|
with self.assertRaises(SystemExit):
|
|
217
218
|
main()
|
|
218
219
|
|
|
220
|
+
def test_loading_from_url(self):
|
|
221
|
+
self.args.manifest = "app-boilerplate"
|
|
222
|
+
self.args.url = True
|
|
223
|
+
self.assertIsNone(main())
|
|
224
|
+
|
|
219
225
|
|
|
220
226
|
class TestCLIset_parser(TestCase):
|
|
221
227
|
|
|
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
|