Skip to content

Commit 3c0a21d

Browse files
committed
Avoid full importing of module typing
1 parent fac1e42 commit 3c0a21d

4 files changed

Lines changed: 127 additions & 130 deletions

File tree

mesonbuild/modules/features/__init__.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
# Copyright (c) 2023, NumPy Developers.
2-
# All rights reserved.
3-
#
42

5-
import typing as T
3+
from typing import TYPE_CHECKING
64

75
from .module import Module
86

9-
if T.TYPE_CHECKING:
7+
if TYPE_CHECKING:
108
from ...interpreter import Interpreter
119

1210
def initialize(interpreter: 'Interpreter') -> Module:

mesonbuild/modules/features/feature.py

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# Copyright (c) 2023, NumPy Developers.
22
# All rights reserved.
3-
4-
import typing as T
53
import re
4+
from typing import (
5+
Dict, Set, Tuple, List, Callable, Optional,
6+
Union, Any, Iterable, cast, TYPE_CHECKING
7+
)
68
from dataclasses import dataclass, field
7-
89
from ...mesonlib import File, MesonException
910
from ...interpreter.type_checking import NoneType
1011
from ...interpreterbase.decorators import (
@@ -13,7 +14,7 @@
1314
)
1415
from .. import ModuleObject
1516

16-
if T.TYPE_CHECKING:
17+
if TYPE_CHECKING:
1718
from typing import TypedDict
1819
from typing_extensions import NotRequired
1920
from ...interpreterbase import TYPE_var, TYPE_kwargs
@@ -40,19 +41,19 @@ class ConflictAttr:
4041
4142
"""
4243
val: str = field(hash=True, compare=True)
43-
match: T.Union[re.Pattern, None] = field(
44+
match: Union[re.Pattern, None] = field(
4445
default=None, hash=False, compare=False
4546
)
46-
mfilter: T.Union[re.Pattern, None] = field(
47+
mfilter: Union[re.Pattern, None] = field(
4748
default=None, hash=False, compare=False
4849
)
4950
mjoin: str = field(default='', hash=False, compare=False)
5051

5152
def copy(self) -> 'ConflictAttr':
5253
return ConflictAttr(**self.__dict__)
5354

54-
def to_dict(self) -> T.Dict[str, str]:
55-
ret: T.Dict[str, str] = {}
55+
def to_dict(self) -> Dict[str, str]:
56+
ret: Dict[str, str] = {}
5657
for attr in ('val', 'mjoin'):
5758
ret[attr] = getattr(self, attr)
5859
for attr in ('match', 'mfilter'):
@@ -65,7 +66,7 @@ def to_dict(self) -> T.Dict[str, str]:
6566
return ret
6667

6768
class KwargConfilctAttr(KwargInfo):
68-
def __init__(self, func_name: str, opt_name: str, default: T.Any = None):
69+
def __init__(self, func_name: str, opt_name: str, default: Any = None):
6970
types = (
7071
NoneType, str, ContainerTypeInfo(dict, str),
7172
ContainerTypeInfo(list, (dict, str))
@@ -80,10 +81,10 @@ def __init__(self, func_name: str, opt_name: str, default: T.Any = None):
8081

8182
@staticmethod
8283
def convert(func_name:str, opt_name: str, values: 'IMPLIED_ATTR',
83-
) -> T.Union[None, T.List[ConflictAttr]]:
84+
) -> Union[None, List[ConflictAttr]]:
8485
if values is None:
8586
return None
86-
ret: T.List[ConflictAttr] = []
87+
ret: List[ConflictAttr] = []
8788
values = [values] if isinstance(values, (str, dict)) else values
8889
accepted_keys = ('val', 'match', 'mfilter', 'mjoin')
8990
for edict in values:
@@ -124,20 +125,20 @@ def convert(func_name:str, opt_name: str, values: 'IMPLIED_ATTR',
124125
ret.append(implattr)
125126
return ret
126127

127-
if T.TYPE_CHECKING:
128-
IMPLIED_ATTR = T.Union[
129-
None, str, T.Dict[str, str], T.List[
130-
T.Union[str, T.Dict[str, str]]
128+
if TYPE_CHECKING:
129+
IMPLIED_ATTR = Union[
130+
None, str, Dict[str, str], List[
131+
Union[str, Dict[str, str]]
131132
]
132133
]
133134
class FeatureKwArgs(TypedDict):
134-
#implies: T.Optional[T.List['FeatureObject']]
135-
implies: NotRequired[T.List[T.Any]]
136-
group: NotRequired[T.List[str]]
137-
detect: NotRequired[T.List[ConflictAttr]]
138-
args: NotRequired[T.List[ConflictAttr]]
139-
test_code: NotRequired[T.Union[str, File]]
140-
extra_tests: NotRequired[T.Dict[str, T.Union[str, File]]]
135+
#implies: Optional[List['FeatureObject']]
136+
implies: NotRequired[List[Any]]
137+
group: NotRequired[List[str]]
138+
detect: NotRequired[List[ConflictAttr]]
139+
args: NotRequired[List[ConflictAttr]]
140+
test_code: NotRequired[Union[str, File]]
141+
extra_tests: NotRequired[Dict[str, Union[str, File]]]
141142
disable: NotRequired[str]
142143

143144
class FeatureUpdateKwArgs(FeatureKwArgs):
@@ -147,16 +148,16 @@ class FeatureUpdateKwArgs(FeatureKwArgs):
147148
class FeatureObject(ModuleObject):
148149
name: str
149150
interest: int
150-
implies: T.Set['FeatureObject']
151-
group: T.List[str]
152-
detect: T.List[ConflictAttr]
153-
args: T.List[ConflictAttr]
154-
test_code: T.Union[str, File]
155-
extra_tests: T.Dict[str, T.Union[str, File]]
151+
implies: Set['FeatureObject']
152+
group: List[str]
153+
detect: List[ConflictAttr]
154+
args: List[ConflictAttr]
155+
test_code: Union[str, File]
156+
extra_tests: Dict[str, Union[str, File]]
156157
disable: str
157158

158159
def __init__(self, state: 'ModuleState',
159-
args: T.List['TYPE_var'],
160+
args: List['TYPE_var'],
160161
kwargs: 'TYPE_kwargs') -> None:
161162

162163
super().__init__()
@@ -182,7 +183,7 @@ def __init__(self, state: 'ModuleState',
182183
KwargInfo('disable', (str), default=''),
183184
)
184185
def init_attrs(state: 'ModuleState',
185-
args: T.Tuple[str, int],
186+
args: Tuple[str, int],
186187
kwargs: 'FeatureKwArgs') -> None:
187188
self.name = args[0]
188189
self.interest = args[1]
@@ -205,7 +206,7 @@ def init_attrs(state: 'ModuleState',
205206
'get': self.get_method,
206207
})
207208

208-
def update_method(self, state: 'ModuleState', args: T.List['TYPE_var'],
209+
def update_method(self, state: 'ModuleState', args: List['TYPE_var'],
209210
kwargs: 'TYPE_kwargs') -> 'FeatureObject':
210211
@noPosargs
211212
@typed_kwargs('features.FeatureObject.update',
@@ -231,7 +232,7 @@ def update_method(self, state: 'ModuleState', args: T.List['TYPE_var'],
231232
),
232233
KwargInfo('disable', (NoneType, str)),
233234
)
234-
def update(state: 'ModuleState', args: T.List['TYPE_var'],
235+
def update(state: 'ModuleState', args: List['TYPE_var'],
235236
kwargs: 'FeatureUpdateKwArgs') -> None:
236237
for k, v in kwargs.items():
237238
if v is not None and k != 'implies':
@@ -244,7 +245,7 @@ def update(state: 'ModuleState', args: T.List['TYPE_var'],
244245

245246
@noKwargs
246247
@typed_pos_args('features.FeatureObject.get', str)
247-
def get_method(self, state: 'ModuleState', args: T.Tuple[str],
248+
def get_method(self, state: 'ModuleState', args: Tuple[str],
248249
kwargs: 'TYPE_kwargs') -> 'TYPE_var':
249250

250251
impl_lst = lambda lst: [v.to_dict() for v in lst]
@@ -260,14 +261,14 @@ def get_method(self, state: 'ModuleState', args: T.Tuple[str],
260261
'extra_tests': noconv,
261262
'disable': noconv
262263
}
263-
cfunc: T.Optional[T.Callable[[str], 'TYPE_var']] = dfunc.get(args[0])
264+
cfunc: Optional[Callable[[str], 'TYPE_var']] = dfunc.get(args[0])
264265
if cfunc is None:
265266
raise MesonException(f'Key {args[0]!r} is not in the feature.')
266267
val = getattr(self, args[0])
267268
return cfunc(val)
268269

269-
def get_implicit(self, _caller: T.Set['FeatureObject'] = None
270-
) -> T.Set['FeatureObject']:
270+
def get_implicit(self, _caller: Set['FeatureObject'] = None
271+
) -> Set['FeatureObject']:
271272
# infinity recursive guard since
272273
# features can imply each other
273274
_caller = {self, } if not _caller else _caller.union({self, })
@@ -278,19 +279,19 @@ def get_implicit(self, _caller: T.Set['FeatureObject'] = None
278279
return ret
279280

280281
@staticmethod
281-
def get_implicit_multi(features: T.Iterable['FeatureObject']) -> T.Set['FeatureObject']:
282+
def get_implicit_multi(features: Iterable['FeatureObject']) -> Set['FeatureObject']:
282283
implies = set().union(*[f.get_implicit() for f in features])
283284
return implies
284285

285286
@staticmethod
286-
def get_implicit_combine_multi(features: T.Iterable['FeatureObject']) -> T.Set['FeatureObject']:
287+
def get_implicit_combine_multi(features: Iterable['FeatureObject']) -> Set['FeatureObject']:
287288
return FeatureObject.get_implicit_multi(features).union(features)
288289

289290
@staticmethod
290-
def sorted_multi(features: T.Iterable[T.Union['FeatureObject', T.Iterable['FeatureObject']]],
291+
def sorted_multi(features: Iterable[Union['FeatureObject', Iterable['FeatureObject']]],
291292
reverse: bool = False
292-
) -> T.List[T.Union['FeatureObject', T.Iterable['FeatureObject']]]:
293-
def sort_cb(k: T.Union[FeatureObject, T.Iterable[FeatureObject]]) -> int:
293+
) -> List[Union['FeatureObject', Iterable['FeatureObject']]]:
294+
def sort_cb(k: Union[FeatureObject, Iterable[FeatureObject]]) -> int:
294295
if isinstance(k, FeatureObject):
295296
return k.interest
296297
# keep prevalent features and erase any implied features
@@ -310,8 +311,8 @@ def sort_cb(k: T.Union[FeatureObject, T.Iterable[FeatureObject]]) -> int:
310311
return sorted(features, reverse=reverse, key=sort_cb)
311312

312313
@staticmethod
313-
def features_names(features: T.Iterable[T.Union['FeatureObject', T.Iterable['FeatureObject']]]
314-
) -> T.List[T.Union[str, T.List[str]]]:
314+
def features_names(features: Iterable[Union['FeatureObject', Iterable['FeatureObject']]]
315+
) -> List[Union[str, List[str]]]:
315316
return [
316317
fet.name if isinstance(fet, FeatureObject)
317318
else [f.name for f in fet]
@@ -338,18 +339,18 @@ def __eq__(self, robj: object) -> bool:
338339
return False
339340
return self is robj and self.name == robj.name
340341

341-
def __lt__(self, robj: object) -> T.Any:
342+
def __lt__(self, robj: object) -> Any:
342343
if not isinstance(robj, FeatureObject):
343344
return NotImplemented
344345
return self.interest < robj.interest
345346

346-
def __le__(self, robj: object) -> T.Any:
347+
def __le__(self, robj: object) -> Any:
347348
if not isinstance(robj, FeatureObject):
348349
return NotImplemented
349350
return self.interest <= robj.interest
350351

351-
def __gt__(self, robj: object) -> T.Any:
352+
def __gt__(self, robj: object) -> Any:
352353
return robj < self
353354

354-
def __ge__(self, robj: object) -> T.Any:
355+
def __ge__(self, robj: object) -> Any:
355356
return robj <= self

0 commit comments

Comments
 (0)