42
42
from __future__ import annotations
43
43
44
44
import re
45
- from typing import Callable , Dict , Iterable , Iterator , Pattern
45
+ from typing import Callable , Dict , Iterable , Iterator , Pattern , TypeVar , overload
46
46
from typing import Match as RegexMatch
47
47
48
48
from .regex_parser import (
57
57
tokenize_regex ,
58
58
)
59
59
60
- __all__ = [
61
- "compile" ,
62
- ]
60
+ __all__ = ["compile" , "Match" , "Variables" ]
63
61
64
62
65
63
# Name of the named group in the regex, matching trailing input.
@@ -491,6 +489,9 @@ def end_nodes(self) -> Iterable[MatchVariable]:
491
489
yield MatchVariable (varname , value , (reg [0 ], reg [1 ]))
492
490
493
491
492
+ _T = TypeVar ("_T" )
493
+
494
+
494
495
class Variables :
495
496
def __init__ (self , tuples : list [tuple [str , str , tuple [int , int ]]]) -> None :
496
497
#: List of (varname, value, slice) tuples.
@@ -502,7 +503,13 @@ def __repr__(self) -> str:
502
503
", " .join (f"{ k } ={ v !r} " for k , v , _ in self ._tuples ),
503
504
)
504
505
505
- def get (self , key : str , default : str | None = None ) -> str | None :
506
+ @overload
507
+ def get (self , key : str ) -> str | None : ...
508
+
509
+ @overload
510
+ def get (self , key : str , default : _T = None ) -> str | _T : ...
511
+
512
+ def get (self , key : str , default : _T = None ) -> str | _T :
506
513
items = self .getall (key )
507
514
return items [0 ] if items else default
508
515
0 commit comments