__init__.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # SPDX-License-Identifier: MIT
  2. """
  3. Argon2 for Python
  4. """
  5. from . import exceptions, low_level, profiles
  6. from ._legacy import hash_password, hash_password_raw, verify_password
  7. from ._password_hasher import (
  8. DEFAULT_HASH_LENGTH,
  9. DEFAULT_MEMORY_COST,
  10. DEFAULT_PARALLELISM,
  11. DEFAULT_RANDOM_SALT_LENGTH,
  12. DEFAULT_TIME_COST,
  13. PasswordHasher,
  14. )
  15. from ._utils import Parameters, extract_parameters
  16. from .low_level import Type
  17. __title__ = "argon2-cffi"
  18. __author__ = "Hynek Schlawack"
  19. __copyright__ = "Copyright (c) 2015 " + __author__
  20. __license__ = "MIT"
  21. __all__ = [
  22. "DEFAULT_HASH_LENGTH",
  23. "DEFAULT_MEMORY_COST",
  24. "DEFAULT_PARALLELISM",
  25. "DEFAULT_RANDOM_SALT_LENGTH",
  26. "DEFAULT_TIME_COST",
  27. "Parameters",
  28. "PasswordHasher",
  29. "Type",
  30. "exceptions",
  31. "extract_parameters",
  32. "hash_password",
  33. "hash_password_raw",
  34. "low_level",
  35. "profiles",
  36. "verify_password",
  37. ]
  38. def __getattr__(name: str) -> str:
  39. dunder_to_metadata = {
  40. "__version__": "version",
  41. "__description__": "summary",
  42. "__uri__": "",
  43. "__url__": "",
  44. "__email__": "",
  45. }
  46. if name not in dunder_to_metadata:
  47. msg = f"module {__name__} has no attribute {name}"
  48. raise AttributeError(msg)
  49. import warnings
  50. from importlib.metadata import metadata
  51. warnings.warn(
  52. f"Accessing argon2.{name} is deprecated and will be "
  53. "removed in a future release. Use importlib.metadata directly "
  54. "to query for argon2-cffi's packaging metadata.",
  55. DeprecationWarning,
  56. stacklevel=2,
  57. )
  58. meta = metadata("argon2-cffi")
  59. if name in ("__uri__", "__url__"):
  60. return meta["Project-URL"].split(" ", 1)[-1]
  61. if name == "__email__":
  62. return meta["Author-email"].split("<", 1)[1].rstrip(">")
  63. return meta[dunder_to_metadata[name]]