Spaces:
Runtime error
Runtime error
text-generation-webui
/
installer_files
/conda
/lib
/python3.10
/site-packages
/cryptography
/utils.py
| # This file is dual licensed under the terms of the Apache License, Version | |
| # 2.0, and the BSD License. See the LICENSE file in the root of this repository | |
| # for complete details. | |
| import abc | |
| import enum | |
| import sys | |
| import types | |
| import typing | |
| import warnings | |
| # We use a UserWarning subclass, instead of DeprecationWarning, because CPython | |
| # decided deprecation warnings should be invisble by default. | |
| class CryptographyDeprecationWarning(UserWarning): | |
| pass | |
| # Several APIs were deprecated with no specific end-of-life date because of the | |
| # ubiquity of their use. They should not be removed until we agree on when that | |
| # cycle ends. | |
| DeprecatedIn36 = CryptographyDeprecationWarning | |
| DeprecatedIn37 = CryptographyDeprecationWarning | |
| DeprecatedIn39 = CryptographyDeprecationWarning | |
| def _check_bytes(name: str, value: bytes) -> None: | |
| if not isinstance(value, bytes): | |
| raise TypeError("{} must be bytes".format(name)) | |
| def _check_byteslike(name: str, value: bytes) -> None: | |
| try: | |
| memoryview(value) | |
| except TypeError: | |
| raise TypeError("{} must be bytes-like".format(name)) | |
| def int_to_bytes(integer: int, length: typing.Optional[int] = None) -> bytes: | |
| return integer.to_bytes( | |
| length or (integer.bit_length() + 7) // 8 or 1, "big" | |
| ) | |
| class InterfaceNotImplemented(Exception): | |
| pass | |
| # DeprecatedIn39 -- Our only known consumer is aws-encryption-sdk, but we've | |
| # made this a no-op to avoid breaking old versions. | |
| def verify_interface( | |
| iface: abc.ABCMeta, klass: object, *, check_annotations: bool = False | |
| ): | |
| # Exists exclusively for `aws-encryption-sdk` which relies on it existing, | |
| # even though it was never a public API. | |
| pass | |
| class _DeprecatedValue: | |
| def __init__(self, value: object, message: str, warning_class): | |
| self.value = value | |
| self.message = message | |
| self.warning_class = warning_class | |
| class _ModuleWithDeprecations(types.ModuleType): | |
| def __init__(self, module: types.ModuleType): | |
| super().__init__(module.__name__) | |
| self.__dict__["_module"] = module | |
| def __getattr__(self, attr: str) -> object: | |
| obj = getattr(self._module, attr) | |
| if isinstance(obj, _DeprecatedValue): | |
| warnings.warn(obj.message, obj.warning_class, stacklevel=2) | |
| obj = obj.value | |
| return obj | |
| def __setattr__(self, attr: str, value: object) -> None: | |
| setattr(self._module, attr, value) | |
| def __delattr__(self, attr: str) -> None: | |
| obj = getattr(self._module, attr) | |
| if isinstance(obj, _DeprecatedValue): | |
| warnings.warn(obj.message, obj.warning_class, stacklevel=2) | |
| delattr(self._module, attr) | |
| def __dir__(self) -> typing.Sequence[str]: | |
| return ["_module"] + dir(self._module) | |
| def deprecated( | |
| value: object, | |
| module_name: str, | |
| message: str, | |
| warning_class: typing.Type[Warning], | |
| name: typing.Optional[str] = None, | |
| ) -> _DeprecatedValue: | |
| module = sys.modules[module_name] | |
| if not isinstance(module, _ModuleWithDeprecations): | |
| sys.modules[module_name] = module = _ModuleWithDeprecations(module) | |
| dv = _DeprecatedValue(value, message, warning_class) | |
| # Maintain backwards compatibility with `name is None` for pyOpenSSL. | |
| if name is not None: | |
| setattr(module, name, dv) | |
| return dv | |
| def cached_property(func: typing.Callable) -> property: | |
| cached_name = "_cached_{}".format(func) | |
| sentinel = object() | |
| def inner(instance: object): | |
| cache = getattr(instance, cached_name, sentinel) | |
| if cache is not sentinel: | |
| return cache | |
| result = func(instance) | |
| setattr(instance, cached_name, result) | |
| return result | |
| return property(inner) | |
| # Python 3.10 changed representation of enums. We use well-defined object | |
| # representation and string representation from Python 3.9. | |
| class Enum(enum.Enum): | |
| def __repr__(self) -> str: | |
| return f"<{self.__class__.__name__}.{self._name_}: {self._value_!r}>" | |
| def __str__(self) -> str: | |
| return f"{self.__class__.__name__}.{self._name_}" | |