try:
from dissolve import replace_me
except ModuleNotFoundError:
import warnings
def replace_me(since=None, remove_in=None, message=None):
def decorator(func):
def wrapper(*args, **kwargs):
msg = f"{func.__name__} has been deprecated"
if since:
msg += f" since {since}"
if remove_in:
msg += f" and will be removed in {remove_in}"
if message:
msg += f". {message}"
else:
msg += ". Consider running 'dissolve migrate' to automatically update your code."
warnings.warn(msg, DeprecationWarning, stacklevel=2)
return func(*args, **kwargs)
return wrapper
return decorator
def add(a, b):
return a + b
def multiply(a, b, factor=1):
return a * b * factor
def divide(dividend, divisor):
if divisor == 0:
raise ValueError("Cannot divide by zero")
return dividend / divisor
def power(base, exponent=2):
return base ** exponent
@replace_me(since="1.0.0", remove_in="3.0.0")
def old_add(a, b):
return add(a, b)
@replace_me(since="1.5.0", remove_in="3.0.0")
def old_multiply(x, y):
return multiply(x, y)
@replace_me(since="2.0.0")
def legacy_divide(numerator, denominator):
return divide(numerator, denominator)
@replace_me(since="1.8.0", remove_in="2.5.0")
def square(num):
return power(num, 2)
@replace_me(since="2.1.0")
def cube(num):
return power(num, 3)
@replace_me(since="1.2.0")
def old_format_string(template, *args, uppercase=False):
return format_string(uppercase, template, *args)
def format_string(uppercase, template, *args):
result = template.format(*args)
return result.upper() if uppercase else result