mirror of
https://github.com/eternnoir/pyTelegramBotAPI.git
synced 2023-08-10 21:12:57 +03:00
Merge pull request #1214 from SwissCorePy/master
new deprecated decorator
This commit is contained in:
commit
484e7fccbd
@ -6,7 +6,7 @@ import threading
|
||||
import traceback
|
||||
import warnings
|
||||
import functools
|
||||
from typing import Any, List, Dict, Union
|
||||
from typing import Any, Callable, List, Dict, Optional, Union
|
||||
|
||||
import queue as Queue
|
||||
import logging
|
||||
@ -420,17 +420,22 @@ def generate_random_token():
|
||||
return ''.join(random.sample(string.ascii_letters, 16))
|
||||
|
||||
|
||||
def deprecated(func):
|
||||
"""This is a decorator which can be used to mark functions
|
||||
as deprecated. It will result in a warning being emitted
|
||||
when the function is used."""
|
||||
# https://stackoverflow.com/a/30253848/441814
|
||||
@functools.wraps(func)
|
||||
def new_func(*args, **kwargs):
|
||||
warnings.simplefilter('always', DeprecationWarning) # turn off filter
|
||||
warnings.warn("Call to deprecated function {}.".format(func.__name__),
|
||||
category=DeprecationWarning,
|
||||
stacklevel=2)
|
||||
warnings.simplefilter('default', DeprecationWarning) # reset filter
|
||||
return func(*args, **kwargs)
|
||||
return new_func
|
||||
def deprecated(warn: bool=False, alternative: Optional[Callable]=None):
|
||||
"""
|
||||
Use this decorator to mark functions as deprecated.
|
||||
When the function is used, an info (or warning if `warn` is True) is logged.
|
||||
:param warn: If True a warning is logged else an info
|
||||
:param alternative: The new function to use instead
|
||||
"""
|
||||
def decorator(function):
|
||||
def wrapper(*args, **kwargs):
|
||||
if not warn:
|
||||
logger.info(f"`{function.__name__}` is deprecated."
|
||||
+ (f" Use `{alternative.__name__}` instead" if alternative else ""))
|
||||
else:
|
||||
logger.warn(f"`{function.__name__}` is deprecated."
|
||||
+ (f" Use `{alternative.__name__}` instead" if alternative else ""))
|
||||
return function(*args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
@ -19,6 +19,14 @@ if not should_skip:
|
||||
CHAT_ID = os.environ['CHAT_ID']
|
||||
GROUP_ID = os.environ['GROUP_ID']
|
||||
|
||||
def _new_test():
|
||||
pass
|
||||
|
||||
@util.deprecated(alternative=_new_test)
|
||||
def _test():
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@pytest.mark.skipif(should_skip, reason="No environment variables configured")
|
||||
class TestTeleBot:
|
||||
@ -615,6 +623,9 @@ class TestTeleBot:
|
||||
tb.process_new_updates([update])
|
||||
time.sleep(1)
|
||||
assert update.message.text == 'got' * 2
|
||||
|
||||
def test_deprecated_dec(self):
|
||||
_test()
|
||||
|
||||
def test_chat_permissions(self):
|
||||
return # CHAT_ID is private chat, no permissions can be set
|
||||
|
Loading…
Reference in New Issue
Block a user