@@ -25,6 +25,8 @@ def __init__(self, locals_context: _LocalsContext):
2525 self ._var_dir : t .Dict [str , t .Dict ] = {}
2626 self ._var_head : t .Dict [str , t .List [t .Tuple [str , str ]]] = {}
2727 self ._imported_var_dir : t .Dict [str , t .List [t .Tuple [str , str , str ]]] = {}
28+ self ._pre_processed_module : t .Set [str ] = set ()
29+ self ._processed_module : t .Set [str ] = set ()
2830
2931 def set_default (self , frame : FrameType ) -> None :
3032 self ._default_module = _get_module_name_from_frame (frame )
@@ -39,7 +41,10 @@ def add_frame(self, frame: t.Optional[FrameType]) -> None:
3941 self ._imported_var_dir [t .cast (str , module_name )] = imported_var_list
4042
4143 def pre_process_module_import_all (self ) -> None :
42- for imported_dir in self ._imported_var_dir .values ():
44+ for base_module , imported_dir in self ._imported_var_dir .items ():
45+ # Skip pre process for modules that have been processed
46+ if base_module in self ._pre_processed_module :
47+ continue
4348 additional_var_list : t .List [t .Tuple [str , str , str ]] = []
4449 for name , asname , module in imported_dir :
4550 if name != "*" or asname != "*" :
@@ -51,21 +56,28 @@ def pre_process_module_import_all(self) -> None:
5156 (v , v , module ) for v in self ._locals_context .get_locals ().keys () if not v .startswith ("_" )
5257 )
5358 imported_dir .extend (additional_var_list )
59+ # Save the pre-processed module
60+ self ._pre_processed_module .add (base_module )
5461
5562 def process_imported_var (self ) -> None :
5663 self .pre_process_module_import_all ()
57- default_imported_dir = self ._imported_var_dir [t .cast (str , self ._default_module )]
58- with self ._locals_context .set_locals_context (self ._default_module ):
59- for name , asname , module in default_imported_dir :
60- if name == "*" and asname == "*" :
61- continue
62- imported_module_name = _get_module_name_from_imported_var (
63- name , self ._locals_context .get_locals ().get (asname , None ), module
64- )
65- temp_var_name = self .add_var (asname , self ._default_module )
66- self .add_var (name , imported_module_name , temp_var_name )
64+ default_module = t .cast (str , self ._default_module )
65+ if default_module not in self ._processed_module :
66+ default_imported_dir = self ._imported_var_dir [default_module ]
67+ with self ._locals_context .set_locals_context (self ._default_module ):
68+ for name , asname , module in default_imported_dir :
69+ if name == "*" and asname == "*" :
70+ continue
71+ imported_module_name = _get_module_name_from_imported_var (
72+ name , self ._locals_context .get_locals ().get (asname , None ), module
73+ )
74+ temp_var_name = self .add_var (asname , self ._default_module )
75+ self .add_var (name , imported_module_name , temp_var_name )
76+ self ._processed_module .add (default_module )
6777
6878 for k , v in self ._imported_var_dir .items ():
79+ if k in self ._processed_module :
80+ continue
6981 with self ._locals_context .set_locals_context (k ):
7082 for name , asname , module in v :
7183 if name == "*" and asname == "*" :
@@ -82,6 +94,7 @@ def process_imported_var(self) -> None:
8294 self .add_var (asname , k , var_name )
8395 else :
8496 self .add_var (name , imported_module_name , var_asname )
97+ self ._processed_module .add (k )
8598
8699 def add_var (self , name : str , module : t .Optional [str ], var_name : t .Optional [str ] = None ) -> str :
87100 if module is None :
@@ -119,9 +132,11 @@ def get_var(self, name: str, module: str) -> t.Optional[str]:
119132_MODULE_ID = "_TPMDL_"
120133_RE_TPMDL_DECODE = re .compile (r"(.*?)" + _MODULE_ID + r"(\d+)$" )
121134
135+
122136def _is_moduled_variable (var_name : str ):
123137 return _MODULE_ID in var_name
124138
139+
125140def _variable_encode (var_name : str , module_name : t .Optional [str ]):
126141 if module_name is None :
127142 return var_name
0 commit comments