check-empty 3.0.0__tar.gz → 4.0.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.
- {check_empty-3.0.0 → check_empty-4.0.0}/PKG-INFO +13 -11
- {check_empty-3.0.0 → check_empty-4.0.0}/README.md +11 -9
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/__init__.py +3 -4
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/__main__.py +6 -5
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/archives.py +14 -9
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/constants.py +2 -2
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/reporter/__init__.py +4 -1
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/reporter/abcdef.py +15 -7
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/reporter/dct.py +3 -0
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/reporter/exceptions.py +6 -2
- {check_empty-3.0.0 → check_empty-4.0.0}/pyproject.toml +12 -5
- {check_empty-3.0.0 → check_empty-4.0.0}/pyproject.toml.orig +10 -6
- {check_empty-3.0.0 → check_empty-4.0.0}/AUTHORS.md +0 -0
- {check_empty-3.0.0 → check_empty-4.0.0}/LICENSE +0 -0
- {check_empty-3.0.0 → check_empty-4.0.0}/check_empty/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: check-empty
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.0.0
|
|
4
4
|
Summary: Command-line utility, as well as a hook usable by the Python pre-commit framework, and a GitHub Action, to ensure that selected files are empty.
|
|
5
5
|
Keywords: check,command-line,empty,files,github-action,helper,hook,lightweight,pre-commit,prek,tool,utility
|
|
6
6
|
Author: Jonathan Dung
|
|
@@ -27,7 +27,7 @@ Classifier: Topic :: Utilities
|
|
|
27
27
|
Classifier: Typing :: Typed
|
|
28
28
|
Requires-Dist: py7zr==1.1.3 ; extra == '7z'
|
|
29
29
|
Requires-Dist: acefile==0.6.14 ; extra == 'ace'
|
|
30
|
-
Requires-Dist: check-empty[7z,ace,ar,lzh,rar]==
|
|
30
|
+
Requires-Dist: check-empty[7z,ace,ar,lzh,rar]==4.0.0 ; extra == 'all'
|
|
31
31
|
Requires-Dist: arpy==2.4.0 ; extra == 'ar'
|
|
32
32
|
Requires-Dist: lhafile==0.3.1 ; extra == 'lzh'
|
|
33
33
|
Requires-Dist: rarfile==4.5 ; extra == 'rar'
|
|
@@ -42,7 +42,7 @@ Provides-Extra: lzh
|
|
|
42
42
|
Provides-Extra: rar
|
|
43
43
|
Description-Content-Type: text/markdown
|
|
44
44
|
|
|
45
|
-
# [check-empty](https://pypi.org/
|
|
45
|
+
# [check-empty](https://pypi.org/project/check-empty/4.0.0)
|
|
46
46
|
|
|
47
47
|
[](https://github.com/TheBSD/StandWithPalestine/blob/main/docs/README.md)
|
|
48
48
|
|
|
@@ -126,7 +126,7 @@ As a pre-commit hook:
|
|
|
126
126
|
# .pre-commit-config.yaml
|
|
127
127
|
repos:
|
|
128
128
|
- repo: https://github.com/jonathandung/check-empty
|
|
129
|
-
rev:
|
|
129
|
+
rev: v4.0.0 # repository version
|
|
130
130
|
hooks:
|
|
131
131
|
- id: check-empty # the hook
|
|
132
132
|
args: # example list of arguments
|
|
@@ -142,7 +142,7 @@ equivalent in `prek.toml` format:
|
|
|
142
142
|
```toml
|
|
143
143
|
[[repos]]
|
|
144
144
|
repo = "https://github.com/jonathandung/check-empty"
|
|
145
|
-
rev = "
|
|
145
|
+
rev = "v4.0.0"
|
|
146
146
|
|
|
147
147
|
[[repos.hooks]]
|
|
148
148
|
id = "check-empty"
|
|
@@ -166,7 +166,7 @@ or (TOML 1.1+):
|
|
|
166
166
|
# using multiline inline tables
|
|
167
167
|
[[repos]]
|
|
168
168
|
repo = "https://github.com/jonathandung/check-empty"
|
|
169
|
-
rev = "
|
|
169
|
+
rev = "v4.0.0"
|
|
170
170
|
hooks = [{
|
|
171
171
|
id = "check-empty",
|
|
172
172
|
args = ["-Q"],
|
|
@@ -186,7 +186,7 @@ As a GitHub Actions workflow step:
|
|
|
186
186
|
|
|
187
187
|
```yaml
|
|
188
188
|
steps:
|
|
189
|
-
- uses: jonathandung/check-empty@
|
|
189
|
+
- uses: jonathandung/check-empty@v4.0.0 # the latest version on the GitHub Actions
|
|
190
190
|
# marketplace; this step will fail and subsequent jobs will not run if any file is
|
|
191
191
|
# not empty
|
|
192
192
|
with:
|
|
@@ -197,6 +197,7 @@ steps:
|
|
|
197
197
|
static/.gitkeep
|
|
198
198
|
some_dir
|
|
199
199
|
globs: '**/*.lock'
|
|
200
|
+
# must use single quotes to escape asterisks, which refer to YAML aliases
|
|
200
201
|
# can also be an array of globs joined into a newline-delimited multiline string,
|
|
201
202
|
# as in filenames
|
|
202
203
|
```
|
|
@@ -244,10 +245,11 @@ to read the
|
|
|
244
245
|
and the
|
|
245
246
|
[contributing guide](https://github.com/jonathandung/.github/blob/main/CONTRIBUTING.md).
|
|
246
247
|
|
|
247
|
-
To build the docs locally (needs Python 3.12+ because of Sphinx), install
|
|
248
|
-
`docs`
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
To build the docs locally (needs Python 3.12+ because of Sphinx), install the package
|
|
249
|
+
with the `docs`
|
|
250
|
+
[group](https://packaging.python.org/en/latest/specifications/dependency-groups) using
|
|
251
|
+
a package manager that supports it (e.g. pip 25.1+ or uv 0.4.27+), preferably into a
|
|
252
|
+
virtual environment.
|
|
251
253
|
|
|
252
254
|
Tests are run with:
|
|
253
255
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# [check-empty](https://pypi.org/
|
|
1
|
+
# [check-empty](https://pypi.org/project/check-empty/4.0.0)
|
|
2
2
|
|
|
3
3
|
[](https://github.com/TheBSD/StandWithPalestine/blob/main/docs/README.md)
|
|
4
4
|
|
|
@@ -82,7 +82,7 @@ As a pre-commit hook:
|
|
|
82
82
|
# .pre-commit-config.yaml
|
|
83
83
|
repos:
|
|
84
84
|
- repo: https://github.com/jonathandung/check-empty
|
|
85
|
-
rev:
|
|
85
|
+
rev: v4.0.0 # repository version
|
|
86
86
|
hooks:
|
|
87
87
|
- id: check-empty # the hook
|
|
88
88
|
args: # example list of arguments
|
|
@@ -98,7 +98,7 @@ equivalent in `prek.toml` format:
|
|
|
98
98
|
```toml
|
|
99
99
|
[[repos]]
|
|
100
100
|
repo = "https://github.com/jonathandung/check-empty"
|
|
101
|
-
rev = "
|
|
101
|
+
rev = "v4.0.0"
|
|
102
102
|
|
|
103
103
|
[[repos.hooks]]
|
|
104
104
|
id = "check-empty"
|
|
@@ -122,7 +122,7 @@ or (TOML 1.1+):
|
|
|
122
122
|
# using multiline inline tables
|
|
123
123
|
[[repos]]
|
|
124
124
|
repo = "https://github.com/jonathandung/check-empty"
|
|
125
|
-
rev = "
|
|
125
|
+
rev = "v4.0.0"
|
|
126
126
|
hooks = [{
|
|
127
127
|
id = "check-empty",
|
|
128
128
|
args = ["-Q"],
|
|
@@ -142,7 +142,7 @@ As a GitHub Actions workflow step:
|
|
|
142
142
|
|
|
143
143
|
```yaml
|
|
144
144
|
steps:
|
|
145
|
-
- uses: jonathandung/check-empty@
|
|
145
|
+
- uses: jonathandung/check-empty@v4.0.0 # the latest version on the GitHub Actions
|
|
146
146
|
# marketplace; this step will fail and subsequent jobs will not run if any file is
|
|
147
147
|
# not empty
|
|
148
148
|
with:
|
|
@@ -153,6 +153,7 @@ steps:
|
|
|
153
153
|
static/.gitkeep
|
|
154
154
|
some_dir
|
|
155
155
|
globs: '**/*.lock'
|
|
156
|
+
# must use single quotes to escape asterisks, which refer to YAML aliases
|
|
156
157
|
# can also be an array of globs joined into a newline-delimited multiline string,
|
|
157
158
|
# as in filenames
|
|
158
159
|
```
|
|
@@ -200,10 +201,11 @@ to read the
|
|
|
200
201
|
and the
|
|
201
202
|
[contributing guide](https://github.com/jonathandung/.github/blob/main/CONTRIBUTING.md).
|
|
202
203
|
|
|
203
|
-
To build the docs locally (needs Python 3.12+ because of Sphinx), install
|
|
204
|
-
`docs`
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
To build the docs locally (needs Python 3.12+ because of Sphinx), install the package
|
|
205
|
+
with the `docs`
|
|
206
|
+
[group](https://packaging.python.org/en/latest/specifications/dependency-groups) using
|
|
207
|
+
a package manager that supports it (e.g. pip 25.1+ or uv 0.4.27+), preferably into a
|
|
208
|
+
virtual environment.
|
|
207
209
|
|
|
208
210
|
Tests are run with:
|
|
209
211
|
|
|
@@ -7,12 +7,10 @@ Pre-commit hook, command-line tool and GitHub Action all-in-one.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from contextlib import suppress
|
|
11
|
-
|
|
12
10
|
from check_empty import constants, reporter
|
|
13
11
|
|
|
14
12
|
__all__ = ('Handler', 'check', 'default_reporter')
|
|
15
|
-
__version__ = '
|
|
13
|
+
__version__ = '4.0.0'
|
|
16
14
|
"""The version of the package."""
|
|
17
15
|
default_reporter: reporter.Reporter = reporter.Reporter()
|
|
18
16
|
"""The default reporter used by :func:`check`."""
|
|
@@ -124,6 +122,7 @@ def check(
|
|
|
124
122
|
The integer exit code calculated by the reporter.
|
|
125
123
|
|
|
126
124
|
"""
|
|
125
|
+
from contextlib import suppress
|
|
127
126
|
from os import fsdecode, scandir, stat
|
|
128
127
|
|
|
129
128
|
files = list(files)
|
|
@@ -323,6 +322,6 @@ def check(
|
|
|
323
322
|
Handler(*i, a).o()
|
|
324
323
|
x, d = k[1] if z is None else len(z) - 1, k[2] if w is None else len(w)
|
|
325
324
|
y, p = k[3] if r is None else len(r), k[0] if b is None else len(b) - 1
|
|
326
|
-
reporter.report(z,
|
|
325
|
+
reporter.report(z, v, b, ra, r, w, x, y, d, p, n, t, verbosity, clear)
|
|
327
326
|
reporter.reset_out()
|
|
328
327
|
return reporter.calculate_result(*map(bool, (y, x and not may_not_exist, d)))
|
|
@@ -68,15 +68,16 @@ def main(argv: Iterable[str] | None = None) -> int:
|
|
|
68
68
|
# ruff: ignore[open-file-with-context-handler]
|
|
69
69
|
c.default_reporter.to(open(o, 'w', encoding='utf-8'))
|
|
70
70
|
m = c.constants
|
|
71
|
-
r = m.RecurseInto
|
|
72
|
-
for a in m.ARCHIVE_FORMATS:
|
|
73
|
-
if getattr(n, a._name_.lower()):
|
|
74
|
-
r |= a
|
|
71
|
+
r = m.RecurseInto
|
|
75
72
|
return c.check(
|
|
76
73
|
n.filenames,
|
|
77
74
|
clear=n.clear,
|
|
78
75
|
may_not_exist=n.may_not_exist,
|
|
79
|
-
recurse_into=
|
|
76
|
+
recurse_into=__import__('functools').reduce(
|
|
77
|
+
r.__or__,
|
|
78
|
+
filter(lambda a: getattr(n, a.name.lower()), m.ARCHIVE_FORMATS),
|
|
79
|
+
r.NONE,
|
|
80
|
+
),
|
|
80
81
|
verbosity=2 + n.verbose - n.quiet,
|
|
81
82
|
)
|
|
82
83
|
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from
|
|
7
|
-
from operator import attrgetter
|
|
8
|
-
from tempfile import NamedTemporaryFile
|
|
6
|
+
from tempfile import NamedTemporaryFile as h
|
|
9
7
|
|
|
10
8
|
__all__ = (
|
|
11
9
|
'AR_FS',
|
|
12
10
|
'AR_MAG',
|
|
13
11
|
'AR_NAME_SIZE',
|
|
12
|
+
'AR_SKIP',
|
|
14
13
|
'clear_file_in_zip',
|
|
15
14
|
'purge_7z',
|
|
16
15
|
'purge_ar',
|
|
@@ -18,13 +17,17 @@ __all__ = (
|
|
|
18
17
|
)
|
|
19
18
|
_ = __import__('io').BytesIO()
|
|
20
19
|
AR_FS: Final = b'%-16b0 0 0 100644 %-10d`\n%b'
|
|
20
|
+
"""A C-style format string used to create file headers and bodies in ar archives."""
|
|
21
21
|
AR_MAG: Final = b'!<arch>\n'
|
|
22
|
+
"""The magic number for ar archives."""
|
|
22
23
|
AR_NAME_SIZE: Final = 16
|
|
24
|
+
"""The maximum length of a file name in an ar archive before special handling."""
|
|
23
25
|
AR_SKIP: Final[
|
|
24
26
|
frozenset[
|
|
25
27
|
Literal[b'/', b'//', b'/SYM64/', b'__.SYMDEF', b'__.SYMDEF SORTED'] | None
|
|
26
28
|
]
|
|
27
29
|
] = frozenset((b'/', b'//', b'/SYM64/', b'__.SYMDEF', b'__.SYMDEF SORTED', None))
|
|
30
|
+
"""The file names to skip when clearing files in an ar archive."""
|
|
28
31
|
TYPE_CHECKING = False
|
|
29
32
|
if TYPE_CHECKING:
|
|
30
33
|
import tarfile
|
|
@@ -62,7 +65,7 @@ def purge_tar(t: tarfile.TarFile) -> None:
|
|
|
62
65
|
import tarfile as z
|
|
63
66
|
|
|
64
67
|
with (
|
|
65
|
-
|
|
68
|
+
h(suffix='.tar.gz', delete=False) as p,
|
|
66
69
|
z.open(fileobj=p, mode='w:gz') as f,
|
|
67
70
|
):
|
|
68
71
|
a = f.addfile
|
|
@@ -80,15 +83,17 @@ def purge_ar(a: Archive, g: int) -> None:
|
|
|
80
83
|
os.truncate(n, 8)
|
|
81
84
|
return
|
|
82
85
|
|
|
83
|
-
with
|
|
86
|
+
with h(suffix='.a', delete=False) as f:
|
|
84
87
|
w = f.write
|
|
85
88
|
w(AR_MAG)
|
|
86
|
-
q =
|
|
87
|
-
|
|
89
|
+
q = __import__('itertools').filterfalse(
|
|
90
|
+
AR_SKIP.__contains__, map(__import__('operator').attrgetter('name'), i)
|
|
91
|
+
)
|
|
92
|
+
_gnu(tuple(q), w) if i[0].type == g else _bsd(q, w)
|
|
88
93
|
os.replace(f.name, n)
|
|
89
94
|
|
|
90
95
|
|
|
91
|
-
def
|
|
96
|
+
def _bsd(q: Iterable[bytes], w: Callable[[bytes], int]) -> None:
|
|
92
97
|
"""Clear the contents of each file in a BSD .a, .ar or .lib archive."""
|
|
93
98
|
for m in q:
|
|
94
99
|
x = len(m)
|
|
@@ -96,7 +101,7 @@ def _purge_ar_bsd(q: Iterable[bytes], w: Callable[[bytes], int]) -> None:
|
|
|
96
101
|
w(AR_FS % (b'#1/%d' % x if b else m, x, m if b else b''))
|
|
97
102
|
|
|
98
103
|
|
|
99
|
-
def
|
|
104
|
+
def _gnu(q: tuple[bytes, ...], w: Callable[[bytes], int]) -> None:
|
|
100
105
|
"""Clear the contents of each file in a GNU .a, .ar or .lib archive."""
|
|
101
106
|
c, d = 0, {}
|
|
102
107
|
for m in q:
|
|
@@ -16,7 +16,7 @@ TYPE_CHECKING = False
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from typing import Final
|
|
18
18
|
TYPE_MASK: Final = 0xF000
|
|
19
|
-
"""
|
|
19
|
+
"""The mask that extracts the type of a file from its mode bits from :func:`os.stat`."""
|
|
20
20
|
S_IFDIR: Final = 0x4000
|
|
21
21
|
"""Equal to :data:`stat.S_IFDIR`."""
|
|
22
22
|
ENOENT: Final = 2
|
|
@@ -58,7 +58,7 @@ class RecurseInto(__import__('enum').IntFlag):
|
|
|
58
58
|
"""Recurse into all archive types."""
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
ARCHIVE_FORMATS: Final = tuple(
|
|
61
|
+
ARCHIVE_FORMATS: Final[tuple[RecurseInto, ...]] = tuple(
|
|
62
62
|
filter(lambda x: x > 0 == x & (x - 1), RecurseInto)
|
|
63
63
|
if __import__('sys').version_info < (3, 11)
|
|
64
64
|
else RecurseInto
|
|
@@ -34,10 +34,11 @@ class Reporter(abcdef.ReporterABC):
|
|
|
34
34
|
def report( # ruff: ignore[too-many-arguments, too-many-positional-arguments]
|
|
35
35
|
self,
|
|
36
36
|
z: list[str] | None,
|
|
37
|
-
w: list[OSError] | None,
|
|
38
37
|
a: list[str] | None,
|
|
39
38
|
b: list[str] | None,
|
|
39
|
+
e: list[str] | None,
|
|
40
40
|
r: list[tuple[str, int]] | None,
|
|
41
|
+
w: list[OSError] | None,
|
|
41
42
|
x: int,
|
|
42
43
|
y: int,
|
|
43
44
|
d: int,
|
|
@@ -59,6 +60,8 @@ class Reporter(abcdef.ReporterABC):
|
|
|
59
60
|
q = (s.stdout if q is None else q).write
|
|
60
61
|
if a is not None:
|
|
61
62
|
q('\nRecursing into directory: '.join(a))
|
|
63
|
+
if e is not None:
|
|
64
|
+
q('\nRecursing into archive: '.join(e))
|
|
62
65
|
if z is not None:
|
|
63
66
|
q('\nNot found: '.join(z))
|
|
64
67
|
q(
|
|
@@ -22,10 +22,11 @@ class ReporterABC(metaclass=a.ABCMeta):
|
|
|
22
22
|
def report( # ruff: ignore[too-many-arguments, too-many-positional-arguments]
|
|
23
23
|
self,
|
|
24
24
|
z: list[str] | None,
|
|
25
|
-
w: list[OSError] | None,
|
|
26
25
|
a: list[str] | None,
|
|
27
26
|
b: list[str] | None,
|
|
27
|
+
e: list[str] | None,
|
|
28
28
|
r: list[tuple[str, int]] | None,
|
|
29
|
+
w: list[OSError] | None,
|
|
29
30
|
x: int,
|
|
30
31
|
y: int,
|
|
31
32
|
d: int,
|
|
@@ -39,11 +40,18 @@ class ReporterABC(metaclass=a.ABCMeta):
|
|
|
39
40
|
"""Report the results of the check.
|
|
40
41
|
|
|
41
42
|
Args:
|
|
42
|
-
z: list of paths to files that were not found
|
|
43
|
-
|
|
44
|
-
a: list of directories that were recursed into
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
z: list of paths to files that were not found, or ``None`` if ``v`` is less
|
|
44
|
+
than 3; the first element of the list is an empty string.
|
|
45
|
+
a: list of paths to directories that were recursed into, or ``None`` if
|
|
46
|
+
``v`` is less than 4; the first element of the list is an empty string.
|
|
47
|
+
b: list of empty file paths, or ``None`` if ``v`` is less than 5; the first
|
|
48
|
+
element of the list is an empty string.
|
|
49
|
+
e: list of paths to archives that were recursed into, or ``None`` if
|
|
50
|
+
``v`` is less than 4; the first element of the list is an empty string.
|
|
51
|
+
r: list of 2-tuples representing non-empty files and their sizes, or
|
|
52
|
+
``None`` if ``v`` is less than 2.
|
|
53
|
+
w: list of I/O errors when processing non-missing files, or ``None`` if
|
|
54
|
+
``v`` is less than 3.
|
|
47
55
|
x: number of files that were not found.
|
|
48
56
|
y: number of non-empty files.
|
|
49
57
|
d: number of I/O errors encountered.
|
|
@@ -72,7 +80,7 @@ class ReporterABC(metaclass=a.ABCMeta):
|
|
|
72
80
|
x: whether any files or directories were absent and
|
|
73
81
|
:ref:`-m <check-empty--m>` /
|
|
74
82
|
:ref:`--may-not-exist <check-empty---may-not-exist>` was omitted
|
|
75
|
-
d: whether any :exc:`OSError`
|
|
83
|
+
d: whether any :exc:`OSError` were caught while processing files.
|
|
76
84
|
|
|
77
85
|
Returns:
|
|
78
86
|
An integer derived from the arguments, which will be returned by
|
|
@@ -37,7 +37,11 @@ class ReporterError(Exception):
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
class NoReport(ReporterError):
|
|
40
|
-
"""
|
|
40
|
+
"""Raised by a :class:`check_empty.reporter.abcdef.DelayedReporterMixin`.
|
|
41
|
+
|
|
42
|
+
The error is due to no data having been collected to report when the reporter was
|
|
43
|
+
asked to report.
|
|
44
|
+
"""
|
|
41
45
|
|
|
42
46
|
reporter: DelayedReporterMixin
|
|
43
47
|
"""The reporter concerned."""
|
|
@@ -52,7 +56,7 @@ class IncorrectKeynames(ReporterError):
|
|
|
52
56
|
|
|
53
57
|
|
|
54
58
|
class IncorrectKeynamesLength(IncorrectKeynames):
|
|
55
|
-
"""The length of ``keys`` was not 13."""
|
|
59
|
+
"""The length of ``keys`` was not equal to 13."""
|
|
56
60
|
|
|
57
61
|
message = 'keys must have length 13'
|
|
58
62
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["uv_build>=0.
|
|
2
|
+
requires = ["uv_build>=0.13.0"]
|
|
3
3
|
build-backend = "uv_build"
|
|
4
4
|
|
|
5
5
|
[dependency-groups]
|
|
@@ -55,7 +55,7 @@ license-files = [
|
|
|
55
55
|
name = "check-empty"
|
|
56
56
|
readme = "README.md"
|
|
57
57
|
requires-python = ">=3.10"
|
|
58
|
-
version = "
|
|
58
|
+
version = "4.0.0"
|
|
59
59
|
|
|
60
60
|
[[project.authors]]
|
|
61
61
|
name = "Jonathan Dung"
|
|
@@ -68,7 +68,7 @@ email = "jonathandung@yahoo.com"
|
|
|
68
68
|
[project.optional-dependencies]
|
|
69
69
|
7z = ["py7zr==1.1.3"]
|
|
70
70
|
ace = ["acefile==0.6.14"]
|
|
71
|
-
all = ["check-empty[7z,ace,ar,lzh,rar]==
|
|
71
|
+
all = ["check-empty[7z,ace,ar,lzh,rar]==4.0.0"]
|
|
72
72
|
ar = ["arpy==2.4.0"]
|
|
73
73
|
lzh = ["lhafile==0.3.1"]
|
|
74
74
|
rar = ["rarfile==4.5"]
|
|
@@ -77,7 +77,7 @@ rar = ["rarfile==4.5"]
|
|
|
77
77
|
check-empty = "check_empty.__main__:main"
|
|
78
78
|
|
|
79
79
|
[tool.ruff]
|
|
80
|
-
required-version = ">=0.
|
|
80
|
+
required-version = ">=0.17.0"
|
|
81
81
|
target-version = "py310"
|
|
82
82
|
|
|
83
83
|
[tool.ruff.analyze]
|
|
@@ -93,6 +93,7 @@ ignore = [
|
|
|
93
93
|
"PT",
|
|
94
94
|
"bad-quotes-inline-string",
|
|
95
95
|
"builtin-open",
|
|
96
|
+
"camelcase-imported-as-lowercase",
|
|
96
97
|
"complex-structure",
|
|
97
98
|
"error-suffix-on-exception-name",
|
|
98
99
|
"import-outside-top-level",
|
|
@@ -152,8 +153,14 @@ possibly-unresolved-reference = "ignore"
|
|
|
152
153
|
redundant-condition = "ignore"
|
|
153
154
|
unsound-assignment = "ignore"
|
|
154
155
|
|
|
156
|
+
[[tool.ty.overrides]]
|
|
157
|
+
include = ["check_empty/reporter/exceptions.py"]
|
|
158
|
+
|
|
159
|
+
[tool.ty.overrides.rules]
|
|
160
|
+
invalid-mutable-override = "ignore"
|
|
161
|
+
|
|
155
162
|
[tool.uv]
|
|
156
|
-
required-version = ">=0.
|
|
163
|
+
required-version = ">=0.13.0"
|
|
157
164
|
|
|
158
165
|
[tool.uv.build-backend]
|
|
159
166
|
module-name = "check_empty"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["uv_build>=0.
|
|
2
|
+
requires = ["uv_build>=0.13.0"]
|
|
3
3
|
build-backend = "uv_build"
|
|
4
4
|
|
|
5
5
|
[dependency-groups]
|
|
@@ -16,12 +16,12 @@ maintainers = [{name = "Jonathan Dung", email = "jonathandung@yahoo.com"}]
|
|
|
16
16
|
name = "check-empty"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
requires-python = ">=3.10"
|
|
19
|
-
version = "
|
|
19
|
+
version = "4.0.0"
|
|
20
20
|
|
|
21
21
|
[project.optional-dependencies]
|
|
22
22
|
"7z" = ["py7zr==1.1.3"]
|
|
23
23
|
ace = ["acefile==0.6.14"]
|
|
24
|
-
all = ["check-empty[7z,ace,ar,lzh,rar]==
|
|
24
|
+
all = ["check-empty[7z,ace,ar,lzh,rar]==4.0.0"]
|
|
25
25
|
ar = ["arpy==2.4.0"]
|
|
26
26
|
lzh = ["lhafile==0.3.1"]
|
|
27
27
|
rar = ["rarfile==4.5"]
|
|
@@ -30,7 +30,7 @@ rar = ["rarfile==4.5"]
|
|
|
30
30
|
check-empty = "check_empty.__main__:main"
|
|
31
31
|
|
|
32
32
|
[tool.ruff]
|
|
33
|
-
required-version = ">=0.
|
|
33
|
+
required-version = ">=0.17.0"
|
|
34
34
|
target-version = "py310"
|
|
35
35
|
|
|
36
36
|
[tool.ruff.analyze]
|
|
@@ -40,7 +40,7 @@ type-checking-imports = false
|
|
|
40
40
|
quote-style = "single"
|
|
41
41
|
|
|
42
42
|
[tool.ruff.lint]
|
|
43
|
-
ignore = ["COM", "FBT", "PT", "bad-quotes-inline-string", "builtin-open", "complex-structure", "error-suffix-on-exception-name", "import-outside-top-level", "incorrect-blank-line-before-class", "meta-class-abc-meta", "multi-line-summary-second-line", "non-empty-init-module", "os-replace"]
|
|
43
|
+
ignore = ["COM", "FBT", "PT", "bad-quotes-inline-string", "builtin-open", "camelcase-imported-as-lowercase", "complex-structure", "error-suffix-on-exception-name", "import-outside-top-level", "incorrect-blank-line-before-class", "meta-class-abc-meta", "multi-line-summary-second-line", "non-empty-init-module", "os-replace"]
|
|
44
44
|
preview = true
|
|
45
45
|
select = ["ALL"]
|
|
46
46
|
|
|
@@ -81,8 +81,12 @@ missing-override-decorator = "ignore"
|
|
|
81
81
|
include = ["check_empty/__init__.py"]
|
|
82
82
|
rules = {possibly-unresolved-reference = "ignore", redundant-condition = "ignore", unsound-assignment = "ignore"}
|
|
83
83
|
|
|
84
|
+
[[tool.ty.overrides]]
|
|
85
|
+
include = ["check_empty/reporter/exceptions.py"]
|
|
86
|
+
rules = {invalid-mutable-override = "ignore"}
|
|
87
|
+
|
|
84
88
|
[tool.uv]
|
|
85
|
-
required-version = ">=0.
|
|
89
|
+
required-version = ">=0.13.0"
|
|
86
90
|
|
|
87
91
|
[tool.uv.build-backend]
|
|
88
92
|
module-name = "check_empty"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|