@@ -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