| 89 | |
| 90 | |
| 91 | def deprecated( |
| 92 | value: object, |
| 93 | module_name: str, |
| 94 | message: str, |
| 95 | warning_class: typing.Type[Warning], |
| 96 | name: typing.Optional[str] = None, |
| 97 | ) -> _DeprecatedValue: |
| 98 | module = sys.modules[module_name] |
| 99 | if not isinstance(module, _ModuleWithDeprecations): |
| 100 | sys.modules[module_name] = module = _ModuleWithDeprecations(module) |
| 101 | dv = _DeprecatedValue(value, message, warning_class) |
| 102 | # Maintain backwards compatibility with `name is None` for pyOpenSSL. |
| 103 | if name is not None: |
| 104 | setattr(module, name, dv) |
| 105 | return dv |
| 106 | |
| 107 | |
| 108 | def cached_property(func: typing.Callable) -> property: |