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.9 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. wrapper.__deprecated__ = True
  30. return wrapper
  31. def deprecated_kwargs_default(version, kwargs_name, kwargs_pos):
  32. r"""
  33. Args:
  34. version: version to deprecate this default
  35. kwargs_name: kwargs name
  36. kwargs_pos: kwargs position
  37. """
  38. def deprecated(func):
  39. @wraps(func)
  40. def wrapper(*args, **kwargs):
  41. if len(args) < kwargs_pos and kwargs_name not in kwargs:
  42. warnings.warn(
  43. "the default behavior for {} will be changed in version {}, please use it in keyword parameter way".format(
  44. kwargs_name, version
  45. ),
  46. category=PendingDeprecationWarning,
  47. stacklevel=2,
  48. )
  49. return func(*args, **kwargs)
  50. wrapper.__deprecated__ = True
  51. return wrapper
  52. return deprecated