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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. def wrapper(*args, **kwargs):
  16. nonlocal should_warning
  17. module = importlib.import_module(origin)
  18. func = module.__getattribute__(name)
  19. if should_warning:
  20. warnings.warn(
  21. "Call to deprecated function {}. (use {}.{} instead) -- Deprecated since version {}.".format(
  22. name, origin, name, version
  23. ),
  24. category=DeprecationWarning,
  25. stacklevel=2,
  26. )
  27. return func(*args, **kwargs)
  28. return wrapper
  29. def deprecated_kwargs_default(version, kwargs_name, kwargs_pos):
  30. r"""
  31. Args:
  32. version: version to deprecate this default
  33. kwargs_name: kwargs name
  34. kwargs_pos: kwargs position
  35. """
  36. def deprecated(func):
  37. @wraps(func)
  38. def wrapper(*args, **kwargs):
  39. if len(args) < kwargs_pos and kwargs_name not in kwargs:
  40. warnings.warn(
  41. "the default behavior for {} will be changed in version {}, please use it in keyword parameter way".format(
  42. kwargs_name, version
  43. ),
  44. category=PendingDeprecationWarning,
  45. stacklevel=2,
  46. )
  47. return func(*args, **kwargs)
  48. return wrapper
  49. return deprecated