8
8
import sys
9
9
from glob import iglob
10
10
from pathlib import Path
11
- from typing import TYPE_CHECKING , List , MutableMapping , NoReturn , Tuple , Union , overload
11
+ from typing import (
12
+ TYPE_CHECKING ,
13
+ Any ,
14
+ List ,
15
+ MutableMapping ,
16
+ NoReturn ,
17
+ Tuple ,
18
+ Union ,
19
+ overload ,
20
+ )
12
21
13
22
from more_itertools import partition , unique_everseen
14
23
from packaging .markers import InvalidMarker , Marker
42
51
43
52
__all__ = ['Distribution' ]
44
53
45
- sequence = tuple , list
54
+ _sequence = tuple , list
46
55
"""
56
+ :meta private:
57
+
47
58
Supported iterable types that are known to be:
48
59
- ordered (which `set` isn't)
49
60
- not match a str (which `Sequence[str]` does)
55
66
_requence_type_repr = "tuple[str, ...] | list[str]"
56
67
57
68
69
+ def __getattr__ (name : str ) -> Any : # pragma: no cover
70
+ if name == "sequence" :
71
+ SetuptoolsDeprecationWarning .emit (
72
+ "`setuptools.dist.sequence` is an internal implementation detail." ,
73
+ "Please define your own `sequence = tuple, list` instead." ,
74
+ due_date = (2025 , 8 , 28 ), # Originally added on 2024-08-27
75
+ )
76
+ return _sequence
77
+ raise AttributeError (f"module { __name__ !r} has no attribute { name !r} " )
78
+
79
+
58
80
def check_importable (dist , attr , value ):
59
81
try :
60
82
ep = metadata .EntryPoint (value = value , name = None , group = None )
@@ -70,7 +92,7 @@ def assert_string_list(dist, attr: str, value: _Sequence) -> None:
70
92
try :
71
93
# verify that value is a list or tuple to exclude unordered
72
94
# or single-use iterables
73
- assert isinstance (value , sequence )
95
+ assert isinstance (value , _sequence )
74
96
# verify that elements of value are strings
75
97
assert '' .join (value ) != value
76
98
except (TypeError , ValueError , AttributeError , AssertionError ) as e :
@@ -786,15 +808,15 @@ def has_contents_for(self, package):
786
808
787
809
def _exclude_misc (self , name : str , value : _Sequence ) -> None :
788
810
"""Handle 'exclude()' for list/tuple attrs without a special handler"""
789
- if not isinstance (value , sequence ):
811
+ if not isinstance (value , _sequence ):
790
812
raise DistutilsSetupError (
791
813
f"{ name } : setting must be of type <{ _requence_type_repr } > (got { value !r} )"
792
814
)
793
815
try :
794
816
old = getattr (self , name )
795
817
except AttributeError as e :
796
818
raise DistutilsSetupError ("%s: No such distribution setting" % name ) from e
797
- if old is not None and not isinstance (old , sequence ):
819
+ if old is not None and not isinstance (old , _sequence ):
798
820
raise DistutilsSetupError (
799
821
name + ": this setting cannot be changed via include/exclude"
800
822
)
@@ -804,7 +826,7 @@ def _exclude_misc(self, name: str, value: _Sequence) -> None:
804
826
def _include_misc (self , name : str , value : _Sequence ) -> None :
805
827
"""Handle 'include()' for list/tuple attrs without a special handler"""
806
828
807
- if not isinstance (value , sequence ):
829
+ if not isinstance (value , _sequence ):
808
830
raise DistutilsSetupError (
809
831
f"{ name } : setting must be of type <{ _requence_type_repr } > (got { value !r} )"
810
832
)
@@ -814,7 +836,7 @@ def _include_misc(self, name: str, value: _Sequence) -> None:
814
836
raise DistutilsSetupError ("%s: No such distribution setting" % name ) from e
815
837
if old is None :
816
838
setattr (self , name , value )
817
- elif not isinstance (old , sequence ):
839
+ elif not isinstance (old , _sequence ):
818
840
raise DistutilsSetupError (
819
841
name + ": this setting cannot be changed via include/exclude"
820
842
)
@@ -846,7 +868,7 @@ def exclude(self, **attrs):
846
868
self ._exclude_misc (k , v )
847
869
848
870
def _exclude_packages (self , packages : _Sequence ) -> None :
849
- if not isinstance (packages , sequence ):
871
+ if not isinstance (packages , _sequence ):
850
872
raise DistutilsSetupError (
851
873
f"packages: setting must be of type <{ _requence_type_repr } > (got { packages !r} )"
852
874
)
0 commit comments