You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

deprecation.py 1.8 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import importlib
  2. import warnings
  3. from functools import wraps
  4. from deprecated.sphinx import deprecated
  5. warnings.filterwarnings(action="default", module="megengine")
  6. def deprecated_func(version, origin, name, tbd):
  7. r"""
  8. Args:
  9. version: version to deprecate this function
  10. origin: origin module path
  11. name: function name
  12. tbd: to be discussed, if true, ignore warnings
  13. """
  14. should_warning = not tbd
  15. module = importlib.import_module(origin)
  16. func = module.__getattribute__(name)
  17. @wraps(func)
  18. def wrapper(*args, **kwargs):
  19. nonlocal should_warning
  20. if should_warning:
  21. warnings.warn(
  22. "Call to deprecated function {}. (use {}.{} instead) -- Deprecated since version {}.".format(
  23. name, origin, name, version
  24. ),
  25. category=DeprecationWarning,
  26. stacklevel=2,
  27. )
  28. return func(*args, **kwargs)
  29. return wrapper
  30. def deprecated_kwargs_default(version, kwargs_name, kwargs_pos):
  31. r"""
  32. Args:
  33. version: version to deprecate this default
  34. kwargs_name: kwargs name
  35. kwargs_pos: kwargs position
  36. """
  37. def deprecated(func):
  38. @wraps(func)
  39. def wrapper(*args, **kwargs):
  40. if len(args) < kwargs_pos and kwargs_name not in kwargs:
  41. warnings.warn(
  42. "the default behavior for {} will be changed in version {}, please use it in keyword parameter way".format(
  43. kwargs_name, version
  44. ),
  45. category=PendingDeprecationWarning,
  46. stacklevel=2,
  47. )
  48. return func(*args, **kwargs)
  49. return wrapper
  50. return deprecated