1
+ from __future__ import annotations
2
+
1
3
import re
2
4
from collections import namedtuple
3
- from typing import Any , Dict , Iterable , List , Optional , Tuple
5
+ from typing import TYPE_CHECKING , Any
4
6
5
7
from ._logger import logger
6
8
9
+ if TYPE_CHECKING :
10
+ from collections .abc import Iterable
11
+
7
12
8
- def _append_records_to_list (df_dict : Dict , value : str , record ) -> None :
13
+ def _append_records_to_list (df_dict : dict , value : str , record ) -> None :
9
14
"""Append unique records to a list."""
10
15
values_list = df_dict [value ]
11
16
if not isinstance (values_list , list ):
@@ -20,19 +25,19 @@ def _append_records_to_list(df_dict: Dict, value: str, record) -> None:
20
25
21
26
def _create_df_dict (
22
27
df : Any = None ,
23
- field : Optional [ str ] = None ,
24
- records : Optional [ List ] = None ,
25
- values : Optional [ List ] = None ,
26
- tuple_name : Optional [ str ] = None ,
27
- ) -> Dict :
28
+ field : str | None = None ,
29
+ records : list | None = None ,
30
+ values : list | None = None ,
31
+ tuple_name : str | None = None ,
32
+ ) -> dict :
28
33
"""Create a dict with {lookup key: records in namedtuple}.
29
34
30
35
Value is a list of namedtuples if multiple records match the same key.
31
36
"""
32
37
if df is not None :
33
38
records = df .itertuples (index = False , name = tuple_name )
34
39
values = df [field ]
35
- df_dict : Dict = {} # a dict of namedtuples as records and values as keys
40
+ df_dict : dict = {} # a dict of namedtuples as records and values as keys
36
41
for i , row in enumerate (records ): # type:ignore
37
42
value = values [i ] # type:ignore
38
43
if not isinstance (value , str ):
@@ -52,12 +57,12 @@ class Lookup:
52
57
# removed DataFrame type annotation to speed up import time
53
58
def __init__ (
54
59
self ,
55
- field : Optional [ str ] = None ,
60
+ field : str | None = None ,
56
61
tuple_name = "MyTuple" ,
57
62
prefix : str = "bt" ,
58
63
df : Any = None ,
59
- values : Optional [ Iterable ] = None ,
60
- records : Optional [ List ] = None ,
64
+ values : Iterable | None = None ,
65
+ records : list | None = None ,
61
66
) -> None :
62
67
self ._tuple_name = tuple_name
63
68
if df is not None :
@@ -78,13 +83,13 @@ def __init__(
78
83
self ._lookup_dict = self ._create_lookup_dict (lkeys = lkeys , df_dict = self ._df_dict )
79
84
self ._prefix = prefix
80
85
81
- def _to_lookup_keys (self , values : Iterable , prefix : str ) -> Dict :
86
+ def _to_lookup_keys (self , values : Iterable , prefix : str ) -> dict :
82
87
"""Convert a list of strings to tab-completion allowed formats.
83
88
84
89
Returns:
85
90
{lookup_key: value_or_values}
86
91
"""
87
- lkeys : Dict = {}
92
+ lkeys : dict = {}
88
93
for value in list (values ):
89
94
if not isinstance (value , str ):
90
95
continue
@@ -103,8 +108,8 @@ def _to_lookup_keys(self, values: Iterable, prefix: str) -> Dict:
103
108
lkeys [lkey ] = value
104
109
return lkeys
105
110
106
- def _create_lookup_dict (self , lkeys : Dict , df_dict : Dict ) -> Dict :
107
- lkey_dict : Dict = {} # a dict of namedtuples as records and lookup keys as keys
111
+ def _create_lookup_dict (self , lkeys : dict , df_dict : dict ) -> dict :
112
+ lkey_dict : dict = {} # a dict of namedtuples as records and lookup keys as keys
108
113
for lkey , values in lkeys .items ():
109
114
if isinstance (values , list ):
110
115
combined_list = []
@@ -120,18 +125,18 @@ def _create_lookup_dict(self, lkeys: Dict, df_dict: Dict) -> Dict:
120
125
121
126
return lkey_dict
122
127
123
- def dict (self ) -> Dict :
128
+ def dict (self ) -> dict :
124
129
"""Dictionary of the lookup."""
125
130
return self ._df_dict
126
131
127
- def lookup (self , return_field : Optional [ str ] = None ) -> Tuple :
132
+ def lookup (self , return_field : str | None = None ) -> tuple :
128
133
"""Lookup records with dot access."""
129
134
# Names are invalid if they are conflict with Python keywords.
130
135
if "class" in self ._lookup_dict :
131
136
self ._lookup_dict [f"{ self ._prefix .lower ()} _class" ] = self ._lookup_dict .pop (
132
137
"class"
133
138
)
134
- keys : List = list (self ._lookup_dict .keys ()) + ["dict" ]
139
+ keys : list = list (self ._lookup_dict .keys ()) + ["dict" ]
135
140
MyTuple = namedtuple ("Lookup" , keys ) # type:ignore
136
141
if return_field is not None :
137
142
self ._lookup_dict = {
0 commit comments