Skip to content

Commit 584e9e0

Browse files
author
Pietro Albini
committed
Add support for deprecating attributes of a class
1 parent 6331f5e commit 584e9e0

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

botogram/utils.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,46 @@
2828
warn_logger = logbook.Logger("botogram's code warnings")
2929

3030

31+
def _deprecated_message(name, removed_on, fix, back):
32+
before = "%s will be removed in botogram %s." % (name, removed_on)
33+
after = "Fix: %s" % fix
34+
warn(back-1, before, after)
35+
36+
3137
def deprecated(name, removed_on, fix):
3238
"""Mark a function as deprecated"""
3339
def decorator(func):
3440
def wrapper(*args, **kwargs):
35-
before = "%s will be removed in botogram %s." % (name, removed_on)
36-
after = "Fix: %s" % fix
37-
warn(-1, before, after)
38-
41+
_deprecated_message(name, removed_on, fix, -2)
3942
return func(*args, **kwargs)
4043
return wrapper
4144
return decorator
4245

4346

47+
class DeprecatedAttributes:
48+
"""Mark a class attribute as deprecated"""
49+
50+
_deprecated_ = {}
51+
52+
def __getattribute__(self, key):
53+
def get(k):
54+
return object.__getattribute__(self, k)
55+
56+
deprecated = get("_deprecated_")
57+
58+
if key in deprecated:
59+
_deprecated_message(
60+
get("__class__").__name__+"."+key,
61+
deprecated[key]["removed_on"],
62+
deprecated[key]["fix"],
63+
-2,
64+
)
65+
if "callback" in deprecated[key]:
66+
return deprecated[key]["callback"]()
67+
68+
return object.__getattribute__(self, key)
69+
70+
4471
def warn(stack_pos, before_message, after_message=None):
4572
"""Issue a warning caused by user code"""
4673
frame = traceback.extract_stack()[stack_pos-1]

0 commit comments

Comments
 (0)