@@ -168,26 +168,76 @@ def reset_call_stack(self, **kwargs) -> None:
168168 if self .is_on_level (level ):
169169 self .__send_log_entry (level , None , LogEntryType .RESET_CALLSTACK , ViewerId .NO_VIEWER )
170170
171- def enter_method (self , method_name : str , * args , ** kwargs ) -> None :
171+ def enter_method (self , method_name : str = "" , * args , ** kwargs ) -> None :
172172 level = self .__get_level (** kwargs )
173173
174174 if self .is_on_level (level ):
175175
176176 try :
177177 if not isinstance (method_name , str ):
178178 raise TypeError ('Method name must be a string' )
179- method_name = method_name .format (* args , ** kwargs )
179+ if method_name :
180+ method_name = method_name .format (* args , ** kwargs )
181+
182+ instance = kwargs .get ("instance" )
183+ if instance is not None :
184+ class_name = instance .__class__ .__name__
185+ method_name = f"{ class_name } .{ method_name } "
186+ else :
187+ method_name = self ._get_method_name ()
188+ except Exception as e :
189+ return self .__process_internal_error (e )
190+
191+ self .__send_log_entry (level , method_name , LogEntryType .ENTER_METHOD , ViewerId .TITLE )
192+ self .__send_process_flow (level , method_name , ProcessFlowType .ENTER_METHOD )
180193
181- instance = kwargs .get ("instance" )
182- if instance is not None :
183- class_name = instance .__class__ .__name__
184- method_name = f"{ class_name } .{ method_name } "
194+ def enter_method (self , method_name : str = "" , * args , ** kwargs ) -> None :
195+ level = self .__get_level (** kwargs )
196+
197+ if self .is_on_level (level ):
198+
199+ try :
200+ if not isinstance (method_name , str ):
201+ raise TypeError ('Method name must be a string' )
202+ if method_name :
203+ method_name = method_name .format (* args , ** kwargs )
204+
205+ instance = kwargs .get ("instance" )
206+ if instance is not None :
207+ class_name = instance .__class__ .__name__
208+ method_name = f"{ class_name } .{ method_name } "
209+ else :
210+ method_name = self ._get_method_name ()
185211 except Exception as e :
186212 return self .__process_internal_error (e )
187213
188214 self .__send_log_entry (level , method_name , LogEntryType .ENTER_METHOD , ViewerId .TITLE )
189215 self .__send_process_flow (level , method_name , ProcessFlowType .ENTER_METHOD )
190216
217+ # noinspection PyBroadException
218+ @staticmethod
219+ def _get_method_name () -> str :
220+ method_name = "<Unknown>"
221+
222+ try :
223+ stack_frame = inspect .stack (0 )[1 ]
224+ if stack_frame is None :
225+ return method_name
226+
227+ # extract the parts of the stack frame.
228+ filepath , line , func_name = stack_frame [1 :4 ]
229+ method_name = func_name .strip ()
230+ module_name = os .path .basename (filepath )
231+
232+ # add source position to method name.
233+ if module_name is not None :
234+ method_name += " ({0}, line {1})" .format (module_name , line )
235+
236+ return method_name
237+
238+ except Exception :
239+ return method_name
240+
191241 def __process_internal_error (self , e : Exception ) -> None :
192242 tb = e .__traceback__
193243 calling_method_name = traceback .extract_tb (tb )[- 1 ].name
@@ -205,18 +255,21 @@ def __get_level(self, **kwargs):
205255
206256 return level
207257
208- def leave_method (self , method_name : str , * args , ** kwargs ) -> None :
258+ def leave_method (self , method_name : str = "" , * args , ** kwargs ) -> None :
209259 level = self .__get_level (** kwargs )
210260 if self .is_on_level (level ):
211261
212262 try :
213263 if not isinstance (method_name , str ):
214264 raise TypeError ('Method name must be a string' )
215- method_name = method_name .format (* args , ** kwargs )
216- instance = kwargs .get ("instance" )
217- if instance is not None :
218- class_name = instance .__class__ .__name__
219- method_name = f"{ class_name } .{ method_name } "
265+ if method_name :
266+ method_name = method_name .format (* args , ** kwargs )
267+ instance = kwargs .get ("instance" )
268+ if instance is not None :
269+ class_name = instance .__class__ .__name__
270+ method_name = f"{ class_name } .{ method_name } "
271+ else :
272+ method_name = self ._get_method_name ()
220273 except Exception as e :
221274 return self .__process_internal_error (e )
222275
0 commit comments