11
11
from typing import (
12
12
TYPE_CHECKING ,
13
13
Any ,
14
+ Dict ,
14
15
List ,
15
16
MutableMapping ,
16
- NoReturn ,
17
+ Sequence ,
17
18
Tuple ,
18
19
Union ,
19
- overload ,
20
20
)
21
21
22
22
from more_itertools import partition , unique_everseen
30
30
command as _ , # noqa: F401 # imported for side-effects
31
31
)
32
32
from ._importlib import metadata
33
- from ._reqs import _StrOrIter
34
33
from .config import pyprojecttoml , setupcfg
35
34
from .discovery import ConfigDiscovery
36
35
from .monkey import get_unpatched
63
62
"""
64
63
_Sequence : TypeAlias = Union [Tuple [str , ...], List [str ]]
65
64
# This is how stringifying _Sequence would look in Python 3.10
66
- _requence_type_repr = "tuple[str, ...] | list[str]"
65
+ _sequence_type_repr = "tuple[str, ...] | list[str]"
66
+ _OrderedStrSequence : TypeAlias = Union [str , Dict [str , Any ], Sequence [str ]]
67
+ """
68
+ :meta private:
69
+ Avoid single-use iterable. Disallow sets.
70
+ A poor approximation of an OrderedSequence (dict doesn't match a Sequence).
71
+ """
67
72
68
73
69
74
def __getattr__ (name : str ) -> Any : # pragma: no cover
@@ -97,7 +102,7 @@ def assert_string_list(dist, attr: str, value: _Sequence) -> None:
97
102
assert '' .join (value ) != value
98
103
except (TypeError , ValueError , AttributeError , AssertionError ) as e :
99
104
raise DistutilsSetupError (
100
- f"{ attr !r} must be of type <{ _requence_type_repr } > (got { value !r} )"
105
+ f"{ attr !r} must be of type <{ _sequence_type_repr } > (got { value !r} )"
101
106
) from e
102
107
103
108
@@ -173,15 +178,11 @@ def invalid_unless_false(dist, attr, value):
173
178
raise DistutilsSetupError (f"{ attr } is invalid." )
174
179
175
180
176
- @overload
177
- def check_requirements (dist , attr : str , value : set | dict ) -> NoReturn : ...
178
- @overload
179
- def check_requirements (dist , attr : str , value : _StrOrIter ) -> None : ...
180
- def check_requirements (dist , attr : str , value : _StrOrIter ) -> None :
181
+ def check_requirements (dist , attr : str , value : _OrderedStrSequence ) -> None :
181
182
"""Verify that install_requires is a valid requirements list"""
182
183
try :
183
184
list (_reqs .parse (value ))
184
- if isinstance (value , ( dict , set ) ):
185
+ if isinstance (value , set ):
185
186
raise TypeError ("Unordered types are not allowed" )
186
187
except (TypeError , ValueError ) as error :
187
188
msg = (
@@ -810,7 +811,7 @@ def _exclude_misc(self, name: str, value: _Sequence) -> None:
810
811
"""Handle 'exclude()' for list/tuple attrs without a special handler"""
811
812
if not isinstance (value , _sequence ):
812
813
raise DistutilsSetupError (
813
- f"{ name } : setting must be of type <{ _requence_type_repr } > (got { value !r} )"
814
+ f"{ name } : setting must be of type <{ _sequence_type_repr } > (got { value !r} )"
814
815
)
815
816
try :
816
817
old = getattr (self , name )
@@ -828,7 +829,7 @@ def _include_misc(self, name: str, value: _Sequence) -> None:
828
829
829
830
if not isinstance (value , _sequence ):
830
831
raise DistutilsSetupError (
831
- f"{ name } : setting must be of type <{ _requence_type_repr } > (got { value !r} )"
832
+ f"{ name } : setting must be of type <{ _sequence_type_repr } > (got { value !r} )"
832
833
)
833
834
try :
834
835
old = getattr (self , name )
@@ -870,7 +871,7 @@ def exclude(self, **attrs):
870
871
def _exclude_packages (self , packages : _Sequence ) -> None :
871
872
if not isinstance (packages , _sequence ):
872
873
raise DistutilsSetupError (
873
- f"packages: setting must be of type <{ _requence_type_repr } > (got { packages !r} )"
874
+ f"packages: setting must be of type <{ _sequence_type_repr } > (got { packages !r} )"
874
875
)
875
876
list (map (self .exclude_package , packages ))
876
877
0 commit comments