clear-skies 2.0.8__tar.gz → 2.0.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of clear-skies might be problematic. Click here for more details.

Files changed (274) hide show
  1. {clear_skies-2.0.8 → clear_skies-2.0.10}/CHANGELOG.md +23 -0
  2. clear_skies-2.0.10/LATEST_CHANGELOG.md +7 -0
  3. {clear_skies-2.0.8 → clear_skies-2.0.10}/PKG-INFO +1 -1
  4. {clear_skies-2.0.8 → clear_skies-2.0.10}/pyproject.toml +1 -1
  5. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/__init__.py +8 -0
  6. clear_skies-2.0.10/src/clearskies/configs/email.py +10 -0
  7. clear_skies-2.0.10/src/clearskies/configs/email_list.py +17 -0
  8. clear_skies-2.0.10/src/clearskies/configs/email_list_or_callable.py +19 -0
  9. clear_skies-2.0.10/src/clearskies/configs/email_or_email_list_or_callable.py +59 -0
  10. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/string.py +2 -2
  11. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/string_list.py +15 -2
  12. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/string_list_or_callable.py +11 -0
  13. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/di.py +20 -6
  14. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/akeyless.py +4 -1
  15. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/secrets.py +2 -1
  16. {clear_skies-2.0.8 → clear_skies-2.0.10}/uv.lock +1 -1
  17. clear_skies-2.0.8/LATEST_CHANGELOG.md +0 -9
  18. {clear_skies-2.0.8 → clear_skies-2.0.10}/.editorconfig +0 -0
  19. {clear_skies-2.0.8 → clear_skies-2.0.10}/.github/workflows/create-version.yaml +0 -0
  20. {clear_skies-2.0.8 → clear_skies-2.0.10}/.github/workflows/docs.yaml +0 -0
  21. {clear_skies-2.0.8 → clear_skies-2.0.10}/.github/workflows/run-tests.yml +0 -0
  22. {clear_skies-2.0.8 → clear_skies-2.0.10}/.github/workflows/tests-matrix.yaml +0 -0
  23. {clear_skies-2.0.8 → clear_skies-2.0.10}/.github/workflows/tests.yaml +0 -0
  24. {clear_skies-2.0.8 → clear_skies-2.0.10}/.gitignore +0 -0
  25. {clear_skies-2.0.8 → clear_skies-2.0.10}/.pre-commit-config.yaml +0 -0
  26. {clear_skies-2.0.8 → clear_skies-2.0.10}/.python-version +0 -0
  27. {clear_skies-2.0.8 → clear_skies-2.0.10}/.vscode/extensions.json +0 -0
  28. {clear_skies-2.0.8 → clear_skies-2.0.10}/.vscode/settings.json +0 -0
  29. {clear_skies-2.0.8 → clear_skies-2.0.10}/LICENSE +0 -0
  30. {clear_skies-2.0.8 → clear_skies-2.0.10}/README.md +0 -0
  31. {clear_skies-2.0.8 → clear_skies-2.0.10}/build.sh +0 -0
  32. {clear_skies-2.0.8 → clear_skies-2.0.10}/cliff.toml +0 -0
  33. {clear_skies-2.0.8 → clear_skies-2.0.10}/ruff.toml +0 -0
  34. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/__init__.py +0 -0
  35. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/action.py +0 -0
  36. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/__init__.py +0 -0
  37. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/authentication.py +0 -0
  38. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/authorization.py +0 -0
  39. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/authorization_pass_through.py +0 -0
  40. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/jwks.py +0 -0
  41. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/public.py +0 -0
  42. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/authentication/secret_bearer.py +0 -0
  43. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/__init__.py +0 -0
  44. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/__init__.py +0 -0
  45. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  46. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  47. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  48. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  49. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  50. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  51. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  52. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  53. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  54. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  55. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  56. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  57. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/py.typed +0 -0
  58. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/__init__.py +0 -0
  59. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/header.py +0 -0
  60. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/json_body.py +0 -0
  61. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/parameter.py +0 -0
  62. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/request.py +0 -0
  63. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  64. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/request/url_path.py +0 -0
  65. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/response/__init__.py +0 -0
  66. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/response/response.py +0 -0
  67. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/__init__.py +0 -0
  68. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/array.py +0 -0
  69. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/base64.py +0 -0
  70. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/boolean.py +0 -0
  71. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/date.py +0 -0
  72. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/datetime.py +0 -0
  73. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/double.py +0 -0
  74. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/enum.py +0 -0
  75. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/integer.py +0 -0
  76. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/long.py +0 -0
  77. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/number.py +0 -0
  78. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/object.py +0 -0
  79. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/password.py +0 -0
  80. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/schema.py +0 -0
  81. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/autodoc/schema/string.py +0 -0
  82. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/__init__.py +0 -0
  83. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/api_backend.py +0 -0
  84. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/backend.py +0 -0
  85. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/cursor_backend.py +0 -0
  86. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/memory_backend.py +0 -0
  87. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/backends/secrets_backend.py +0 -0
  88. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/column.py +0 -0
  89. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/__init__.py +0 -0
  90. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/audit.py +0 -0
  91. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/belongs_to_id.py +0 -0
  92. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/belongs_to_model.py +0 -0
  93. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/belongs_to_self.py +0 -0
  94. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/boolean.py +0 -0
  95. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/category_tree.py +0 -0
  96. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/category_tree_ancestors.py +0 -0
  97. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/category_tree_children.py +0 -0
  98. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/category_tree_descendants.py +0 -0
  99. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created.py +0 -0
  100. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created_by_authorization_data.py +0 -0
  101. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created_by_header.py +0 -0
  102. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created_by_ip.py +0 -0
  103. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created_by_routing_data.py +0 -0
  104. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/created_by_user_agent.py +0 -0
  105. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/date.py +0 -0
  106. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/datetime.py +0 -0
  107. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/email.py +0 -0
  108. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/float.py +0 -0
  109. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/has_many.py +0 -0
  110. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/has_many_self.py +0 -0
  111. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/has_one.py +0 -0
  112. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/integer.py +0 -0
  113. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/json.py +0 -0
  114. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/many_to_many_ids.py +0 -0
  115. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/many_to_many_ids_with_data.py +0 -0
  116. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/many_to_many_models.py +0 -0
  117. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/many_to_many_pivots.py +0 -0
  118. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/phone.py +0 -0
  119. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/select.py +0 -0
  120. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/string.py +0 -0
  121. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/timestamp.py +0 -0
  122. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/updated.py +0 -0
  123. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/columns/uuid.py +0 -0
  124. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/README.md +0 -0
  125. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/actions.py +0 -0
  126. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/any.py +0 -0
  127. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/any_dict.py +0 -0
  128. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/any_dict_or_callable.py +0 -0
  129. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/authentication.py +0 -0
  130. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/authorization.py +0 -0
  131. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/boolean.py +0 -0
  132. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/boolean_or_callable.py +0 -0
  133. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/callable_config.py +0 -0
  134. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/columns.py +0 -0
  135. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/conditions.py +0 -0
  136. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/config.py +0 -0
  137. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/datetime.py +0 -0
  138. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/datetime_or_callable.py +0 -0
  139. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/endpoint.py +0 -0
  140. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/endpoint_list.py +0 -0
  141. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/float.py +0 -0
  142. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/float_or_callable.py +0 -0
  143. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/integer.py +0 -0
  144. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/integer_or_callable.py +0 -0
  145. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/joins.py +0 -0
  146. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/list_any_dict.py +0 -0
  147. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/list_any_dict_or_callable.py +0 -0
  148. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/model_class.py +0 -0
  149. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/model_column.py +0 -0
  150. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/model_columns.py +0 -0
  151. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/model_destination_name.py +0 -0
  152. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/model_to_id_column.py +0 -0
  153. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/readable_model_column.py +0 -0
  154. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/readable_model_columns.py +0 -0
  155. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/schema.py +0 -0
  156. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/searchable_model_columns.py +0 -0
  157. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/security_headers.py +0 -0
  158. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/select.py +0 -0
  159. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/select_list.py +0 -0
  160. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/string_dict.py +0 -0
  161. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/string_or_callable.py +0 -0
  162. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/timedelta.py +0 -0
  163. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/timezone.py +0 -0
  164. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/url.py +0 -0
  165. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/validators.py +0 -0
  166. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/writeable_model_column.py +0 -0
  167. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configs/writeable_model_columns.py +0 -0
  168. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/configurable.py +0 -0
  169. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/contexts/__init__.py +0 -0
  170. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/contexts/cli.py +0 -0
  171. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/contexts/context.py +0 -0
  172. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/contexts/wsgi.py +0 -0
  173. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/contexts/wsgi_ref.py +0 -0
  174. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/decorators.py +0 -0
  175. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/decorators.pyi +0 -0
  176. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/__init__.py +0 -0
  177. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/additional_config.py +0 -0
  178. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/additional_config_auto_import.py +0 -0
  179. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/__init__.py +0 -0
  180. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/by_class.py +0 -0
  181. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/by_name.py +0 -0
  182. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/di.py +0 -0
  183. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/environment.py +0 -0
  184. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/input_output.py +0 -0
  185. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/now.py +0 -0
  186. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/requests.py +0 -0
  187. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/secrets.py +0 -0
  188. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/utcnow.py +0 -0
  189. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/inject/uuid.py +0 -0
  190. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/injectable.py +0 -0
  191. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/injectable_properties.py +0 -0
  192. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/test_module/__init__.py +0 -0
  193. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  194. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/di/test_module/module_class.py +0 -0
  195. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/end.py +0 -0
  196. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoint.py +0 -0
  197. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoint_group.py +0 -0
  198. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/__init__.py +0 -0
  199. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/advanced_search.py +0 -0
  200. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/callable.py +0 -0
  201. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/create.py +0 -0
  202. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/delete.py +0 -0
  203. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/get.py +0 -0
  204. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/health_check.py +0 -0
  205. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/list.py +0 -0
  206. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/restful_api.py +0 -0
  207. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/schema.py +0 -0
  208. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/simple_search.py +0 -0
  209. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/endpoints/update.py +0 -0
  210. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/environment.py +0 -0
  211. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/__init__.py +0 -0
  212. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/authentication.py +0 -0
  213. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/authorization.py +0 -0
  214. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/client_error.py +0 -0
  215. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/input_errors.py +0 -0
  216. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/missing_dependency.py +0 -0
  217. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/moved_permanently.py +0 -0
  218. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/moved_temporarily.py +0 -0
  219. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/exceptions/not_found.py +0 -0
  220. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/functional/__init__.py +0 -0
  221. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/functional/routing.py +0 -0
  222. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/functional/string.py +0 -0
  223. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/functional/validations.py +0 -0
  224. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/__init__.py +0 -0
  225. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/cli.py +0 -0
  226. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  227. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  228. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  229. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/headers.py +0 -0
  230. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/input_output.py +0 -0
  231. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/programmatic.py +0 -0
  232. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/py.typed +0 -0
  233. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/input_outputs/wsgi.py +0 -0
  234. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/model.py +0 -0
  235. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/py.typed +0 -0
  236. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/query/__init__.py +0 -0
  237. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/query/condition.py +0 -0
  238. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/query/join.py +0 -0
  239. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/query/query.py +0 -0
  240. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/query/sort.py +0 -0
  241. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/schema.py +0 -0
  242. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/__init__.py +0 -0
  243. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  244. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  245. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  246. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  247. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  248. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_header.py +0 -0
  249. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/__init__.py +0 -0
  250. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/cache_control.py +0 -0
  251. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/cors.py +0 -0
  252. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/csp.py +0 -0
  253. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/hsts.py +0 -0
  254. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  255. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/security_headers/x_frame_options.py +0 -0
  256. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/test_base.py +0 -0
  257. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/typing.py +0 -0
  258. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validator.py +0 -0
  259. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/__init__.py +0 -0
  260. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/after_column.py +0 -0
  261. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/before_column.py +0 -0
  262. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_future.py +0 -0
  263. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_future_at_least.py +0 -0
  264. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_future_at_most.py +0 -0
  265. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_past.py +0 -0
  266. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_past_at_least.py +0 -0
  267. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/in_the_past_at_most.py +0 -0
  268. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/maximum_length.py +0 -0
  269. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/maximum_value.py +0 -0
  270. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/minimum_length.py +0 -0
  271. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/minimum_value.py +0 -0
  272. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/required.py +0 -0
  273. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/timedelta.py +0 -0
  274. {clear_skies-2.0.8 → clear_skies-2.0.10}/src/clearskies/validators/unique.py +0 -0
@@ -5,9 +5,30 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.0.10] - 2025-10-06
9
+
10
+ ### Changed
11
+ - Include injectable props for base secret class, and detection of… by @cmancone in [#22](https://github.com/clearskies-py/clearskies/pull/22)
12
+ - Black by @cmancone
13
+ - Include injectable props for base secret class, and detection of missing class by @cmancone
14
+
15
+ ## [2.0.9] - 2025-10-01
16
+
17
+ ### Added
18
+ - Add email configs by @tnijboer in [#21](https://github.com/clearskies-py/clearskies/pull/21)
19
+ - Add regex to string_list/string_list_callable and reuse them
20
+ - Add email configs
21
+
22
+ ### Changed
23
+ - Bump version to v2.0.9 by @github-actions[bot]
24
+
25
+ ### Removed
26
+ - Remove extra call, token is already in credentials json in [#20](https://github.com/clearskies-py/clearskies/pull/20)
27
+
8
28
  ## [2.0.8] - 2025-09-22
9
29
 
10
30
  ### Changed
31
+ - Bump version to v2.0.8 by @github-actions[bot]
11
32
  - Move typing import to IF TYPE_CHECKING by @cmancone in [#19](https://github.com/clearskies-py/clearskies/pull/19)
12
33
  - Move typing import to IF TYPE_CHECKING:
13
34
 
@@ -778,6 +799,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
778
799
  * @ made their first contribution
779
800
  * @tnijboer made their first contribution
780
801
  * @conormancone-cimpress made their first contribution
802
+ [2.0.10]: https://github.com/clearskies-py/clearskies/compare/v2.0.9..v2.0.10
803
+ [2.0.9]: https://github.com/clearskies-py/clearskies/compare/v2.0.8..v2.0.9
781
804
  [2.0.8]: https://github.com/clearskies-py/clearskies/compare/v2.0.7..v2.0.8
782
805
  [2.0.7]: https://github.com/clearskies-py/clearskies/compare/v2.0.6..v2.0.7
783
806
  [2.0.6]: https://github.com/clearskies-py/clearskies/compare/v2.0.5..v2.0.6
@@ -0,0 +1,7 @@
1
+ ## [2.0.10] - 2025-10-06
2
+
3
+ ### Changed
4
+ - Include injectable props for base secret class, and detection of… by @cmancone in [#22](https://github.com/clearskies-py/clearskies/pull/22)
5
+ - Black by @cmancone
6
+ - Include injectable props for base secret class, and detection of missing class by @cmancone
7
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clear-skies
3
- Version: 2.0.8
3
+ Version: 2.0.10
4
4
  Summary: A framework for building backends in the cloud
5
5
  Project-URL: Documentation, https://clearskies.io/
6
6
  Project-URL: Repository, https://github.com/clearskies-py/clearskies
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "clear-skies"
3
3
  description = "A framework for building backends in the cloud"
4
- version = "2.0.8"
4
+ version = "2.0.10"
5
5
  license = "MIT"
6
6
  readme = "./README.md"
7
7
  authors = [{name = "Conor Mancone", email = "cmancone@gmail.com"}]
@@ -79,6 +79,10 @@ from .conditions import Conditions
79
79
  from .config import Config
80
80
  from .datetime import Datetime
81
81
  from .datetime_or_callable import DatetimeOrCallable
82
+ from .email import Email
83
+ from .email_list import EmailList
84
+ from .email_list_or_callable import EmailListOrCallable
85
+ from .email_or_email_list_or_callable import EmailOrEmailListOrCallable
82
86
  from .endpoint import Endpoint
83
87
  from .endpoint_list import EndpointList
84
88
  from .float import Float
@@ -127,6 +131,10 @@ __all__ = [
127
131
  "Config",
128
132
  "Datetime",
129
133
  "DatetimeOrCallable",
134
+ "Email",
135
+ "EmailList",
136
+ "EmailListOrCallable",
137
+ "EmailOrEmailListOrCallable",
130
138
  "Endpoint",
131
139
  "EndpointList",
132
140
  "Float",
@@ -0,0 +1,10 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies.configs import string
4
+
5
+
6
+ class Email(string.String):
7
+ def __init__(
8
+ self, required=False, default=None, regexp: str = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
9
+ ):
10
+ super().__init__(required=required, default=default, regexp=regexp)
@@ -0,0 +1,17 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies.configs import string_list
4
+
5
+
6
+ class EmailList(string_list.StringList):
7
+ """
8
+ This is for a configuration that should be a list of strings in email format.
9
+
10
+ This is different than StringList, which also accepts a list of strings, but
11
+ validates that all of those values match the required format.
12
+ """
13
+
14
+ def __init__(
15
+ self, required=False, default=None, regexp: str = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
16
+ ):
17
+ super().__init__(required=required, default=default, regexp=regexp)
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Callable
4
+
5
+ from clearskies.configs import string_list_or_callable
6
+
7
+
8
+ class EmailListOrCallable(string_list_or_callable.StringListOrCallable):
9
+ """
10
+ This is for a configuration that should be a list of emails or a callable that returns a list of emails.
11
+
12
+ This is different than StringList, which also accepts a list of strings, but
13
+ validates that all of those values match the email format.
14
+ """
15
+
16
+ def __init__(
17
+ self, required=False, default=None, regexp: str = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
18
+ ):
19
+ super().__init__(required=required, default=default, regexp=regexp)
@@ -0,0 +1,59 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Callable
4
+
5
+ from clearskies.configs import config
6
+
7
+
8
+ class EmailOrEmailListOrCallable(config.Config):
9
+ """
10
+ This is for a configuration that should be an email or a list of emails or a callable that returns a list of emails.
11
+
12
+ This is a combination of Email and EmailListOrCallable.
13
+ """
14
+
15
+ def __init__(
16
+ self, required=False, default=None, regexp: str = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
17
+ ):
18
+ self.required = required
19
+ self.default = default
20
+ self.regexp = regexp
21
+
22
+ def __set__(self, instance, value: str | list[str] | Callable[..., list[str]]):
23
+ if value is None:
24
+ return
25
+ if self.regexp:
26
+ import re
27
+ if isinstance(value, str):
28
+ if self.regexp and not re.match(self.regexp, value):
29
+ error_prefix = self._error_prefix(instance)
30
+ raise ValueError(
31
+ f"{error_prefix} attempt to set a value of '{value}' but this does not match the required regexp: '{self.regexp}'."
32
+ )
33
+ value = [value]
34
+ elif not isinstance(value, list) and not callable(value):
35
+ error_prefix = self._error_prefix(instance)
36
+ raise TypeError(
37
+ f"{error_prefix} attempt to set a value of type '{value.__class__.__name__}' to a parameter that should be a list or a callable"
38
+ )
39
+ if isinstance(value, list):
40
+ if self.regexp:
41
+ import re
42
+
43
+ for index, item in enumerate(value):
44
+ if not isinstance(item, str):
45
+ error_prefix = self._error_prefix(instance)
46
+ raise TypeError(
47
+ f"{error_prefix} attempt to set a value of type '{item.__class__.__name__}' for item #{index + 1}. A string was expected."
48
+ )
49
+ if not re.match(self.regexp, item):
50
+ error_prefix = self._error_prefix(instance)
51
+ raise ValueError(
52
+ f"{error_prefix} attempt to set a value of '{item}' for item #{index + 1} but this does not match the required regexp: '{self.regexp}'."
53
+ )
54
+ instance._set_config(self, value)
55
+
56
+ def __get__(self, instance, parent) -> list[str] | Callable[..., list[str]]:
57
+ if not instance:
58
+ return self # type: ignore
59
+ return instance._get_config(self)
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
4
+
3
5
  from clearskies.configs import config
4
6
 
5
7
 
@@ -16,8 +18,6 @@ class String(config.Config):
16
18
  f"{error_prefix} attempt to set a value of type '{value.__class__.__name__}' to a parameter that requires a string."
17
19
  )
18
20
  if self.regexp:
19
- import re
20
-
21
21
  if not re.match(self.regexp, value):
22
22
  error_prefix = self._error_prefix(instance)
23
23
  raise ValueError(
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
4
+
3
5
  from clearskies.configs import config
4
6
 
5
7
 
@@ -11,6 +13,11 @@ class StringList(config.Config):
11
13
  valdiates that all of those values match against an allow list.
12
14
  """
13
15
 
16
+ def __init__(self, required=False, default=None, regexp: str = ""):
17
+ self.required = required
18
+ self.default = default
19
+ self.regexp = regexp
20
+
14
21
  def __set__(self, instance, value: list[str]):
15
22
  if value is None:
16
23
  return
@@ -18,13 +25,19 @@ class StringList(config.Config):
18
25
  if not isinstance(value, list):
19
26
  error_prefix = self._error_prefix(instance)
20
27
  raise TypeError(
21
- f"{error_prefix} attempt to set a value of type '{value.__class__.__name__}' to a list parameter"
28
+ f"{error_prefix} attempt to set a value of type '{value.__class__.__name__}' to a list of strings parameter."
22
29
  )
30
+
23
31
  for index, item in enumerate(value):
24
32
  if not isinstance(item, str):
25
33
  error_prefix = self._error_prefix(instance)
26
34
  raise TypeError(
27
- f"{error_prefix} attempt to set a value of type '{item.__class__.__name__}' for item #{index + 1}. A string was expected."
35
+ f"{error_prefix} attempt to set a value of type '{item.__class__.__name__}' for item #{index + 1}. A string was expected."
36
+ )
37
+ if self.regexp and not re.match(self.regexp, item):
38
+ error_prefix = self._error_prefix(instance)
39
+ raise ValueError(
40
+ f"{error_prefix} attempt to set a value of '{item}' for item #{index + 1} but this does not match the required regexp: '{self.regexp}'."
28
41
  )
29
42
  instance._set_config(self, value)
30
43
 
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from typing import Callable
4
5
 
5
6
  from clearskies.configs import config
@@ -13,6 +14,11 @@ class StringListOrCallable(config.Config):
13
14
  valdiates that all of those values match against an allow list.
14
15
  """
15
16
 
17
+ def __init__(self, required=False, default=None, regexp: str = ""):
18
+ self.required = required
19
+ self.default = default
20
+ self.regexp = regexp
21
+
16
22
  def __set__(self, instance, value: list[str] | Callable[..., list[str]]):
17
23
  if value is None:
18
24
  return
@@ -29,6 +35,11 @@ class StringListOrCallable(config.Config):
29
35
  raise TypeError(
30
36
  f"{error_prefix} attempt to set a value of type '{item.__class__.__name__}' for item #{index + 1}. A string was expected."
31
37
  )
38
+ if self.regexp and not re.match(self.regexp, item):
39
+ error_prefix = self._error_prefix(instance)
40
+ raise ValueError(
41
+ f"{error_prefix} attempt to set a value of '{item}' for item #{index + 1} but this does not match the required regexp: '{self.regexp}'."
42
+ )
32
43
  instance._set_config(self, value)
33
44
 
34
45
  def __get__(self, instance, parent) -> list[str] | Callable[..., list[str]]:
@@ -535,8 +535,7 @@ class Di:
535
535
  override = self._class_overrides_by_class[object_to_override.__class__]
536
536
  if inspect.isclass(override):
537
537
  return self.build_class(override)
538
- if hasattr(override, "injectable_properties"):
539
- override.injectable_properties(self)
538
+ self.inject_properties(override.__class__)
540
539
  return override
541
540
 
542
541
  def add_override(self, name: str, replacement_class: type) -> None:
@@ -670,8 +669,7 @@ class Di:
670
669
  # ignore the first argument because that is just `self`
671
670
  build_arguments = init_args.args[1:]
672
671
  if not build_arguments:
673
- if hasattr(class_to_build, "injectable_properties"):
674
- class_to_build.injectable_properties(self)
672
+ self.inject_properties(class_to_build)
675
673
  built_value = class_to_build()
676
674
  if cache:
677
675
  self._prepared[class_to_build] = built_value # type: ignore
@@ -703,9 +701,8 @@ class Di:
703
701
 
704
702
  del self._building[class_id]
705
703
 
704
+ self.inject_properties(class_to_build)
706
705
  built_value = class_to_build(*args)
707
- if hasattr(built_value, "injectable_properties"):
708
- built_value.injectable_properties(self)
709
706
  if cache:
710
707
  self._prepared[class_to_build] = built_value # type: ignore
711
708
  return built_value
@@ -844,6 +841,23 @@ class Di:
844
841
  return False
845
842
  return True
846
843
 
844
+ def inject_properties(self, cls):
845
+ if hasattr(cls, "injectable_properties"):
846
+ cls.injectable_properties(self)
847
+ return
848
+
849
+ if not hasattr(cls, "__injectable_properties_sanity_check"):
850
+ return
851
+
852
+ for attribute_name in dir(cls):
853
+ attribute = getattr(cls, attribute_name)
854
+ if hasattr(attribute, "initiated_guard") and hasattr(attribute, "set_di"):
855
+ raise ValueError(
856
+ f"Class '{cls.__name__}' has an injectable property attached, but does not include clearskies.di.injectable_properties.InjectableProperties in it's parent classes. You must include this as a parent class."
857
+ )
858
+ cls.__injectable_properties_sanity_check = True
859
+ return
860
+
847
861
  def provide_di(self):
848
862
  return self
849
863
 
@@ -138,6 +138,7 @@ class Akeyless(secrets.Secrets):
138
138
  return res.token
139
139
 
140
140
  def auth_saml(self):
141
+ import json
141
142
  import os
142
143
  from pathlib import Path
143
144
 
@@ -145,7 +146,9 @@ class Akeyless(secrets.Secrets):
145
146
  home = str(Path.home())
146
147
  with open(f"{home}/.akeyless/.tmp_creds/{self.profile}-{self.access_id}", "r") as creds_file:
147
148
  credentials = creds_file.read()
148
-
149
+ credentials_json = json.loads(credentials)
150
+ if "token" in credentials_json:
151
+ return credentials_json["token"]
149
152
  # and now we can turn that into a token
150
153
  response = self.requests.post(
151
154
  "https://rest.akeyless.io/",
@@ -4,9 +4,10 @@ from abc import ABC
4
4
  from typing import Any
5
5
 
6
6
  import clearskies.configurable
7
+ from clearskies.di.injectable_properties import InjectableProperties
7
8
 
8
9
 
9
- class Secrets(ABC, clearskies.configurable.Configurable):
10
+ class Secrets(ABC, clearskies.configurable.Configurable, InjectableProperties):
10
11
  def create(self, path: str, value: str) -> bool:
11
12
  raise NotImplementedError(
12
13
  "It looks like you tried to use the secret system in clearskies, but didn't specify a secret manager."
@@ -202,7 +202,7 @@ wheels = [
202
202
 
203
203
  [[package]]
204
204
  name = "clear-skies"
205
- version = "2.0.8"
205
+ version = "2.0.10"
206
206
  source = { editable = "." }
207
207
  dependencies = [
208
208
  { name = "dateparser" },
@@ -1,9 +0,0 @@
1
- ## [2.0.8] - 2025-09-22
2
-
3
- ### Changed
4
- - Move typing import to IF TYPE_CHECKING by @cmancone in [#19](https://github.com/clearskies-py/clearskies/pull/19)
5
- - Move typing import to IF TYPE_CHECKING:
6
-
7
- ### Fixed
8
- - Importing reorder
9
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes