mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-20 18:06:08 -05:00
[Utils] Tools for marking things unsafe for general use (#2326)
* Tools for marking things unsafe for general use * I'm facepalming so much... Actually, make the two do something different instead of getting distracted writing different docs for both based on intended usage. * local scopes mmkay + tests * Move file to adress feedback * typo fix * Update __init__.py * Fix issue with exported names in __init__ * changelog
This commit is contained in:
49
redbot/core/utils/safety.py
Normal file
49
redbot/core/utils/safety.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import warnings
|
||||
import functools
|
||||
|
||||
|
||||
def unsafe(f, message=None):
|
||||
"""
|
||||
Decorator form for marking a function as unsafe.
|
||||
|
||||
This form may not get used much, but there are a few cases
|
||||
we may want to add something unsafe generally, but safe in specific uses.
|
||||
|
||||
The warning can be supressed in the safe context with warnings.catch_warnings
|
||||
This should be used sparingly at most.
|
||||
"""
|
||||
|
||||
def wrapper(func):
|
||||
@functools.wraps(func)
|
||||
def get_wrapped(*args, **kwargs):
|
||||
actual_message = message or f"{func.__name__} is unsafe for use"
|
||||
warnings.warn(actual_message, stacklevel=3, category=RuntimeWarning)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return get_wrapped
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def warn_unsafe(f, message=None):
|
||||
"""
|
||||
Function to mark function from dependencies as unsafe for use.
|
||||
|
||||
Warning: There is no check that a function has already been modified.
|
||||
This form should only be used in init, if you want to mark an internal function
|
||||
as unsafe, use the decorator form above.
|
||||
|
||||
The warning can be suppressed in safe contexts with warnings.catch_warnings
|
||||
This should be used sparingly at most.
|
||||
"""
|
||||
|
||||
def wrapper(func):
|
||||
@functools.wraps(func)
|
||||
def get_wrapped(*args, **kwargs):
|
||||
actual_message = message or f"{func.__name__} is unsafe for use"
|
||||
warnings.warn(actual_message, stacklevel=3, category=RuntimeWarning)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return get_wrapped
|
||||
|
||||
return wrapper(f)
|
||||
Reference in New Issue
Block a user