Skip to content

Commit 6c5698a

Browse files
Apply ruff/bugbear rules (B) (#787)
* Apply ruff/bugbear rule B904 B904 Within an `except` clause, raise exceptions with `raise ... from err` or `raise ... from None` to distinguish them from errors in exception handling * Apply ruff/bugbear rule B028 B028 No explicit `stacklevel` keyword argument found * Apply ruff/bugbear rule B018 B018 Found useless expression. Either assign it to a variable or remove it. * Do not ignore ruff/bugbear rule (B015) https://docs.astral.sh/ruff/rules/useless-comparison/ * Do not ignore ruff/bugbear rule (B009) https://docs.astral.sh/ruff/rules/get-attr-with-constant/
1 parent 24e5350 commit 6c5698a

File tree

5 files changed

+24
-28
lines changed

5 files changed

+24
-28
lines changed

pyproject.toml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,7 @@ extend-select = [
7474
"W"
7575
]
7676
ignore = [
77-
"B009",
78-
"B015",
79-
"B018",
8077
"B027",
81-
"B028",
82-
"B904",
8378
"N818",
8479
"RUF003",
8580
"RUF012",

src/packaging/_elffile.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def __init__(self, f: IO[bytes]) -> None:
4848

4949
try:
5050
ident = self._read("16B")
51-
except struct.error:
52-
raise ELFInvalid("unable to parse identification")
51+
except struct.error as e:
52+
raise ELFInvalid("unable to parse identification") from e
5353
magic = bytes(ident[:4])
5454
if magic != b"\x7fELF":
5555
raise ELFInvalid(f"invalid magic: {magic!r}")
@@ -67,11 +67,11 @@ def __init__(self, f: IO[bytes]) -> None:
6767
(2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB.
6868
(2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
6969
}[(self.capacity, self.encoding)]
70-
except KeyError:
70+
except KeyError as e:
7171
raise ELFInvalid(
7272
f"unrecognized capacity ({self.capacity}) or "
7373
f"encoding ({self.encoding})"
74-
)
74+
) from e
7575

7676
try:
7777
(

src/packaging/_manylinux.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ def _parse_glibc_version(version_str: str) -> tuple[int, int]:
164164
f"Expected glibc version with 2 components major.minor,"
165165
f" got: {version_str}",
166166
RuntimeWarning,
167+
stacklevel=2,
167168
)
168169
return -1, -1
169170
return int(m.group("major")), int(m.group("minor"))

src/packaging/metadata.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import builtins
34
import email.feedparser
45
import email.header
56
import email.message
@@ -21,9 +22,9 @@
2122
T = typing.TypeVar("T")
2223

2324

24-
try:
25-
ExceptionGroup
26-
except NameError: # pragma: no cover
25+
if "ExceptionGroup" in builtins.__dict__: # pragma: no cover
26+
ExceptionGroup = ExceptionGroup
27+
else: # pragma: no cover
2728

2829
class ExceptionGroup(Exception):
2930
"""A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11.
@@ -42,9 +43,6 @@ def __init__(self, message: str, exceptions: list[Exception]) -> None:
4243
def __repr__(self) -> str:
4344
return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})"
4445

45-
else: # pragma: no cover
46-
ExceptionGroup = ExceptionGroup
47-
4846

4947
class InvalidMetadata(ValueError):
5048
"""A metadata field contains invalid data."""
@@ -224,8 +222,8 @@ def _get_payload(msg: email.message.Message, source: bytes | str) -> str:
224222
bpayload: bytes = msg.get_payload(decode=True)
225223
try:
226224
return bpayload.decode("utf8", "strict")
227-
except UnicodeDecodeError:
228-
raise ValueError("payload in an invalid encoding")
225+
except UnicodeDecodeError as exc:
226+
raise ValueError("payload in an invalid encoding") from exc
229227

230228

231229
# The various parse_FORMAT functions here are intended to be as lenient as
@@ -535,7 +533,7 @@ def _process_name(self, value: str) -> str:
535533
except utils.InvalidName as exc:
536534
raise self._invalid_metadata(
537535
f"{value!r} is invalid for {{field}}", cause=exc
538-
)
536+
) from exc
539537
else:
540538
return value
541539

@@ -547,7 +545,7 @@ def _process_version(self, value: str) -> version_module.Version:
547545
except version_module.InvalidVersion as exc:
548546
raise self._invalid_metadata(
549547
f"{value!r} is invalid for {{field}}", cause=exc
550-
)
548+
) from exc
551549

552550
def _process_summary(self, value: str) -> str:
553551
"""Check the field contains no newlines."""
@@ -608,7 +606,7 @@ def _process_provides_extra(
608606
except utils.InvalidName as exc:
609607
raise self._invalid_metadata(
610608
f"{name!r} is invalid for {{field}}", cause=exc
611-
)
609+
) from exc
612610
else:
613611
return normalized_names
614612

@@ -618,7 +616,7 @@ def _process_requires_python(self, value: str) -> specifiers.SpecifierSet:
618616
except specifiers.InvalidSpecifier as exc:
619617
raise self._invalid_metadata(
620618
f"{value!r} is invalid for {{field}}", cause=exc
621-
)
619+
) from exc
622620

623621
def _process_requires_dist(
624622
self,
@@ -629,7 +627,9 @@ def _process_requires_dist(
629627
for req in value:
630628
reqs.append(requirements.Requirement(req))
631629
except requirements.InvalidRequirement as exc:
632-
raise self._invalid_metadata(f"{req!r} is invalid for {{field}}", cause=exc)
630+
raise self._invalid_metadata(
631+
f"{req!r} is invalid for {{field}}", cause=exc
632+
) from exc
633633
else:
634634
return reqs
635635

tests/test_metadata.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ def test_invalid_metadata_version(self, version):
427427
meta = metadata.Metadata.from_raw({"metadata_version": version}, validate=False)
428428

429429
with pytest.raises(metadata.InvalidMetadata):
430-
meta.metadata_version
430+
meta.metadata_version # noqa: B018
431431

432432
def test_valid_version(self):
433433
version_str = "1.2.3"
@@ -437,7 +437,7 @@ def test_valid_version(self):
437437
def test_missing_version(self):
438438
meta = metadata.Metadata.from_raw({}, validate=False)
439439
with pytest.raises(metadata.InvalidMetadata) as exc_info:
440-
meta.version
440+
meta.version # noqa: B018
441441
assert exc_info.value.field == "version"
442442

443443
def test_invalid_version(self):
@@ -456,7 +456,7 @@ def test_invalid_summary(self):
456456
)
457457

458458
with pytest.raises(metadata.InvalidMetadata) as exc_info:
459-
meta.summary
459+
meta.summary # noqa: B018
460460
assert exc_info.value.field == "summary"
461461

462462
def test_valid_name(self):
@@ -506,7 +506,7 @@ def test_invalid_description_content_type(self, content_type):
506506
)
507507

508508
with pytest.raises(metadata.InvalidMetadata):
509-
meta.description_content_type
509+
meta.description_content_type # noqa: B018
510510

511511
def test_keywords(self):
512512
keywords = ["hello", "world"]
@@ -602,14 +602,14 @@ def test_invalid_dynamic_value(self):
602602
meta = metadata.Metadata.from_raw({"dynamic": dynamic}, validate=False)
603603

604604
with pytest.raises(metadata.InvalidMetadata):
605-
meta.dynamic
605+
meta.dynamic # noqa: B018
606606

607607
@pytest.mark.parametrize("field_name", ["name", "version", "metadata-version"])
608608
def test_disallowed_dynamic(self, field_name):
609609
meta = metadata.Metadata.from_raw({"dynamic": [field_name]}, validate=False)
610610

611611
with pytest.raises(metadata.InvalidMetadata):
612-
meta.dynamic
612+
meta.dynamic # noqa: B018
613613

614614
@pytest.mark.parametrize(
615615
"field_name",

0 commit comments

Comments
 (0)