33from typing import TYPE_CHECKING
44from typing import Any
55from typing import Dict
6- from typing import Iterator
6+ from typing import Iterable
77from typing import List
8+ from typing import Type
89from typing import Union
910
1011from poetry .core .version .grammars import GRAMMAR_PEP_508_MARKERS
1617
1718 from poetry .core .semver .helpers import VersionTypes
1819
19- MarkerTypes = Union [
20- "AnyMarker" , "EmptyMarker" , "SingleMarker" , "MultiMarker" , "MarkerUnion"
21- ]
22-
2320
2421class InvalidMarker (ValueError ):
2522 """
@@ -88,10 +85,10 @@ def __repr__(self) -> str:
8885
8986
9087class AnyMarker (BaseMarker ):
91- def intersect (self , other : MarkerTypes ) -> MarkerTypes :
88+ def intersect (self , other : BaseMarker ) -> BaseMarker :
9289 return other
9390
94- def union (self , other : MarkerTypes ) -> MarkerTypes :
91+ def union (self , other : BaseMarker ) -> BaseMarker :
9592 return self
9693
9794 def is_any (self ) -> bool :
@@ -103,13 +100,13 @@ def is_empty(self) -> bool:
103100 def validate (self , environment : Dict [str , Any ]) -> bool :
104101 return True
105102
106- def without_extras (self ) -> MarkerTypes :
103+ def without_extras (self ) -> BaseMarker :
107104 return self
108105
109- def exclude (self , marker_name : str ) -> MarkerTypes :
106+ def exclude (self , marker_name : str ) -> BaseMarker :
110107 return self
111108
112- def only (self , * marker_names : str ) -> MarkerTypes :
109+ def only (self , * marker_names : str ) -> BaseMarker :
113110 return self
114111
115112 def invert (self ) -> "EmptyMarker" :
@@ -132,10 +129,10 @@ def __eq__(self, other: object) -> bool:
132129
133130
134131class EmptyMarker (BaseMarker ):
135- def intersect (self , other : MarkerTypes ) -> MarkerTypes :
132+ def intersect (self , other : BaseMarker ) -> BaseMarker :
136133 return self
137134
138- def union (self , other : MarkerTypes ) -> MarkerTypes :
135+ def union (self , other : BaseMarker ) -> BaseMarker :
139136 return other
140137
141138 def is_any (self ) -> bool :
@@ -258,13 +255,13 @@ def operator(self) -> str:
258255 def value (self ) -> str :
259256 return self ._value
260257
261- def intersect (self , other : MarkerTypes ) -> MarkerTypes :
258+ def intersect (self , other : BaseMarker ) -> BaseMarker :
262259 if isinstance (other , SingleMarker ):
263260 return MultiMarker .of (self , other )
264261
265262 return other .intersect (self )
266263
267- def union (self , other : MarkerTypes ) -> MarkerTypes :
264+ def union (self , other : BaseMarker ) -> BaseMarker :
268265 if isinstance (other , SingleMarker ):
269266 if self == other :
270267 return self
@@ -285,10 +282,10 @@ def validate(self, environment: Dict[str, Any]) -> bool:
285282
286283 return self ._constraint .allows (self ._parser (environment [self ._name ]))
287284
288- def without_extras (self ) -> MarkerTypes :
285+ def without_extras (self ) -> BaseMarker :
289286 return self .exclude ("extra" )
290287
291- def exclude (self , marker_name : str ) -> MarkerTypes :
288+ def exclude (self , marker_name : str ) -> BaseMarker :
292289 if self .name == marker_name :
293290 return AnyMarker ()
294291
@@ -300,7 +297,7 @@ def only(self, *marker_names: str) -> Union["SingleMarker", EmptyMarker]:
300297
301298 return self
302299
303- def invert (self ) -> MarkerTypes :
300+ def invert (self ) -> BaseMarker :
304301 if self ._operator in ("===" , "==" ):
305302 operator = "!="
306303 elif self ._operator == "!=" :
@@ -361,8 +358,9 @@ def __str__(self) -> str:
361358
362359
363360def _flatten_markers (
364- markers : Iterator [Union ["MarkerUnion" , "MultiMarker" ]], flatten_class : Any
365- ) -> List [MarkerTypes ]:
361+ markers : Iterable [BaseMarker ],
362+ flatten_class : Type [Union ["MarkerUnion" , "MultiMarker" ]],
363+ ) -> List [BaseMarker ]:
366364 flattened = []
367365
368366 for marker in markers :
@@ -375,23 +373,23 @@ def _flatten_markers(
375373
376374
377375class MultiMarker (BaseMarker ):
378- def __init__ (self , * markers : MarkerTypes ) -> None :
376+ def __init__ (self , * markers : BaseMarker ) -> None :
379377 self ._markers = []
380378
381- markers = _flatten_markers (markers , MultiMarker )
379+ flattened_markers = _flatten_markers (markers , MultiMarker )
382380
383- for m in markers :
381+ for m in flattened_markers :
384382 self ._markers .append (m )
385383
386384 @classmethod
387- def of (cls , * markers : MarkerTypes ) -> MarkerTypes :
385+ def of (cls , * markers : BaseMarker ) -> BaseMarker :
388386 new_markers = _flatten_markers (markers , MultiMarker )
389- markers = []
387+ old_markers : List [ BaseMarker ] = []
390388
391- while markers != new_markers :
392- markers = new_markers
389+ while old_markers != new_markers :
390+ old_markers = new_markers
393391 new_markers = []
394- for marker in markers :
392+ for marker in old_markers :
395393 if marker in new_markers :
396394 continue
397395
@@ -446,10 +444,10 @@ def of(cls, *markers: MarkerTypes) -> MarkerTypes:
446444 return MultiMarker (* new_markers )
447445
448446 @property
449- def markers (self ) -> List [MarkerTypes ]:
447+ def markers (self ) -> List [BaseMarker ]:
450448 return self ._markers
451449
452- def intersect (self , other : MarkerTypes ) -> MarkerTypes :
450+ def intersect (self , other : BaseMarker ) -> BaseMarker :
453451 if other .is_any ():
454452 return self
455453
@@ -460,7 +458,7 @@ def intersect(self, other: MarkerTypes) -> MarkerTypes:
460458
461459 return MultiMarker .of (* new_markers )
462460
463- def union (self , other : MarkerTypes ) -> MarkerTypes :
461+ def union (self , other : BaseMarker ) -> BaseMarker :
464462 if other in self ._markers :
465463 return other
466464
@@ -472,10 +470,10 @@ def union(self, other: MarkerTypes) -> MarkerTypes:
472470 def validate (self , environment : Dict [str , Any ]) -> bool :
473471 return all (m .validate (environment ) for m in self ._markers )
474472
475- def without_extras (self ) -> MarkerTypes :
473+ def without_extras (self ) -> BaseMarker :
476474 return self .exclude ("extra" )
477475
478- def exclude (self , marker_name : str ) -> MarkerTypes :
476+ def exclude (self , marker_name : str ) -> BaseMarker :
479477 new_markers = []
480478
481479 for m in self ._markers :
@@ -490,7 +488,7 @@ def exclude(self, marker_name: str) -> MarkerTypes:
490488
491489 return self .of (* new_markers )
492490
493- def only (self , * marker_names : str ) -> MarkerTypes :
491+ def only (self , * marker_names : str ) -> BaseMarker :
494492 new_markers = []
495493
496494 for m in self ._markers :
@@ -505,7 +503,7 @@ def only(self, *marker_names: str) -> MarkerTypes:
505503
506504 return self .of (* new_markers )
507505
508- def invert (self ) -> MarkerTypes :
506+ def invert (self ) -> BaseMarker :
509507 markers = [marker .invert () for marker in self ._markers ]
510508
511509 return MarkerUnion .of (* markers )
@@ -535,28 +533,28 @@ def __str__(self) -> str:
535533
536534
537535class MarkerUnion (BaseMarker ):
538- def __init__ (self , * markers : MarkerTypes ) -> None :
536+ def __init__ (self , * markers : BaseMarker ) -> None :
539537 self ._markers = list (markers )
540538
541539 @property
542- def markers (self ) -> List [MarkerTypes ]:
540+ def markers (self ) -> List [BaseMarker ]:
543541 return self ._markers
544542
545543 @classmethod
546- def of (cls , * markers : BaseMarker ) -> MarkerTypes :
544+ def of (cls , * markers : BaseMarker ) -> BaseMarker :
547545 flattened_markers = _flatten_markers (markers , MarkerUnion )
548546
549- markers = []
547+ new_markers : List [ BaseMarker ] = []
550548 for marker in flattened_markers :
551- if marker in markers :
549+ if marker in new_markers :
552550 continue
553551
554552 if (
555553 isinstance (marker , SingleMarker )
556554 and marker .name in PYTHON_VERSION_MARKERS
557555 ):
558556 included = False
559- for i , mark in enumerate (markers ):
557+ for i , mark in enumerate (new_markers ):
560558 if (
561559 not isinstance (mark , SingleMarker )
562560 or mark .name not in PYTHON_VERSION_MARKERS
@@ -568,7 +566,7 @@ def of(cls, *markers: BaseMarker) -> MarkerTypes:
568566 included = True
569567 break
570568 elif union == marker .constraint :
571- markers [i ] = marker
569+ new_markers [i ] = marker
572570 included = True
573571 break
574572 elif union .is_any ():
@@ -577,26 +575,26 @@ def of(cls, *markers: BaseMarker) -> MarkerTypes:
577575 if included :
578576 continue
579577
580- markers .append (marker )
578+ new_markers .append (marker )
581579
582- if any (m .is_any () for m in markers ):
580+ if any (m .is_any () for m in new_markers ):
583581 return AnyMarker ()
584582
585- if not markers :
583+ if not new_markers :
586584 return EmptyMarker ()
587585
588- if len (markers ) == 1 :
589- return markers [0 ]
586+ if len (new_markers ) == 1 :
587+ return new_markers [0 ]
590588
591- return MarkerUnion (* markers )
589+ return MarkerUnion (* new_markers )
592590
593- def append (self , marker : MarkerTypes ) -> None :
591+ def append (self , marker : BaseMarker ) -> None :
594592 if marker in self ._markers :
595593 return
596594
597595 self ._markers .append (marker )
598596
599- def intersect (self , other : MarkerTypes ) -> MarkerTypes :
597+ def intersect (self , other : BaseMarker ) -> BaseMarker :
600598 if other .is_any ():
601599 return self
602600
@@ -620,7 +618,7 @@ def intersect(self, other: MarkerTypes) -> MarkerTypes:
620618
621619 return MarkerUnion .of (* new_markers )
622620
623- def union (self , other : MarkerTypes ) -> MarkerTypes :
621+ def union (self , other : BaseMarker ) -> BaseMarker :
624622 if other .is_any ():
625623 return other
626624
@@ -634,10 +632,10 @@ def union(self, other: MarkerTypes) -> MarkerTypes:
634632 def validate (self , environment : Dict [str , Any ]) -> bool :
635633 return any (m .validate (environment ) for m in self ._markers )
636634
637- def without_extras (self ) -> MarkerTypes :
635+ def without_extras (self ) -> BaseMarker :
638636 return self .exclude ("extra" )
639637
640- def exclude (self , marker_name : str ) -> MarkerTypes :
638+ def exclude (self , marker_name : str ) -> BaseMarker :
641639 new_markers = []
642640
643641 for m in self ._markers :
@@ -652,7 +650,7 @@ def exclude(self, marker_name: str) -> MarkerTypes:
652650
653651 return self .of (* new_markers )
654652
655- def only (self , * marker_names : str ) -> MarkerTypes :
653+ def only (self , * marker_names : str ) -> BaseMarker :
656654 new_markers = []
657655
658656 for m in self ._markers :
@@ -667,7 +665,7 @@ def only(self, *marker_names: str) -> MarkerTypes:
667665
668666 return self .of (* new_markers )
669667
670- def invert (self ) -> MarkerTypes :
668+ def invert (self ) -> BaseMarker :
671669 markers = [marker .invert () for marker in self ._markers ]
672670
673671 return MultiMarker .of (* markers )
@@ -697,7 +695,7 @@ def is_empty(self) -> bool:
697695 return all (m .is_empty () for m in self ._markers )
698696
699697
700- def parse_marker (marker : str ) -> MarkerTypes :
698+ def parse_marker (marker : str ) -> BaseMarker :
701699 if marker == "<empty>" :
702700 return EmptyMarker ()
703701
@@ -711,10 +709,10 @@ def parse_marker(marker: str) -> MarkerTypes:
711709 return markers
712710
713711
714- def _compact_markers (tree_elements : "Tree" , tree_prefix : str = "" ) -> MarkerTypes :
712+ def _compact_markers (tree_elements : "Tree" , tree_prefix : str = "" ) -> BaseMarker :
715713 from lark import Token
716714
717- groups = [MultiMarker ()]
715+ groups : List [ BaseMarker ] = [MultiMarker ()]
718716 for token in tree_elements :
719717 if isinstance (token , Token ):
720718 if token .type == f"{ tree_prefix } BOOL_OP" and token .value == "or" :
0 commit comments