clear-skies 2.0.0__tar.gz → 2.0.1__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 (250) hide show
  1. {clear_skies-2.0.0 → clear_skies-2.0.1}/PKG-INFO +2 -2
  2. {clear_skies-2.0.0 → clear_skies-2.0.1}/pyproject.toml +5 -3
  3. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/authentication.py +4 -0
  4. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/authorization.py +4 -0
  5. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/jwks.py +6 -1
  6. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/secret_bearer.py +1 -1
  7. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/backend.py +13 -0
  8. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/column.py +3 -6
  9. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/__init__.py +3 -0
  10. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/config.py +4 -1
  11. clear_skies-2.0.1/src/clearskies/configs/endpoint_list.py +28 -0
  12. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/contexts/cli.py +4 -0
  13. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/contexts/context.py +13 -0
  14. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/contexts/wsgi.py +4 -0
  15. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/contexts/wsgi_ref.py +4 -0
  16. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/di.py +2 -2
  17. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoint.py +5 -4
  18. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoint_group.py +13 -0
  19. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/callable.py +4 -3
  20. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/model.py +526 -30
  21. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/query/query.py +4 -4
  22. clear_skies-2.0.1/src/clearskies/security_header.py +15 -0
  23. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validator.py +12 -0
  24. clear_skies-2.0.0/src/clearskies/security_header.py +0 -8
  25. {clear_skies-2.0.0 → clear_skies-2.0.1}/LICENSE +0 -0
  26. {clear_skies-2.0.0 → clear_skies-2.0.1}/README.md +0 -0
  27. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/__init__.py +0 -0
  28. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/action.py +0 -0
  29. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/__init__.py +0 -0
  30. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/authorization_pass_through.py +0 -0
  31. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/authentication/public.py +0 -0
  32. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/__init__.py +0 -0
  33. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/__init__.py +0 -0
  34. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  35. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  36. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  37. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  38. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  39. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  40. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  41. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  42. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  43. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  44. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  45. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  46. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/py.typed +0 -0
  47. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/__init__.py +0 -0
  48. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/header.py +0 -0
  49. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/json_body.py +0 -0
  50. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/parameter.py +0 -0
  51. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/request.py +0 -0
  52. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  53. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/request/url_path.py +0 -0
  54. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/response/__init__.py +0 -0
  55. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/response/response.py +0 -0
  56. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/__init__.py +0 -0
  57. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/array.py +0 -0
  58. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/base64.py +0 -0
  59. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/boolean.py +0 -0
  60. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/date.py +0 -0
  61. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/datetime.py +0 -0
  62. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/double.py +0 -0
  63. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/enum.py +0 -0
  64. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/integer.py +0 -0
  65. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/long.py +0 -0
  66. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/number.py +0 -0
  67. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/object.py +0 -0
  68. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/password.py +0 -0
  69. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/schema.py +0 -0
  70. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/autodoc/schema/string.py +0 -0
  71. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/__init__.py +0 -0
  72. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/api_backend.py +0 -0
  73. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/cursor_backend.py +0 -0
  74. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/memory_backend.py +0 -0
  75. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/backends/secrets_backend.py +0 -0
  76. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/__init__.py +0 -0
  77. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/audit.py +0 -0
  78. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/belongs_to_id.py +0 -0
  79. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/belongs_to_model.py +0 -0
  80. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/belongs_to_self.py +0 -0
  81. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/boolean.py +0 -0
  82. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/category_tree.py +0 -0
  83. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/category_tree_ancestors.py +0 -0
  84. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/category_tree_children.py +0 -0
  85. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/category_tree_descendants.py +0 -0
  86. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created.py +0 -0
  87. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created_by_authorization_data.py +0 -0
  88. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created_by_header.py +0 -0
  89. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created_by_ip.py +0 -0
  90. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created_by_routing_data.py +0 -0
  91. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/created_by_user_agent.py +0 -0
  92. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/date.py +0 -0
  93. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/datetime.py +0 -0
  94. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/email.py +0 -0
  95. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/float.py +0 -0
  96. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/has_many.py +0 -0
  97. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/has_many_self.py +0 -0
  98. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/has_one.py +0 -0
  99. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/integer.py +0 -0
  100. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/json.py +0 -0
  101. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/many_to_many_ids.py +0 -0
  102. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/many_to_many_ids_with_data.py +0 -0
  103. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/many_to_many_models.py +0 -0
  104. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/many_to_many_pivots.py +0 -0
  105. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/phone.py +0 -0
  106. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/select.py +0 -0
  107. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/string.py +0 -0
  108. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/timestamp.py +0 -0
  109. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/updated.py +0 -0
  110. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/columns/uuid.py +0 -0
  111. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/README.md +0 -0
  112. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/actions.py +0 -0
  113. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/any.py +0 -0
  114. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/any_dict.py +0 -0
  115. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/any_dict_or_callable.py +0 -0
  116. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/authentication.py +0 -0
  117. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/authorization.py +0 -0
  118. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/boolean.py +0 -0
  119. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/boolean_or_callable.py +0 -0
  120. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/callable_config.py +0 -0
  121. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/columns.py +0 -0
  122. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/conditions.py +0 -0
  123. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/datetime.py +0 -0
  124. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/datetime_or_callable.py +0 -0
  125. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/endpoint.py +0 -0
  126. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/float.py +0 -0
  127. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/float_or_callable.py +0 -0
  128. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/integer.py +0 -0
  129. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/integer_or_callable.py +0 -0
  130. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/joins.py +0 -0
  131. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/list_any_dict.py +0 -0
  132. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/list_any_dict_or_callable.py +0 -0
  133. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/model_class.py +0 -0
  134. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/model_column.py +0 -0
  135. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/model_columns.py +0 -0
  136. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/model_destination_name.py +0 -0
  137. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/model_to_id_column.py +0 -0
  138. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/readable_model_column.py +0 -0
  139. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/readable_model_columns.py +0 -0
  140. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/schema.py +0 -0
  141. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/searchable_model_columns.py +0 -0
  142. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/security_headers.py +0 -0
  143. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/select.py +0 -0
  144. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/select_list.py +0 -0
  145. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/string.py +0 -0
  146. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/string_dict.py +0 -0
  147. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/string_list.py +0 -0
  148. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/string_list_or_callable.py +0 -0
  149. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/string_or_callable.py +0 -0
  150. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/timedelta.py +0 -0
  151. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/timezone.py +0 -0
  152. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/url.py +0 -0
  153. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/validators.py +0 -0
  154. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/writeable_model_column.py +0 -0
  155. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configs/writeable_model_columns.py +0 -0
  156. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/configurable.py +0 -0
  157. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/contexts/__init__.py +0 -0
  158. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/__init__.py +0 -0
  159. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/additional_config.py +0 -0
  160. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/additional_config_auto_import.py +0 -0
  161. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/__init__.py +0 -0
  162. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/by_class.py +0 -0
  163. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/by_name.py +0 -0
  164. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/di.py +0 -0
  165. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/environment.py +0 -0
  166. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/input_output.py +0 -0
  167. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/now.py +0 -0
  168. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/requests.py +0 -0
  169. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/secrets.py +0 -0
  170. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/utcnow.py +0 -0
  171. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/inject/uuid.py +0 -0
  172. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/injectable.py +0 -0
  173. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/injectable_properties.py +0 -0
  174. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/test_module/__init__.py +0 -0
  175. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  176. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/di/test_module/module_class.py +0 -0
  177. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/end.py +0 -0
  178. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/__init__.py +0 -0
  179. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/advanced_search.py +0 -0
  180. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/create.py +0 -0
  181. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/delete.py +0 -0
  182. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/get.py +0 -0
  183. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/health_check.py +0 -0
  184. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/list.py +0 -0
  185. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/restful_api.py +0 -0
  186. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/simple_search.py +0 -0
  187. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/endpoints/update.py +0 -0
  188. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/environment.py +0 -0
  189. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/__init__.py +0 -0
  190. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/authentication.py +0 -0
  191. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/authorization.py +0 -0
  192. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/client_error.py +0 -0
  193. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/input_errors.py +0 -0
  194. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/moved_permanently.py +0 -0
  195. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/moved_temporarily.py +0 -0
  196. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/exceptions/not_found.py +0 -0
  197. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/functional/__init__.py +0 -0
  198. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/functional/routing.py +0 -0
  199. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/functional/string.py +0 -0
  200. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/functional/validations.py +0 -0
  201. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/__init__.py +0 -0
  202. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/cli.py +0 -0
  203. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  204. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  205. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  206. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/headers.py +0 -0
  207. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/input_output.py +0 -0
  208. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/programmatic.py +0 -0
  209. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/py.typed +0 -0
  210. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/input_outputs/wsgi.py +0 -0
  211. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/parameters_to_properties.py +0 -0
  212. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/py.typed +0 -0
  213. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/query/__init__.py +0 -0
  214. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/query/condition.py +0 -0
  215. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/query/join.py +0 -0
  216. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/query/sort.py +0 -0
  217. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/schema.py +0 -0
  218. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/__init__.py +0 -0
  219. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  220. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  221. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  222. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/akeyless.py +0 -0
  223. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  224. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  225. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/secrets/secrets.py +0 -0
  226. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/__init__.py +0 -0
  227. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/cache_control.py +0 -0
  228. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/cors.py +0 -0
  229. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/csp.py +0 -0
  230. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/hsts.py +0 -0
  231. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  232. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/security_headers/x_frame_options.py +0 -0
  233. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/test_base.py +0 -0
  234. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/typing.py +0 -0
  235. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/__init__.py +0 -0
  236. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/after_column.py +0 -0
  237. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/before_column.py +0 -0
  238. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_future.py +0 -0
  239. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_future_at_least.py +0 -0
  240. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_future_at_most.py +0 -0
  241. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_past.py +0 -0
  242. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_past_at_least.py +0 -0
  243. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/in_the_past_at_most.py +0 -0
  244. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/maximum_length.py +0 -0
  245. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/maximum_value.py +0 -0
  246. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/minimum_length.py +0 -0
  247. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/minimum_value.py +0 -0
  248. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/required.py +0 -0
  249. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/timedelta.py +0 -0
  250. {clear_skies-2.0.0 → clear_skies-2.0.1}/src/clearskies/validators/unique.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: clear-skies
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: A framework for building backends in the cloud
5
5
  License: MIT
6
6
  Author: Conor Mancone
@@ -25,7 +25,7 @@ Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "mysql"
25
25
  Requires-Dist: requests (>=2.31.0,<3.0.0)
26
26
  Requires-Dist: typing-extensions (>=4.12.0,<5.0.0) ; python_version == "3.10"
27
27
  Requires-Dist: wrapt (>=1.16.0,<2.0.0)
28
- Project-URL: Repository, https://github.com/cmancone/clearskies
28
+ Project-URL: Repository, https://github.com/clearskies-py/clearskies
29
29
  Description-Content-Type: text/markdown
30
30
 
31
31
  # clearskies
@@ -10,7 +10,7 @@ requires-python = '>=3.11,<4.0'
10
10
  dependencies = ['dateparser (>=1.1.8,<2.0.0)', 'requests (>=2.31.0,<3.0.0)', 'typing-extensions (>=4.12.0,<5.0.0) ; python_version >= "3.10" and python_version < "3.11"', 'wrapt (>=1.16.0,<2.0.0)']
11
11
 
12
12
  [project.urls]
13
- repository = "https://github.com/cmancone/clearskies"
13
+ repository = "https://github.com/clearskies-py/clearskies"
14
14
 
15
15
  [project.optional-dependencies]
16
16
  secrets = ['akeyless (>=4.0.0,<5.0.0)', 'akeyless-cloud-id (>=0.2.3,<0.3.0)']
@@ -24,7 +24,8 @@ packages = [
24
24
  exclude = [
25
25
  "src/clearskies/*_test.py",
26
26
  "src/clearskies/**/*_test.py",
27
- "src/clearskies/integration_tests/*"
27
+ "src/clearskies/integration_tests/*",
28
+ "docs/**"
28
29
  ]
29
30
  classifiers = [
30
31
  "Development Status :: 5 - Production/Stable",
@@ -68,7 +69,8 @@ preview = true
68
69
  python_version = "3.11"
69
70
 
70
71
  exclude = [
71
- ".*_test\\.py$"
72
+ ".*_test\\.py$",
73
+ "docs/.*"
72
74
  ]
73
75
 
74
76
  [tool.poetry-git-version-plugin]
@@ -12,6 +12,10 @@ if TYPE_CHECKING:
12
12
 
13
13
 
14
14
  class Authentication(clearskies.configurable.Configurable, requests.auth.AuthBase):
15
+ """
16
+ Authentication!
17
+ """
18
+
15
19
  is_public = True
16
20
  can_authorize = False
17
21
  has_dynamic_credentials = False
@@ -1,4 +1,8 @@
1
1
  class Authorization:
2
+ """
3
+ Authorization!
4
+ """
5
+
2
6
  def gate(self, authorization_data, input_output):
3
7
  """
4
8
  Return True/False to denote if the given user, as represented by the authorization data, should be allowed access.
@@ -10,8 +10,13 @@ from clearskies.security_headers.cors import Cors
10
10
 
11
11
 
12
12
  class Jwks(Authentication, clearskies.di.InjectableProperties):
13
- """The URL where the JWKS can be found."""
13
+ """
14
+ Validate a JWT against a JWKS (JSON Web Key Set)
15
+ """
14
16
 
17
+ """
18
+ The URL of the JWKS
19
+ """
15
20
  jwks_url = clearskies.configs.String(required=True)
16
21
 
17
22
  """
@@ -495,7 +495,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
495
495
  if not self._alternate_secret:
496
496
  self._alternate_secret = (
497
497
  self.secrets.get(self.alternate_secret_key)
498
- if self.secret_key
498
+ if self.alternate_secret_key
499
499
  else self.environment.get(self.alternate_environment_key)
500
500
  )
501
501
  return self._alternate_secret
@@ -9,6 +9,19 @@ from clearskies.autodoc.schema import Schema as AutoDocSchema
9
9
 
10
10
 
11
11
  class Backend(ABC):
12
+ """
13
+ Conecting models to their data since 2020!
14
+
15
+ The backend system acts as a flexible layer between models and their data sources. By changing the backend attached to a model,
16
+ you change where the model fetches and saves data. This might be a database, an in-memory data store, a dynamodb table,
17
+ an API, and more. This allows you to interact with a variety of data sources with the models acting as a standardized API.
18
+ Since endpoints also rely on the models for their functionality, this means that you can easily build API endpoints and
19
+ more for a variety of data sources with a minimal amount of code.
20
+
21
+ Of course, not all data sources support all functionality present in the model. Therefore, you do still need to have
22
+ a fair understanding of how your data sources work.
23
+ """
24
+
12
25
  supports_n_plus_one = False
13
26
  can_count = True
14
27
 
@@ -24,13 +24,10 @@ if TYPE_CHECKING:
24
24
 
25
25
  class Column(clearskies.configurable.Configurable, clearskies.di.InjectableProperties):
26
26
  """
27
- The base column.
27
+ Columns are used to build schemes and enable a variety of levels of automation with clearskies.
28
28
 
29
- This class (well, the children that extend it) are used to define the columns that exist in a given model class -
30
- they help you build your schema. The column definitions are then used by handlers and other aspects of the
31
- clearskies framework to automate things like input validation, front-end/backend-transformations, and more.
32
- Many column classes have their own configuration settings, but there are also some common configuration settings
33
- defined here.
29
+ Columns are used to define your schemas in clearskies, especially via models. The column definitions are then used by endpoints
30
+ and other aspects of the clearskies framework to automate things like input validation, front-end/backend-transformations, and more.
34
31
  """
35
32
 
36
33
  """
@@ -80,6 +80,7 @@ from .config import Config
80
80
  from .datetime import Datetime
81
81
  from .datetime_or_callable import DatetimeOrCallable
82
82
  from .endpoint import Endpoint
83
+ from .endpoint_list import EndpointList
83
84
  from .float import Float
84
85
  from .float_or_callable import FloatOrCallable
85
86
  from .integer import Integer
@@ -126,6 +127,8 @@ __all__ = [
126
127
  "Config",
127
128
  "Datetime",
128
129
  "DatetimeOrCallable",
130
+ "Endpoint",
131
+ "EndpointList",
129
132
  "Float",
130
133
  "FloatOrCallable",
131
134
  "Joins",
@@ -1,5 +1,8 @@
1
+ from typing import Any
2
+
3
+
1
4
  class Config:
2
- def __init__(self, required=False, default=None):
5
+ def __init__(self, required: bool = False, default: Any = None):
3
6
  self.required = required
4
7
  self.default = default
5
8
 
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from clearskies.configs import config
6
+
7
+ if TYPE_CHECKING:
8
+ from clearskies.endpoint import Endpoint as EndpointBase
9
+
10
+
11
+ class EndpointList(config.Config):
12
+ def __set__(self, instance, value: list[EndpointBase]):
13
+ if not isinstance(value, list):
14
+ raise TypeError(
15
+ f"{error_prefix} attempt to set a value of type '{value.__class__.__name__}' to a parameter that requries a list of endpoints."
16
+ )
17
+ for index, item in enumerate(value):
18
+ if not hasattr(item, "top_level_authentication_and_authorization"):
19
+ error_prefix = self._error_prefix(instance)
20
+ raise TypeError(
21
+ f"{error_prefix} attempt to set a value of type '{item.__class__.__name__}' for item #{index+1} when all items in the list should be instances of clearskies.End."
22
+ )
23
+ instance._set_config(self, value)
24
+
25
+ def __get__(self, instance, parent) -> list[EndpointBase]:
26
+ if not instance:
27
+ return self # type: ignore
28
+ return instance._get_config(self)
@@ -3,5 +3,9 @@ from clearskies.input_outputs import Cli as CliInputOutput
3
3
 
4
4
 
5
5
  class Cli(Context):
6
+ """
7
+ Run an application via a CLI command
8
+ """
9
+
6
10
  def __call__(self): # type: ignore
7
11
  return self.execute_application(CliInputOutput())
@@ -15,8 +15,21 @@ if TYPE_CHECKING:
15
15
 
16
16
 
17
17
  class Context:
18
+ """
19
+ Context: a flexible way to connect applications to hosting strategies.
20
+ """
21
+
18
22
  di: Di = None # type: ignore
19
23
 
24
+ """
25
+ The application to execute.
26
+
27
+ This can be a callable, an endpoint, or an endpoint group. If passed a callable, the callable can request any
28
+ standard or defined dependencies and should return the desired response. It can also raise any exception from
29
+ clearskies.exceptions.
30
+ """
31
+ application: Callable | clearskies.endpoint.Endpoint | clearskies.endpoint_group.EndpointGroup = None # type: ignore
32
+
20
33
  def __init__(
21
34
  self,
22
35
  application: Callable | clearskies.endpoint.Endpoint | clearskies.endpoint_group.EndpointGroup,
@@ -12,5 +12,9 @@ from clearskies.input_outputs import Wsgi as WsgiInputOutput
12
12
 
13
13
 
14
14
  class Wsgi(Context):
15
+ """
16
+ Connect your application to a WSGI server.
17
+ """
18
+
15
19
  def __call__(self, env, start_response): # type: ignore
16
20
  return self.execute_application(WsgiInputOutput(env, start_response))
@@ -12,6 +12,10 @@ from clearskies.input_outputs import Wsgi as WsgiInputOutput
12
12
 
13
13
 
14
14
  class WsgiRef(Context):
15
+ """
16
+ Use a built in WSGI server (for development purposes only).
17
+ """
18
+
15
19
  port: int = 8080
16
20
 
17
21
  def __init__(
@@ -23,7 +23,7 @@ class Di:
23
23
  Build a dependency injection object.
24
24
 
25
25
  The dependency injection (DI) container is a key part of clearskies, so understanding how to both configure
26
- them and get dependencies for your classes is important. Note however that there you don't often have
26
+ them and get dependencies for your classes is important. Note however that you don't often have
27
27
  to interact with the dependency injection container directly. All of the configuration options for
28
28
  the DI container are also available to all the contexts, which is typically how you will build clearskies
29
29
  applications. So, while you can create a DI container and use it directly, typically you'll just follow
@@ -648,7 +648,7 @@ class Di:
648
648
  its name and type-hint.
649
649
  """
650
650
  built_value = self.build_class_from_type_hint(argument_name, type_hint, context=context, cache=True)
651
- if built_value:
651
+ if built_value is not None:
652
652
  return built_value
653
653
  return self.build_from_name(argument_name, context=context, cache=True)
654
654
 
@@ -32,15 +32,16 @@ class Endpoint(
32
32
  clearskies.di.InjectableProperties,
33
33
  ):
34
34
  """
35
- Endpoints - the clearskies workhorse.
35
+ Automating drudgery!
36
36
 
37
37
  With clearskies, endpoints exist to offload some drudgery and make your life easier, but they can also
38
38
  get out of your way when you don't need them. Think of them as pre-built endpoints that can execute
39
39
  common functionality needed for web applications/APIs. Instead of defining a function that fetches
40
40
  records from your backend and returns them to the end user, you can let the list endpoint do this for you
41
41
  with a minimal amount of configuration. Instead of making an endpoint that creates records, just deploy
42
- a create endpoint. Each endpoint has their own configuration settings, but there are some configuration
43
- settings that are common to all endpoints, which are listed below:
42
+ a create endpoint. While this gives clearskies some helpful capabiltiies for automation, it also has
43
+ the Callable endpoint which simply calls a developer-defined function, and therefore allows clearskies to
44
+ act like a much more typical framework.
44
45
  """
45
46
 
46
47
  """
@@ -342,7 +343,7 @@ class Endpoint(
342
343
  """
343
344
  The model class used by this endpoint.
344
345
 
345
- The majority of endpoints require a model class that tells the endpoint where to get/save its data.
346
+ The endpoint will use this to fetch/save/validate incoming data as needed.
346
347
  """
347
348
  model_class = clearskies.configs.ModelClass(default=None)
348
349
 
@@ -217,11 +217,24 @@ class EndpointGroup(
217
217
  The dependency injection container
218
218
  """
219
219
  di = clearskies.di.inject.Di()
220
+
221
+ """
222
+ The base URL for the endpoint group.
223
+
224
+ This URL is added as a prefix to all endpoints attached to the group. This includes any named URL parameters:
225
+ """
220
226
  url = clearskies.configs.String(default="")
227
+
228
+ """
229
+ The list of endpoints connected to this endpoint group
230
+ """
231
+ endpoints = clearskies.configs.EndpointList()
232
+
221
233
  response_headers = clearskies.configs.StringListOrCallable(default=[])
222
234
  authentication = clearskies.configs.Authentication(default=Public())
223
235
  authorization = clearskies.configs.Authorization(default=Authorization())
224
236
  security_headers = clearskies.configs.SecurityHeaders(default=[])
237
+
225
238
  cors_header: SecurityHeader = None # type: ignore
226
239
  has_cors: bool = False
227
240
  endpoints_initialized = False
@@ -23,13 +23,13 @@ class Callable(Endpoint):
23
23
  """
24
24
  An endpoint that executes a user-defined function.
25
25
 
26
- The Callable endpoint does exactly that - you provide a function that will be called when the endpoin is invoked. Like
27
- all callables invoked by clearskies, you can request any defined depenndency that can be provided by the clearskies
26
+ The Callable endpoint does exactly that - you provide a function that will be called when the endpoint is invoked. Like
27
+ all callables invoked by clearskies, you can request any defined dependency that can be provided by the clearskies
28
28
  framework.
29
29
 
30
30
  Whatever you return will be returned to the client. By default, the return value is sent along in the `data` parameter
31
31
  of the standard clearskies response. To suppress this behavior, set `return_standard_response` to `False`. You can also
32
- return an model instance, a model query, or a list of model instances and the callable endpoint will automatically return
32
+ return a model instance, a model query, or a list of model instances and the callable endpoint will automatically return
33
33
  the columns specified in `readable_column_names` to the client.
34
34
 
35
35
  Here's a basic working example:
@@ -300,6 +300,7 @@ class Callable(Endpoint):
300
300
  converted_models,
301
301
  number_results=len(response) if response.backend.can_count else None,
302
302
  next_page=response.next_page_data(),
303
+ limit=response.get_query().limit,
303
304
  )
304
305
 
305
306
  # or did they return a list of models?