Skip to content

Commit 4fecf58

Browse files
committed
chore: enable ruff EM
Signed-off-by: Henry Schreiner <[email protected]>
1 parent 2377220 commit 4fecf58

File tree

12 files changed

+133
-107
lines changed

12 files changed

+133
-107
lines changed

noxfile.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,18 +200,21 @@ def _get_version_from_arguments(arguments):
200200
Otherwise, raise a ValueError describing what's wrong.
201201
"""
202202
if len(arguments) != 1:
203-
raise ValueError("Expected exactly 1 argument")
203+
msg = "Expected exactly 1 argument"
204+
raise ValueError(msg)
204205

205206
version = arguments[0]
206207
parts = version.split(".")
207208

208209
if len(parts) != 2:
209210
# Not of the form: YY.N
210-
raise ValueError("not of the form: YY.N")
211+
msg = "not of the form: YY.N"
212+
raise ValueError(msg)
211213

212214
if not all(part.isdigit() for part in parts):
213215
# Not all segments are integers.
214-
raise ValueError("non-integer segments")
216+
msg = "non-integer segments"
217+
raise ValueError(msg)
215218

216219
# All is good.
217220
return version

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ extend-select = [
129129
"UP", # pyupgrade
130130
"W",
131131
"YTT", # flake8-2020
132+
"EM", # flake8-errmsg
132133
]
133134
ignore = [
134135
"N818", # exceptions must end in "*Error"

src/packaging/_elffile.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ def __init__(self, f: IO[bytes]) -> None:
4848
try:
4949
ident = self._read("16B")
5050
except struct.error as e:
51-
raise ELFInvalid("unable to parse identification") from e
51+
msg = "unable to parse identification"
52+
raise ELFInvalid(msg) from e
5253
magic = bytes(ident[:4])
5354
if magic != b"\x7fELF":
54-
raise ELFInvalid(f"invalid magic: {magic!r}")
55+
msg = f"invalid magic: {magic!r}"
56+
raise ELFInvalid(msg)
5557

5658
self.capacity = ident[4] # Format for program header (bitness).
5759
self.encoding = ident[5] # Data structure encoding (endianness).
@@ -67,9 +69,10 @@ def __init__(self, f: IO[bytes]) -> None:
6769
(2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
6870
}[(self.capacity, self.encoding)]
6971
except KeyError as e:
70-
raise ELFInvalid(
72+
msg = (
7173
f"unrecognized capacity ({self.capacity}) or encoding ({self.encoding})"
72-
) from e
74+
)
75+
raise ELFInvalid(msg) from e
7376

7477
try:
7578
(
@@ -85,7 +88,8 @@ def __init__(self, f: IO[bytes]) -> None:
8588
self._e_phnum, # Number of sections.
8689
) = self._read(e_fmt)
8790
except struct.error as e:
88-
raise ELFInvalid("unable to parse machine and section information") from e
91+
msg = "unable to parse machine and section information"
92+
raise ELFInvalid(msg) from e
8993

9094
def _read(self, fmt: str) -> tuple[int, ...]:
9195
return struct.unpack(fmt, self._f.read(struct.calcsize(fmt)))

src/packaging/_tokenizer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ def expect(self, name: str, *, expected: str) -> Token:
140140
The token is *not* read.
141141
"""
142142
if not self.check(name):
143-
raise self.raise_syntax_error(f"Expected {expected}")
143+
msg = f"Expected {expected}"
144+
raise self.raise_syntax_error(msg)
144145
return self.read()
145146

146147
def read(self) -> Token:

src/packaging/markers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ def _eval_op(lhs: str, op: Op, rhs: str | AbstractSet[str]) -> bool:
188188

189189
oper: Operator | None = _operators.get(op.serialize())
190190
if oper is None:
191-
raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.")
191+
msg = f"Undefined {op!r} on {lhs!r} and {rhs!r}."
192+
raise UndefinedComparison(msg)
192193

193194
return oper(lhs, rhs)
194195

src/packaging/metadata.py

Lines changed: 57 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,8 @@ def _parse_project_urls(data: list[str]) -> dict[str, str]:
222222
# The label already exists in our set of urls, so this field
223223
# is unparsable, and we can just add the whole thing to our
224224
# unparsable data and stop processing it.
225-
raise KeyError("duplicate labels in project urls")
225+
msg = "duplicate labels in project urls"
226+
raise KeyError(msg)
226227
urls[label] = url
227228

228229
return urls
@@ -244,7 +245,8 @@ def _get_payload(msg: email.message.Message, source: bytes | str) -> str:
244245
try:
245246
return bpayload.decode("utf8", "strict")
246247
except UnicodeDecodeError as exc:
247-
raise ValueError("payload in an invalid encoding") from exc
248+
errmsg = "payload in an invalid encoding"
249+
raise ValueError(errmsg) from exc
248250

249251

250252
# The various parse_FORMAT functions here are intended to be as lenient as
@@ -590,36 +592,38 @@ def _invalid_metadata(
590592
def _process_metadata_version(self, value: str) -> _MetadataVersion:
591593
# Implicitly makes Metadata-Version required.
592594
if value not in _VALID_METADATA_VERSIONS:
593-
raise self._invalid_metadata(f"{value!r} is not a valid metadata version")
595+
msg = f"{value!r} is not a valid metadata version"
596+
raise self._invalid_metadata(msg)
594597
return cast("_MetadataVersion", value)
595598

596599
def _process_name(self, value: str) -> str:
597600
if not value:
598-
raise self._invalid_metadata("{field} is a required field")
601+
msg = "{field} is a required field"
602+
raise self._invalid_metadata(msg)
599603
# Validate the name as a side-effect.
600604
try:
601605
utils.canonicalize_name(value, validate=True)
602606
except utils.InvalidName as exc:
603-
raise self._invalid_metadata(
604-
f"{value!r} is invalid for {{field}}", cause=exc
605-
) from exc
607+
msg = f"{value!r} is invalid for {{field}}"
608+
raise self._invalid_metadata(msg, cause=exc) from exc
606609
else:
607610
return value
608611

609612
def _process_version(self, value: str) -> version_module.Version:
610613
if not value:
611-
raise self._invalid_metadata("{field} is a required field")
614+
msg = "{field} is a required field"
615+
raise self._invalid_metadata(msg)
612616
try:
613617
return version_module.parse(value)
614618
except version_module.InvalidVersion as exc:
615-
raise self._invalid_metadata(
616-
f"{value!r} is invalid for {{field}}", cause=exc
617-
) from exc
619+
msg = f"{value!r} is invalid for {{field}}"
620+
raise self._invalid_metadata(msg, cause=exc) from exc
618621

619622
def _process_summary(self, value: str) -> str:
620623
"""Check the field contains no newlines."""
621624
if "\n" in value:
622-
raise self._invalid_metadata("{field} must be a single line")
625+
msg = "{field} must be a single line"
626+
raise self._invalid_metadata(msg)
623627
return value
624628

625629
def _process_description_content_type(self, value: str) -> str:
@@ -635,35 +639,34 @@ def _process_description_content_type(self, value: str) -> str:
635639
# Check if content-type is valid or defaulted to `text/plain` and thus was
636640
# not parseable.
637641
if content_type not in content_types or content_type not in value.lower():
638-
raise self._invalid_metadata(
639-
f"{{field}} must be one of {list(content_types)}, not {value!r}"
640-
)
642+
msg = f"{{field}} must be one of {list(content_types)}, not {value!r}"
643+
raise self._invalid_metadata(msg)
641644

642645
charset = parameters.get("charset", "UTF-8")
643646
if charset != "UTF-8":
644-
raise self._invalid_metadata(
645-
f"{{field}} can only specify the UTF-8 charset, not {list(charset)}"
646-
)
647+
msg = f"{{field}} can only specify the UTF-8 charset, not {list(charset)}"
648+
raise self._invalid_metadata(msg)
647649

648650
markdown_variants = {"GFM", "CommonMark"}
649651
variant = parameters.get("variant", "GFM") # Use an acceptable default.
650652
if content_type == "text/markdown" and variant not in markdown_variants:
651-
raise self._invalid_metadata(
653+
msg = (
652654
f"valid Markdown variants for {{field}} are {list(markdown_variants)}, "
653-
f"not {variant!r}",
655+
f"not {variant!r}"
656+
)
657+
raise self._invalid_metadata(
658+
msg,
654659
)
655660
return value
656661

657662
def _process_dynamic(self, value: list[str]) -> list[str]:
658663
for dynamic_field in map(str.lower, value):
659664
if dynamic_field in {"name", "version", "metadata-version"}:
660-
raise self._invalid_metadata(
661-
f"{dynamic_field!r} is not allowed as a dynamic field"
662-
)
665+
msg = f"{dynamic_field!r} is not allowed as a dynamic field"
666+
raise self._invalid_metadata(msg)
663667
elif dynamic_field not in _EMAIL_TO_RAW_MAPPING:
664-
raise self._invalid_metadata(
665-
f"{dynamic_field!r} is not a valid dynamic field"
666-
)
668+
msg = f"{dynamic_field!r} is not a valid dynamic field"
669+
raise self._invalid_metadata(msg)
667670
return list(map(str.lower, value))
668671

669672
def _process_provides_extra(
@@ -675,19 +678,17 @@ def _process_provides_extra(
675678
for name in value:
676679
normalized_names.append(utils.canonicalize_name(name, validate=True))
677680
except utils.InvalidName as exc:
678-
raise self._invalid_metadata(
679-
f"{name!r} is invalid for {{field}}", cause=exc
680-
) from exc
681+
msg = f"{name!r} is invalid for {{field}}"
682+
raise self._invalid_metadata(msg, cause=exc) from exc
681683
else:
682684
return normalized_names
683685

684686
def _process_requires_python(self, value: str) -> specifiers.SpecifierSet:
685687
try:
686688
return specifiers.SpecifierSet(value)
687689
except specifiers.InvalidSpecifier as exc:
688-
raise self._invalid_metadata(
689-
f"{value!r} is invalid for {{field}}", cause=exc
690-
) from exc
690+
msg = f"{value!r} is invalid for {{field}}"
691+
raise self._invalid_metadata(msg, cause=exc) from exc
691692

692693
def _process_requires_dist(
693694
self,
@@ -698,43 +699,39 @@ def _process_requires_dist(
698699
for req in value:
699700
reqs.append(requirements.Requirement(req))
700701
except requirements.InvalidRequirement as exc:
701-
raise self._invalid_metadata(
702-
f"{req!r} is invalid for {{field}}", cause=exc
703-
) from exc
702+
msg = f"{req!r} is invalid for {{field}}"
703+
raise self._invalid_metadata(msg, cause=exc) from exc
704704
else:
705705
return reqs
706706

707707
def _process_license_expression(self, value: str) -> NormalizedLicenseExpression:
708708
try:
709709
return licenses.canonicalize_license_expression(value)
710710
except ValueError as exc:
711-
raise self._invalid_metadata(
712-
f"{value!r} is invalid for {{field}}", cause=exc
713-
) from exc
711+
msg = f"{value!r} is invalid for {{field}}"
712+
raise self._invalid_metadata(msg, cause=exc) from exc
714713

715714
def _process_license_files(self, value: list[str]) -> list[str]:
716715
paths = []
717716
for path in value:
718717
if ".." in path:
719-
raise self._invalid_metadata(
718+
msg = (
720719
f"{path!r} is invalid for {{field}}, "
721720
"parent directory indicators are not allowed"
722721
)
722+
raise self._invalid_metadata(msg)
723723
if "*" in path:
724-
raise self._invalid_metadata(
725-
f"{path!r} is invalid for {{field}}, paths must be resolved"
726-
)
724+
msg = f"{path!r} is invalid for {{field}}, paths must be resolved"
725+
raise self._invalid_metadata(msg)
727726
if (
728727
pathlib.PurePosixPath(path).is_absolute()
729728
or pathlib.PureWindowsPath(path).is_absolute()
730729
):
731-
raise self._invalid_metadata(
732-
f"{path!r} is invalid for {{field}}, paths must be relative"
733-
)
730+
msg = f"{path!r} is invalid for {{field}}, paths must be relative"
731+
raise self._invalid_metadata(msg)
734732
if pathlib.PureWindowsPath(path).as_posix() != path:
735-
raise self._invalid_metadata(
736-
f"{path!r} is invalid for {{field}}, paths must use '/' delimiter"
737-
)
733+
msg = f"{path!r} is invalid for {{field}}, paths must use '/' delimiter"
734+
raise self._invalid_metadata(msg)
738735
paths.append(path)
739736
return paths
740737

@@ -744,20 +741,23 @@ def _process_import_names(self, value: list[str]) -> list[str]:
744741
name = name.rstrip()
745742
for identifier in name.split("."):
746743
if not identifier.isidentifier():
747-
raise self._invalid_metadata(
744+
msg = (
748745
f"{name!r} is invalid for {{field}}; "
749746
f"{identifier!r} is not a valid identifier"
750747
)
748+
raise self._invalid_metadata(msg)
751749
elif keyword.iskeyword(identifier):
752-
raise self._invalid_metadata(
750+
msg = (
753751
f"{name!r} is invalid for {{field}}; "
754752
f"{identifier!r} is a keyword"
755753
)
754+
raise self._invalid_metadata(msg)
756755
if semicolon and private.lstrip() != "private":
757-
raise self._invalid_metadata(
756+
msg = (
758757
f"{import_name!r} is invalid for {{field}}; "
759758
"the only valid option is 'private'"
760759
)
760+
raise self._invalid_metadata(msg)
761761
return value
762762

763763
_process_import_namespaces = _process_import_names
@@ -827,7 +827,8 @@ def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> Metadata:
827827
exceptions.append(exc)
828828

829829
if exceptions:
830-
raise ExceptionGroup("invalid metadata", exceptions)
830+
msg = "invalid metadata"
831+
raise ExceptionGroup(msg, exceptions)
831832

832833
return ins
833834

@@ -850,14 +851,14 @@ def from_email(cls, data: bytes | str, *, validate: bool = True) -> Metadata:
850851
exceptions.append(InvalidMetadata(unparsed_key, message))
851852

852853
if exceptions:
853-
raise ExceptionGroup("unparsed", exceptions)
854+
msg = "unparsed"
855+
raise ExceptionGroup(msg, exceptions)
854856

855857
try:
856858
return cls.from_raw(raw, validate=validate)
857859
except ExceptionGroup as exc_group:
858-
raise ExceptionGroup(
859-
"invalid or unparsed metadata", exc_group.exceptions
860-
) from None
860+
msg = "invalid or unparsed metadata"
861+
raise ExceptionGroup(msg, exc_group.exceptions) from None
861862

862863
metadata_version: _Validator[_MetadataVersion] = _Validator()
863864
""":external:ref:`core-metadata-metadata-version`

0 commit comments

Comments
 (0)