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 2.1 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  2. #
  3. # Copyright (c) 2014-2021 Megvii Inc. All rights reserved.
  4. #
  5. # Unless required by applicable law or agreed to in writing,
  6. # software distributed under the License is distributed on an
  7. # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  8. import importlib
  9. import warnings
  10. from functools import wraps
  11. from deprecated.sphinx import deprecated
  12. warnings.filterwarnings(action="default", module="megengine")
  13. def deprecated_func(version, origin, name, tbd):
  14. r"""
  15. Args:
  16. version: version to deprecate this function
  17. origin: origin module path
  18. name: function name
  19. tbd: to be discussed, if true, ignore warnings
  20. """
  21. should_warning = not tbd
  22. def wrapper(*args, **kwargs):
  23. nonlocal should_warning
  24. module = importlib.import_module(origin)
  25. func = module.__getattribute__(name)
  26. if should_warning:
  27. warnings.warn(
  28. "Call to deprecated function {}. (use {}.{} instead) -- Deprecated since version {}.".format(
  29. name, origin, name, version
  30. ),
  31. category=DeprecationWarning,
  32. stacklevel=2,
  33. )
  34. return func(*args, **kwargs)
  35. return wrapper
  36. def deprecated_kwargs_default(version, kwargs_name, kwargs_pos):
  37. r"""
  38. Args:
  39. version: version to deprecate this default
  40. kwargs_name: kwargs name
  41. kwargs_pos: kwargs position
  42. """
  43. def deprecated(func):
  44. @wraps(func)
  45. def wrapper(*args, **kwargs):
  46. if len(args) < kwargs_pos and kwargs_name not in kwargs:
  47. warnings.warn(
  48. "the default behavior for {} will be changed in version {}, please use it in keyword parameter way".format(
  49. kwargs_name, version
  50. ),
  51. category=PendingDeprecationWarning,
  52. stacklevel=2,
  53. )
  54. return func(*args, **kwargs)
  55. return wrapper
  56. return deprecated