duty 1.2.0__py3-none-any.whl → 1.4.0__py3-none-any.whl
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.
- duty/callables/__init__.py +32 -24
- duty/callables/build.py +76 -0
- duty/callables/git_changelog.py +178 -0
- duty/callables/griffe.py +227 -0
- duty/callables/twine.py +284 -0
- duty/cli.py +2 -0
- duty/context.py +6 -1
- duty/debug.py +4 -1
- duty/tools/__init__.py +48 -0
- duty/tools/_autoflake.py +138 -0
- duty/tools/_base.py +66 -0
- duty/tools/_black.py +184 -0
- duty/tools/_blacken_docs.py +115 -0
- duty/tools/_build.py +84 -0
- duty/tools/_coverage.py +721 -0
- duty/tools/_flake8.py +230 -0
- duty/tools/_git_changelog.py +186 -0
- duty/tools/_griffe.py +226 -0
- duty/tools/_interrogate.py +160 -0
- duty/tools/_isort.py +579 -0
- duty/tools/_mkdocs.py +271 -0
- duty/tools/_mypy.py +502 -0
- duty/tools/_pytest.py +483 -0
- duty/tools/_ruff.py +451 -0
- duty/tools/_safety.py +97 -0
- duty/tools/_ssort.py +44 -0
- duty/tools/_twine.py +289 -0
- duty/validation.py +24 -6
- {duty-1.2.0.dist-info → duty-1.4.0.dist-info}/METADATA +8 -5
- duty-1.4.0.dist-info/RECORD +53 -0
- {duty-1.2.0.dist-info → duty-1.4.0.dist-info}/WHEEL +1 -1
- duty-1.2.0.dist-info/RECORD +0 -30
- {duty-1.2.0.dist-info → duty-1.4.0.dist-info}/entry_points.txt +0 -0
- {duty-1.2.0.dist-info → duty-1.4.0.dist-info}/licenses/LICENSE +0 -0
duty/tools/_twine.py
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""Callable for [Twine](https://github.com/pypa/twine)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from duty.tools._base import Tool
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class twine(Tool): # noqa: N801
|
|
9
|
+
"""Call [Twine](https://github.com/pypa/twine)."""
|
|
10
|
+
|
|
11
|
+
cli_name = "twine"
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
def check(
|
|
15
|
+
cls,
|
|
16
|
+
*dists: str,
|
|
17
|
+
strict: bool = False,
|
|
18
|
+
version: bool = False,
|
|
19
|
+
no_color: bool = False,
|
|
20
|
+
) -> twine:
|
|
21
|
+
"""Checks whether your distribution's long description will render correctly on PyPI.
|
|
22
|
+
|
|
23
|
+
Parameters:
|
|
24
|
+
dists: The distribution files to check, usually `dist/*`.
|
|
25
|
+
strict: Fail on warnings.
|
|
26
|
+
version: Show program's version number and exit.
|
|
27
|
+
no_color: Disable colored output.
|
|
28
|
+
"""
|
|
29
|
+
cli_args = ["check", *dists]
|
|
30
|
+
|
|
31
|
+
if version:
|
|
32
|
+
cli_args.append("--version")
|
|
33
|
+
|
|
34
|
+
if no_color:
|
|
35
|
+
cli_args.append("--no-color")
|
|
36
|
+
|
|
37
|
+
if strict is True:
|
|
38
|
+
cli_args.append("--strict")
|
|
39
|
+
|
|
40
|
+
return cls(cli_args)
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def register(
|
|
44
|
+
cls,
|
|
45
|
+
package: str,
|
|
46
|
+
*,
|
|
47
|
+
repository: str = "pypi",
|
|
48
|
+
repository_url: str | None = None,
|
|
49
|
+
attestations: bool = False,
|
|
50
|
+
sign: bool = False,
|
|
51
|
+
sign_with: str | None = None,
|
|
52
|
+
identity: str | None = None,
|
|
53
|
+
username: str | None = None,
|
|
54
|
+
password: str | None = None,
|
|
55
|
+
non_interactive: bool = False,
|
|
56
|
+
comment: str | None = None,
|
|
57
|
+
config_file: str | None = None,
|
|
58
|
+
skip_existing: bool = False,
|
|
59
|
+
cert: str | None = None,
|
|
60
|
+
client_cert: str | None = None,
|
|
61
|
+
verbose: bool = False,
|
|
62
|
+
disable_progress_bar: bool = False,
|
|
63
|
+
version: bool = False,
|
|
64
|
+
no_color: bool = False,
|
|
65
|
+
) -> twine:
|
|
66
|
+
"""Pre-register a name with a repository before uploading a distribution.
|
|
67
|
+
|
|
68
|
+
Pre-registration is not supported on PyPI, so the register command
|
|
69
|
+
is only necessary if you are using a different repository that requires it.
|
|
70
|
+
|
|
71
|
+
Parameters:
|
|
72
|
+
package: File from which we read the package metadata.
|
|
73
|
+
repository: The repository (package index) to upload the package to.
|
|
74
|
+
Should be a section in the config file (default: `pypi`).
|
|
75
|
+
Can also be set via `TWINE_REPOSITORY` environment variable.
|
|
76
|
+
repository_url: The repository (package index) URL to upload the package to. This overrides `--repository`.
|
|
77
|
+
Can also be set via `TWINE_REPOSITORY_URL` environment variable.
|
|
78
|
+
attestations: Upload each file's associated attestations.
|
|
79
|
+
sign: Sign files to upload using GPG.
|
|
80
|
+
sign_with: GPG program used to sign uploads (default: `gpg`).
|
|
81
|
+
identity: GPG identity used to sign files.
|
|
82
|
+
username: The username to authenticate to the repository (package index) as.
|
|
83
|
+
Can also be set via `TWINE_USERNAME` environment variable.
|
|
84
|
+
password: The password to authenticate to the repository (package index) with.
|
|
85
|
+
Can also be set via `TWINE_PASSWORD` environment variable.
|
|
86
|
+
non_interactive: Do not interactively prompt for username/password if the required credentials are missing.
|
|
87
|
+
Can also be set via `TWINE_NON_INTERACTIVE` environment variable.
|
|
88
|
+
comment: The comment to include with the distribution file.
|
|
89
|
+
config_file: The `.pypirc` config file to use.
|
|
90
|
+
skip_existing: Continue uploading files if one already exists.
|
|
91
|
+
Only valid when uploading to PyPI. Other implementations may not support this.
|
|
92
|
+
cert: Path to alternate CA bundle (can also be set via `TWINE_CERT` environment variable).
|
|
93
|
+
client_cert: Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.
|
|
94
|
+
verbose: Show verbose output.
|
|
95
|
+
disable_progress_bar: Disable the progress bar.
|
|
96
|
+
version: Show program's version number and exit.
|
|
97
|
+
no_color: Disable colored output.
|
|
98
|
+
"""
|
|
99
|
+
cli_args = ["register", package]
|
|
100
|
+
|
|
101
|
+
if version:
|
|
102
|
+
cli_args.append("--version")
|
|
103
|
+
|
|
104
|
+
if no_color:
|
|
105
|
+
cli_args.append("--no-color")
|
|
106
|
+
|
|
107
|
+
if repository:
|
|
108
|
+
cli_args.append("--repository")
|
|
109
|
+
cli_args.append(repository)
|
|
110
|
+
|
|
111
|
+
if repository_url:
|
|
112
|
+
cli_args.append("--repository-url")
|
|
113
|
+
cli_args.append(repository_url)
|
|
114
|
+
|
|
115
|
+
if attestations:
|
|
116
|
+
cli_args.append("--attestations")
|
|
117
|
+
|
|
118
|
+
if sign:
|
|
119
|
+
cli_args.append("--sign")
|
|
120
|
+
|
|
121
|
+
if sign_with:
|
|
122
|
+
cli_args.append("--sign-with")
|
|
123
|
+
cli_args.append(sign_with)
|
|
124
|
+
|
|
125
|
+
if identity:
|
|
126
|
+
cli_args.append("--identity")
|
|
127
|
+
cli_args.append(identity)
|
|
128
|
+
|
|
129
|
+
if username:
|
|
130
|
+
cli_args.append("--username")
|
|
131
|
+
cli_args.append(username)
|
|
132
|
+
|
|
133
|
+
if password:
|
|
134
|
+
cli_args.append("--password")
|
|
135
|
+
cli_args.append(password)
|
|
136
|
+
|
|
137
|
+
if non_interactive:
|
|
138
|
+
cli_args.append("--non-interactive")
|
|
139
|
+
|
|
140
|
+
if comment:
|
|
141
|
+
cli_args.append("--repository")
|
|
142
|
+
|
|
143
|
+
if config_file:
|
|
144
|
+
cli_args.append("--config-file")
|
|
145
|
+
cli_args.append(config_file)
|
|
146
|
+
|
|
147
|
+
if skip_existing:
|
|
148
|
+
cli_args.append("--skip-existing")
|
|
149
|
+
|
|
150
|
+
if cert:
|
|
151
|
+
cli_args.append("--cert")
|
|
152
|
+
cli_args.append(cert)
|
|
153
|
+
|
|
154
|
+
if client_cert:
|
|
155
|
+
cli_args.append("--client-cert")
|
|
156
|
+
cli_args.append(client_cert)
|
|
157
|
+
|
|
158
|
+
if verbose:
|
|
159
|
+
cli_args.append("--verbose")
|
|
160
|
+
|
|
161
|
+
if disable_progress_bar:
|
|
162
|
+
cli_args.append("--disable-progress-bar")
|
|
163
|
+
|
|
164
|
+
return cls(cli_args)
|
|
165
|
+
|
|
166
|
+
@classmethod
|
|
167
|
+
def upload(
|
|
168
|
+
cls,
|
|
169
|
+
*dists: str,
|
|
170
|
+
repository: str = "pypi",
|
|
171
|
+
repository_url: str | None = None,
|
|
172
|
+
attestations: bool = False,
|
|
173
|
+
sign: bool = False,
|
|
174
|
+
sign_with: str | None = None,
|
|
175
|
+
identity: str | None = None,
|
|
176
|
+
username: str | None = None,
|
|
177
|
+
password: str | None = None,
|
|
178
|
+
non_interactive: bool = False,
|
|
179
|
+
comment: str | None = None,
|
|
180
|
+
config_file: str | None = None,
|
|
181
|
+
skip_existing: bool = False,
|
|
182
|
+
cert: str | None = None,
|
|
183
|
+
client_cert: str | None = None,
|
|
184
|
+
verbose: bool = False,
|
|
185
|
+
disable_progress_bar: bool = False,
|
|
186
|
+
version: bool = False,
|
|
187
|
+
no_color: bool = False,
|
|
188
|
+
) -> twine:
|
|
189
|
+
"""Uploads one or more distributions to a repository.
|
|
190
|
+
|
|
191
|
+
Parameters:
|
|
192
|
+
dists: The distribution files to check, usually `dist/*`.
|
|
193
|
+
repository: The repository (package index) to upload the package to.
|
|
194
|
+
Should be a section in the config file (default: `pypi`).
|
|
195
|
+
Can also be set via `TWINE_REPOSITORY` environment variable.
|
|
196
|
+
repository_url: The repository (package index) URL to upload the package to. This overrides `--repository`.
|
|
197
|
+
Can also be set via `TWINE_REPOSITORY_URL` environment variable.
|
|
198
|
+
attestations: Upload each file's associated attestations.
|
|
199
|
+
sign: Sign files to upload using GPG.
|
|
200
|
+
sign_with: GPG program used to sign uploads (default: `gpg`).
|
|
201
|
+
identity: GPG identity used to sign files.
|
|
202
|
+
username: The username to authenticate to the repository (package index) as.
|
|
203
|
+
Can also be set via `TWINE_USERNAME` environment variable.
|
|
204
|
+
password: The password to authenticate to the repository (package index) with.
|
|
205
|
+
Can also be set via `TWINE_PASSWORD` environment variable.
|
|
206
|
+
non_interactive: Do not interactively prompt for username/password if the required credentials are missing.
|
|
207
|
+
Can also be set via `TWINE_NON_INTERACTIVE` environment variable.
|
|
208
|
+
comment: The comment to include with the distribution file.
|
|
209
|
+
config_file: The `.pypirc` config file to use.
|
|
210
|
+
skip_existing: Continue uploading files if one already exists.
|
|
211
|
+
Only valid when uploading to PyPI. Other implementations may not support this.
|
|
212
|
+
cert: Path to alternate CA bundle (can also be set via `TWINE_CERT` environment variable).
|
|
213
|
+
client_cert: Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.
|
|
214
|
+
verbose: Show verbose output.
|
|
215
|
+
disable_progress_bar: Disable the progress bar.
|
|
216
|
+
version: Show program's version number and exit.
|
|
217
|
+
no_color: Disable colored output.
|
|
218
|
+
"""
|
|
219
|
+
cli_args = ["upload", *dists]
|
|
220
|
+
|
|
221
|
+
if version:
|
|
222
|
+
cli_args.append("--version")
|
|
223
|
+
|
|
224
|
+
if no_color:
|
|
225
|
+
cli_args.append("--no-color")
|
|
226
|
+
|
|
227
|
+
if repository:
|
|
228
|
+
cli_args.append("--repository")
|
|
229
|
+
cli_args.append(repository)
|
|
230
|
+
|
|
231
|
+
if repository_url:
|
|
232
|
+
cli_args.append("--repository-url")
|
|
233
|
+
cli_args.append(repository_url)
|
|
234
|
+
|
|
235
|
+
if attestations:
|
|
236
|
+
cli_args.append("--attestations")
|
|
237
|
+
|
|
238
|
+
if sign:
|
|
239
|
+
cli_args.append("--sign")
|
|
240
|
+
|
|
241
|
+
if sign_with:
|
|
242
|
+
cli_args.append("--sign-with")
|
|
243
|
+
cli_args.append(sign_with)
|
|
244
|
+
|
|
245
|
+
if identity:
|
|
246
|
+
cli_args.append("--identity")
|
|
247
|
+
cli_args.append(identity)
|
|
248
|
+
|
|
249
|
+
if username:
|
|
250
|
+
cli_args.append("--username")
|
|
251
|
+
cli_args.append(username)
|
|
252
|
+
|
|
253
|
+
if password:
|
|
254
|
+
cli_args.append("--password")
|
|
255
|
+
cli_args.append(password)
|
|
256
|
+
|
|
257
|
+
if non_interactive:
|
|
258
|
+
cli_args.append("--non-interactive")
|
|
259
|
+
|
|
260
|
+
if comment:
|
|
261
|
+
cli_args.append("--repository")
|
|
262
|
+
|
|
263
|
+
if config_file:
|
|
264
|
+
cli_args.append("--config-file")
|
|
265
|
+
cli_args.append(config_file)
|
|
266
|
+
|
|
267
|
+
if skip_existing:
|
|
268
|
+
cli_args.append("--skip-existing")
|
|
269
|
+
|
|
270
|
+
if cert:
|
|
271
|
+
cli_args.append("--cert")
|
|
272
|
+
cli_args.append(cert)
|
|
273
|
+
|
|
274
|
+
if client_cert:
|
|
275
|
+
cli_args.append("--client-cert")
|
|
276
|
+
cli_args.append(client_cert)
|
|
277
|
+
|
|
278
|
+
if verbose:
|
|
279
|
+
cli_args.append("--verbose")
|
|
280
|
+
|
|
281
|
+
if disable_progress_bar:
|
|
282
|
+
cli_args.append("--disable-progress-bar")
|
|
283
|
+
|
|
284
|
+
return cls(cli_args)
|
|
285
|
+
|
|
286
|
+
def __call__(self) -> None:
|
|
287
|
+
from twine.cli import dispatch as run_twine
|
|
288
|
+
|
|
289
|
+
return run_twine(self.cli_args)
|
duty/validation.py
CHANGED
|
@@ -9,9 +9,21 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
import sys
|
|
11
11
|
import textwrap
|
|
12
|
+
from contextlib import suppress
|
|
12
13
|
from functools import cached_property
|
|
13
14
|
from inspect import Parameter, Signature, signature
|
|
14
|
-
from typing import Any, Callable, Sequence
|
|
15
|
+
from typing import Any, Callable, ForwardRef, Sequence, Union, get_args, get_origin
|
|
16
|
+
|
|
17
|
+
# TODO: Update once support for Python 3.9 is dropped.
|
|
18
|
+
if sys.version_info < (3, 10):
|
|
19
|
+
from eval_type_backport import eval_type_backport as eval_type
|
|
20
|
+
|
|
21
|
+
union_types = (Union,)
|
|
22
|
+
else:
|
|
23
|
+
from types import UnionType
|
|
24
|
+
from typing import _eval_type as eval_type # type: ignore[attr-defined]
|
|
25
|
+
|
|
26
|
+
union_types = (Union, UnionType)
|
|
15
27
|
|
|
16
28
|
|
|
17
29
|
def to_bool(value: str) -> bool:
|
|
@@ -40,6 +52,12 @@ def cast_arg(arg: Any, annotation: Any) -> Any:
|
|
|
40
52
|
return arg
|
|
41
53
|
if annotation is bool:
|
|
42
54
|
annotation = to_bool
|
|
55
|
+
if get_origin(annotation) in union_types:
|
|
56
|
+
for sub_annotation in get_args(annotation):
|
|
57
|
+
if sub_annotation is type(None):
|
|
58
|
+
continue
|
|
59
|
+
with suppress(Exception):
|
|
60
|
+
return cast_arg(arg, sub_annotation)
|
|
43
61
|
try:
|
|
44
62
|
return annotation(arg)
|
|
45
63
|
except Exception: # noqa: BLE001
|
|
@@ -65,11 +83,9 @@ class ParamsCaster:
|
|
|
65
83
|
Returns:
|
|
66
84
|
The position of the variable positional parameter.
|
|
67
85
|
"""
|
|
68
|
-
pos
|
|
69
|
-
for param in self.params_list:
|
|
86
|
+
for pos, param in enumerate(self.params_list):
|
|
70
87
|
if param.kind is Parameter.VAR_POSITIONAL:
|
|
71
88
|
return pos
|
|
72
|
-
pos += 1
|
|
73
89
|
return -1
|
|
74
90
|
|
|
75
91
|
@cached_property
|
|
@@ -175,6 +191,7 @@ def _get_params_caster(func: Callable, *args: Any, **kwargs: Any) -> ParamsCaste
|
|
|
175
191
|
if exec_globals[name] is annotations:
|
|
176
192
|
eval_str = True
|
|
177
193
|
del exec_globals[name]
|
|
194
|
+
break
|
|
178
195
|
exec_globals["__context_above"] = {}
|
|
179
196
|
|
|
180
197
|
# Don't keep first parameter: context.
|
|
@@ -188,9 +205,10 @@ def _get_params_caster(func: Callable, *args: Any, **kwargs: Any) -> ParamsCaste
|
|
|
188
205
|
param.kind,
|
|
189
206
|
default=param.default,
|
|
190
207
|
annotation=(
|
|
191
|
-
|
|
192
|
-
param.annotation,
|
|
208
|
+
eval_type(
|
|
209
|
+
ForwardRef(param.annotation) if isinstance(param.annotation, str) else param.annotation,
|
|
193
210
|
exec_globals,
|
|
211
|
+
{},
|
|
194
212
|
)
|
|
195
213
|
if param.annotation is not Parameter.empty
|
|
196
214
|
else type(param.default)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: duty
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: A simple task runner.
|
|
5
|
-
Keywords: task-runner
|
|
6
|
-
Author-Email:
|
|
5
|
+
Keywords: task-runner,task,runner,cross-platform
|
|
6
|
+
Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
|
|
7
7
|
License: ISC
|
|
8
8
|
Classifier: Development Status :: 4 - Beta
|
|
9
9
|
Classifier: Intended Audience :: Developers
|
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
19
|
Classifier: Topic :: Documentation
|
|
19
20
|
Classifier: Topic :: Software Development
|
|
20
21
|
Classifier: Topic :: Utilities
|
|
@@ -28,15 +29,17 @@ Project-URL: Discussions, https://github.com/pawamoy/duty/discussions
|
|
|
28
29
|
Project-URL: Gitter, https://gitter.im/duty/community
|
|
29
30
|
Project-URL: Funding, https://github.com/sponsors/pawamoy
|
|
30
31
|
Requires-Python: >=3.8
|
|
32
|
+
Requires-Dist: eval-type-backport; python_version < "3.10"
|
|
31
33
|
Requires-Dist: failprint!=1.0.0,>=0.11
|
|
34
|
+
Requires-Dist: typing-extensions>=4.0; python_version < "3.11"
|
|
32
35
|
Description-Content-Type: text/markdown
|
|
33
36
|
|
|
34
37
|
# duty
|
|
35
38
|
|
|
36
39
|
[](https://github.com/pawamoy/duty/actions?query=workflow%3Aci)
|
|
37
|
-
[](https://pawamoy.github.io/duty/)
|
|
38
41
|
[](https://pypi.org/project/duty/)
|
|
39
|
-
[](https://gitpod.io/#https://github.com/pawamoy/duty)
|
|
40
43
|
[](https://app.gitter.im/#/room/#duty:gitter.im)
|
|
41
44
|
|
|
42
45
|
A simple task runner.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
duty-1.4.0.dist-info/METADATA,sha256=-Slc5ZJnaArw095POkMTHNg-UyEIXgCzE79Iu--xWZc,2900
|
|
2
|
+
duty-1.4.0.dist-info/WHEEL,sha256=vnE8JVcI2Wz7GRKorsPArnBdnW2SWKWGow5gu5tHlRU,90
|
|
3
|
+
duty-1.4.0.dist-info/entry_points.txt,sha256=gxDUGvj_bg7DA77MogNmnGQSc2__ri9kAEp2RJ1p60Q,40
|
|
4
|
+
duty-1.4.0.dist-info/licenses/LICENSE,sha256=nQxdYSduhkgEpOTmg4yyIMmFPzcr2qrlUl8Tf9QZPug,754
|
|
5
|
+
duty/__init__.py,sha256=2fdBMNEBXYSCnV1GQm56VGe8VuvMp79-Hj3SHrAb5MM,144
|
|
6
|
+
duty/__main__.py,sha256=4YvloGDKmyVzOsE6ZdyCQyY0Jsl0LSlbqkO2UDExgmI,333
|
|
7
|
+
duty/callables/__init__.py,sha256=R42f1qpIy7m2MMbs6Xc_OnQiEARr4g2Pghpp9ry4JFI,1042
|
|
8
|
+
duty/callables/_io.py,sha256=vrMLd7ggCFDy8coWUqntmxgKC9BvFu8smK4pK2S7EeA,367
|
|
9
|
+
duty/callables/autoflake.py,sha256=5IUL2TUfrbWUs_-TBjzqsSHJOxGFiGtBuWBV6AIYdu4,4699
|
|
10
|
+
duty/callables/black.py,sha256=c2gWuhESEWRi1JGKAlMF_ZLoVJ5_bHLd7c4Lg0qyuX8,7153
|
|
11
|
+
duty/callables/blacken_docs.py,sha256=Ydd5Xhyo9LX9BCaSa5LwC2_76iG0TtA-LrrPFjSk3z8,3221
|
|
12
|
+
duty/callables/build.py,sha256=_cF8B3HKy3BWsTSLfpKwhxkZ0JVhfB3v1Zh2eO1FnQw,2150
|
|
13
|
+
duty/callables/coverage.py,sha256=3F2DeHyB-L-Y4v_qJU3TIGPNISnX_Nwn79JtmdE-a-0,23843
|
|
14
|
+
duty/callables/flake8.py,sha256=3uqFdZUF3B35Zc-otjrZfUQgEQkQ3ecZd0ZlEH83sZc,8476
|
|
15
|
+
duty/callables/git_changelog.py,sha256=UVojhK44Qx6wFVDQIDaqd2aMl7m3iZxQTErHVZpBMfQ,7455
|
|
16
|
+
duty/callables/griffe.py,sha256=J1ji2OFuGXvg-Pa9a1LXeolesk2EViiToNtrV4WBuuM,7391
|
|
17
|
+
duty/callables/interrogate.py,sha256=ZtpryCRAHXVumRJ5SUBib8lBxAcXmdZxGZvIXiiZ2C8,5060
|
|
18
|
+
duty/callables/isort.py,sha256=WutuLM1CZiobHK4Kl2N22xbZg7d0JU6MBZV2muvyG94,26437
|
|
19
|
+
duty/callables/mkdocs.py,sha256=laaToR_KGsPYX7zcVa9u0fC7mMbKR5PYi5g_5pBW_J8,7902
|
|
20
|
+
duty/callables/mypy.py,sha256=qtdOxX4x1VeEXCgY_Mw9EzKs0flBU86Ih4PKgf1WyT4,19797
|
|
21
|
+
duty/callables/pytest.py,sha256=GJHRZCeRhItqOA-ikcFmr9WdpN7ohwTRIIgKl7pWKyw,18345
|
|
22
|
+
duty/callables/ruff.py,sha256=kK4FtxEZSz5D3Evc-BLpk1GscR73m4kpXHeacC7plPc,13312
|
|
23
|
+
duty/callables/safety.py,sha256=sTjBad1y3Cly__QOT_z29e8KD4YOPi9FFAV1UlW-niM,2389
|
|
24
|
+
duty/callables/ssort.py,sha256=Lqak-xfJtKkj3AaI4_jPeaRkZ9SbvMCYhoUIVVHE6s8,842
|
|
25
|
+
duty/callables/twine.py,sha256=hsp8TcOYlbHCCqRwglDmNHS55LdnXFd-n2tFaJkMafs,9511
|
|
26
|
+
duty/cli.py,sha256=9uca96F31uTzWJuREU0ReWGhXntvjQaoSW6ZkUxBTV4,8521
|
|
27
|
+
duty/collection.py,sha256=cri--t6aUmOw3c17yCy9tAp_ceHfEQMhf4tMqPssNa0,6590
|
|
28
|
+
duty/context.py,sha256=T5PNPY6lqXQ088EriWljveFn1SWfrQNVicFbDcnk0GU,3191
|
|
29
|
+
duty/debug.py,sha256=9stdqxNJ9zA2HWsYfmy3C9BrWOXLlHYRGsQ6dHfCUfM,2813
|
|
30
|
+
duty/decorator.py,sha256=1IVYNOeVhLv4OkFtXAXcFKyy8xypfQBh3WM8aJLKohU,2986
|
|
31
|
+
duty/exceptions.py,sha256=gTtqtqOiMroP5-83kC5jakuwBfYKpzCQHE9RWfAGRv0,358
|
|
32
|
+
duty/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
duty/tools/__init__.py,sha256=soQxh0HEwSV5zZhfv5DEIpBonk53-JRE0YvcXfWvPI8,1179
|
|
34
|
+
duty/tools/_autoflake.py,sha256=wDqNyfuC6rju9LqyTTimaQZs_8v7YvYECzdltO5rof0,5285
|
|
35
|
+
duty/tools/_base.py,sha256=MpjsSguxu_O6HAOkIy0hZdP2RkguS-NGVhYQHPnurWA,1474
|
|
36
|
+
duty/tools/_black.py,sha256=avo5-J2gHeXlOneYC0j1PSV7J-QFfPFUTdbwczsMvrA,7907
|
|
37
|
+
duty/tools/_blacken_docs.py,sha256=OgOSBINydrwLoITy4aoYulaQ7yE4-wCzAZ8ILN5GFng,4632
|
|
38
|
+
duty/tools/_build.py,sha256=QbOZzeR9T_mWkF9poalOkCWuYe22E1liMUC7aBQTJ5k,2567
|
|
39
|
+
duty/tools/_coverage.py,sha256=UKCu-DLyW_-en_Hn9qsh4kXyfrL7DK82VOw9Hblkh_g,26341
|
|
40
|
+
duty/tools/_flake8.py,sha256=ZmV_1Hy773fzP40LDNmj8YJslWatldl0qfr_g2pcgrI,9371
|
|
41
|
+
duty/tools/_git_changelog.py,sha256=rqpNDt2xoEKePQHxtQ3ReumsSjrcvUlaop1NsO_w-9E,8247
|
|
42
|
+
duty/tools/_griffe.py,sha256=ZMmreXk6iQbXtoiObwyPEWiQ5P89BpRDg-A00isvr_A,7944
|
|
43
|
+
duty/tools/_interrogate.py,sha256=7A9qlWsoQRk2NUlJzE_0_OiG5Infl5IF8ehEiWfqZno,5730
|
|
44
|
+
duty/tools/_isort.py,sha256=VbQbK4iPVNWNYlmOPDEnEcFVB6fJ66W-8s36bS9HziQ,28352
|
|
45
|
+
duty/tools/_mkdocs.py,sha256=GfhXUScTjGQK5Djg6fAGtLSSssdbhebL2AonG5FGPV0,9027
|
|
46
|
+
duty/tools/_mypy.py,sha256=6La6BTfTfMlpA4-JO8dn1O0QQ1zaVEUEp5M6cRmPr7k,21555
|
|
47
|
+
duty/tools/_pytest.py,sha256=HG5jmRbdCKMK6-6i8cDd4MZ1CsDhHa0TQyjls0vy1WU,20064
|
|
48
|
+
duty/tools/_ruff.py,sha256=9GTG4lgN1SJQFP_tg2CmqYo5hh735KkYWG8CevmavQU,15226
|
|
49
|
+
duty/tools/_safety.py,sha256=3kQOko-z07w8S-zq3Qs1FdVXSdY3F13QgRsx1NPPxOg,3141
|
|
50
|
+
duty/tools/_ssort.py,sha256=xhh5eYq16BC8KTSKDCxA10mR8RZoQuN10-xUjhu3QlE,1097
|
|
51
|
+
duty/tools/_twine.py,sha256=9y7-X9fqZ6wbOddGtxBMePI7hgq9QldYyMHxRBy_JXg,10347
|
|
52
|
+
duty/validation.py,sha256=1teu9-04anIShuOeWVcqhXLfvWOFKTSRdrclsGMZxdU,8052
|
|
53
|
+
duty-1.4.0.dist-info/RECORD,,
|
duty-1.2.0.dist-info/RECORD
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
duty-1.2.0.dist-info/METADATA,sha256=tfki6IuLH8oKRFwO-ey-lyrrWbBh5oZtLn1hEunu-fI,2717
|
|
2
|
-
duty-1.2.0.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
|
|
3
|
-
duty-1.2.0.dist-info/entry_points.txt,sha256=gxDUGvj_bg7DA77MogNmnGQSc2__ri9kAEp2RJ1p60Q,40
|
|
4
|
-
duty-1.2.0.dist-info/licenses/LICENSE,sha256=nQxdYSduhkgEpOTmg4yyIMmFPzcr2qrlUl8Tf9QZPug,754
|
|
5
|
-
duty/__init__.py,sha256=2fdBMNEBXYSCnV1GQm56VGe8VuvMp79-Hj3SHrAb5MM,144
|
|
6
|
-
duty/__main__.py,sha256=4YvloGDKmyVzOsE6ZdyCQyY0Jsl0LSlbqkO2UDExgmI,333
|
|
7
|
-
duty/callables/__init__.py,sha256=U1vfn41ZtDDdje9yLwmrdcoJ8jxANARdTCvZ8paX8W0,1661
|
|
8
|
-
duty/callables/_io.py,sha256=vrMLd7ggCFDy8coWUqntmxgKC9BvFu8smK4pK2S7EeA,367
|
|
9
|
-
duty/callables/autoflake.py,sha256=5IUL2TUfrbWUs_-TBjzqsSHJOxGFiGtBuWBV6AIYdu4,4699
|
|
10
|
-
duty/callables/black.py,sha256=c2gWuhESEWRi1JGKAlMF_ZLoVJ5_bHLd7c4Lg0qyuX8,7153
|
|
11
|
-
duty/callables/blacken_docs.py,sha256=Ydd5Xhyo9LX9BCaSa5LwC2_76iG0TtA-LrrPFjSk3z8,3221
|
|
12
|
-
duty/callables/coverage.py,sha256=3F2DeHyB-L-Y4v_qJU3TIGPNISnX_Nwn79JtmdE-a-0,23843
|
|
13
|
-
duty/callables/flake8.py,sha256=3uqFdZUF3B35Zc-otjrZfUQgEQkQ3ecZd0ZlEH83sZc,8476
|
|
14
|
-
duty/callables/interrogate.py,sha256=ZtpryCRAHXVumRJ5SUBib8lBxAcXmdZxGZvIXiiZ2C8,5060
|
|
15
|
-
duty/callables/isort.py,sha256=WutuLM1CZiobHK4Kl2N22xbZg7d0JU6MBZV2muvyG94,26437
|
|
16
|
-
duty/callables/mkdocs.py,sha256=laaToR_KGsPYX7zcVa9u0fC7mMbKR5PYi5g_5pBW_J8,7902
|
|
17
|
-
duty/callables/mypy.py,sha256=qtdOxX4x1VeEXCgY_Mw9EzKs0flBU86Ih4PKgf1WyT4,19797
|
|
18
|
-
duty/callables/pytest.py,sha256=GJHRZCeRhItqOA-ikcFmr9WdpN7ohwTRIIgKl7pWKyw,18345
|
|
19
|
-
duty/callables/ruff.py,sha256=kK4FtxEZSz5D3Evc-BLpk1GscR73m4kpXHeacC7plPc,13312
|
|
20
|
-
duty/callables/safety.py,sha256=sTjBad1y3Cly__QOT_z29e8KD4YOPi9FFAV1UlW-niM,2389
|
|
21
|
-
duty/callables/ssort.py,sha256=Lqak-xfJtKkj3AaI4_jPeaRkZ9SbvMCYhoUIVVHE6s8,842
|
|
22
|
-
duty/cli.py,sha256=s62m0HO4PwdxutVX1P0H_a0yPN-mVOE5VYEJkRvJCRA,8436
|
|
23
|
-
duty/collection.py,sha256=cri--t6aUmOw3c17yCy9tAp_ceHfEQMhf4tMqPssNa0,6590
|
|
24
|
-
duty/context.py,sha256=aH1CPLnlHMnMaHc-cGTBv-xZioSLQxNIDo1xcQGuiO8,2985
|
|
25
|
-
duty/debug.py,sha256=o-g8vpvl48STTQ3SKPNroJ3sqYvivbhmmya2zo3adQ4,2683
|
|
26
|
-
duty/decorator.py,sha256=1IVYNOeVhLv4OkFtXAXcFKyy8xypfQBh3WM8aJLKohU,2986
|
|
27
|
-
duty/exceptions.py,sha256=gTtqtqOiMroP5-83kC5jakuwBfYKpzCQHE9RWfAGRv0,358
|
|
28
|
-
duty/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
-
duty/validation.py,sha256=f_H3KNWNtGgkPQSU18Q5esX3A2af6t2m_I_PnqkggOI,7305
|
|
30
|
-
duty-1.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|