Skip to content

Commit 6dc0eeb

Browse files
committed
feat: new versions of enter and leave method
1 parent 88c7a91 commit 6dc0eeb

File tree

1 file changed

+65
-12
lines changed

1 file changed

+65
-12
lines changed

session/session.py

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)