diff --git a/depocs/__init__.py b/depocs/__init__.py index 8add29d..a19943d 100644 --- a/depocs/__init__.py +++ b/depocs/__init__.py @@ -11,6 +11,7 @@ """ import inspect +import sys import threading @@ -196,7 +197,7 @@ class will have its own stack and will be scoped independent of any _Scoped__is_open = False _Scoped__is_used = False - _Scoped__open_site = None + _Scoped__open_site_frame = None def open(self, call_site_level=1): """ @@ -238,9 +239,11 @@ def open(self, call_site_level=1): self._Scoped__is_open = True self._Scoped__is_used = True - stack = inspect.stack() - if len(stack) > call_site_level: - self._Scoped__open_site = stack[call_site_level] + try: + self._Scoped__open_site_frame = sys._getframe(call_site_level) + except ValueError: + # No frame found, skip + pass return self @@ -286,8 +289,8 @@ def is_open(self): return self._Scoped__is_open @property - def open_site(self): - return self._Scoped__open_site + def open_site(self) -> inspect.Traceback: + return inspect.getframeinfo(self._Scoped__open_site_frame) @property def is_used(self): @@ -350,7 +353,7 @@ def clear(cls): def format_trace_entry(self): if self.open_site: return "{0}({1}) opened at {2}:{3}\n".format( - self.__class__.__name__, id(self), self.open_site[1], self.open_site[2] + self.__class__.__name__, id(self), self.open_site[0], self.open_site[1] ) else: return "{0}({1}) opened somewhere\n".format( diff --git a/pyproject.toml b/pyproject.toml index d88cdd7..24ee998 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "depocs" -version = "2.0.0" +version = "2.1.0" homepage = "https://github.com/sdelements/depocs" description = "Scoped thread-local mixin class" authors = ["Security Compass "]