Skip to content

Commit 02a8102

Browse files
Use getframe instead of stack (#15)
* Avoid inspect.stack to reduce performance impact * Bump version to 2.1.0
1 parent 6c86d8b commit 02a8102

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

depocs/__init__.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"""
1212

1313
import inspect
14+
import sys
1415
import threading
1516

1617

@@ -196,7 +197,7 @@ class will have its own stack and will be scoped independent of any
196197

197198
_Scoped__is_open = False
198199
_Scoped__is_used = False
199-
_Scoped__open_site = None
200+
_Scoped__open_site_frame = None
200201

201202
def open(self, call_site_level=1):
202203
"""
@@ -238,9 +239,11 @@ def open(self, call_site_level=1):
238239
self._Scoped__is_open = True
239240
self._Scoped__is_used = True
240241

241-
stack = inspect.stack()
242-
if len(stack) > call_site_level:
243-
self._Scoped__open_site = stack[call_site_level]
242+
try:
243+
self._Scoped__open_site_frame = sys._getframe(call_site_level)
244+
except ValueError:
245+
# No frame found, skip
246+
pass
244247

245248
return self
246249

@@ -286,8 +289,8 @@ def is_open(self):
286289
return self._Scoped__is_open
287290

288291
@property
289-
def open_site(self):
290-
return self._Scoped__open_site
292+
def open_site(self) -> inspect.Traceback:
293+
return inspect.getframeinfo(self._Scoped__open_site_frame)
291294

292295
@property
293296
def is_used(self):
@@ -350,7 +353,7 @@ def clear(cls):
350353
def format_trace_entry(self):
351354
if self.open_site:
352355
return "{0}({1}) opened at {2}:{3}\n".format(
353-
self.__class__.__name__, id(self), self.open_site[1], self.open_site[2]
356+
self.__class__.__name__, id(self), self.open_site[0], self.open_site[1]
354357
)
355358
else:
356359
return "{0}({1}) opened somewhere\n".format(

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "depocs"
3-
version = "2.0.0"
3+
version = "2.1.0"
44
homepage = "https://github.com/sdelements/depocs"
55
description = "Scoped thread-local mixin class"
66
authors = ["Security Compass <[email protected]>"]

0 commit comments

Comments
 (0)