clear-skies 1.20.3__tar.gz → 1.21.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 (211) hide show
  1. {clear_skies-1.20.3 → clear_skies-1.21.1}/PKG-INFO +2 -1
  2. {clear_skies-1.20.3 → clear_skies-1.21.1}/pyproject.toml +2 -1
  3. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created.py +3 -3
  4. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_micro.py +3 -3
  5. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/datetime.py +4 -4
  6. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/datetime_micro.py +3 -2
  7. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/timestamp.py +4 -3
  8. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/updated.py +5 -3
  9. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/updated_micro.py +5 -3
  10. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/standard_dependencies.py +5 -0
  11. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/model.py +37 -33
  12. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/models.py +43 -43
  13. {clear_skies-1.20.3 → clear_skies-1.21.1}/LICENSE +0 -0
  14. {clear_skies-1.20.3 → clear_skies-1.21.1}/README.md +0 -0
  15. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/__init__.py +0 -0
  16. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/application.py +0 -0
  17. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/__init__.py +0 -0
  18. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/auth0_jwks.py +0 -0
  19. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/auth_exception.py +0 -0
  20. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/authorization.py +0 -0
  21. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/jwks.py +0 -0
  22. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/jwks_jwcrypto.py +0 -0
  23. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/public.py +0 -0
  24. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/authentication/secret_bearer.py +0 -0
  25. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/__init__.py +0 -0
  26. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/__init__.py +0 -0
  27. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  28. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  29. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  30. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  31. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  32. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  33. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  34. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  35. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  36. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  37. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  38. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  39. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/__init__.py +0 -0
  40. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/header.py +0 -0
  41. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/json_body.py +0 -0
  42. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/request.py +0 -0
  43. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  44. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/request/url_path.py +0 -0
  45. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/response/__init__.py +0 -0
  46. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/response/response.py +0 -0
  47. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/__init__.py +0 -0
  48. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/array.py +0 -0
  49. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/base64.py +0 -0
  50. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/boolean.py +0 -0
  51. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/date.py +0 -0
  52. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/datetime.py +0 -0
  53. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/double.py +0 -0
  54. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/enum.py +0 -0
  55. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/integer.py +0 -0
  56. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/long.py +0 -0
  57. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/number.py +0 -0
  58. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/object.py +0 -0
  59. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/password.py +0 -0
  60. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/autodoc/schema/string.py +0 -0
  61. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/__init__.py +0 -0
  62. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/api_backend.py +0 -0
  63. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/backend.py +0 -0
  64. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/cursor_backend.py +0 -0
  65. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/example_backend.py +0 -0
  66. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/file_backend.py +0 -0
  67. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/json_backend.py +0 -0
  68. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/memory_backend.py +0 -0
  69. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/restful_api_advanced_search_backend.py +0 -0
  70. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/backends/secrets_backend.py +0 -0
  71. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/binding_config.py +0 -0
  72. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/__init__.py +0 -0
  73. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/audit.py +0 -0
  74. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/belongs_to.py +0 -0
  75. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/boolean.py +0 -0
  76. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/category_tree.py +0 -0
  77. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/column.py +0 -0
  78. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_by_authorization_data.py +0 -0
  79. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_by_header.py +0 -0
  80. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_by_ip.py +0 -0
  81. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_by_routing_data.py +0 -0
  82. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/created_by_user_agent.py +0 -0
  83. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/email.py +0 -0
  84. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/float.py +0 -0
  85. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/has_many.py +0 -0
  86. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/has_one.py +0 -0
  87. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/integer.py +0 -0
  88. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/json.py +0 -0
  89. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/many_to_many.py +0 -0
  90. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/many_to_many_with_data.py +0 -0
  91. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/phone.py +0 -0
  92. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/select.py +0 -0
  93. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/string.py +0 -0
  94. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/column_types/uuid.py +0 -0
  95. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/columns.py +0 -0
  96. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/condition_parser.py +0 -0
  97. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/__init__.py +0 -0
  98. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/bash.py +0 -0
  99. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/build_context.py +0 -0
  100. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/cli.py +0 -0
  101. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/context.py +0 -0
  102. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/convert_to_application.py +0 -0
  103. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/extract_handler.py +0 -0
  104. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/test.py +0 -0
  105. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/contexts/wsgi.py +0 -0
  106. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/__init__.py +0 -0
  107. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/auth0_jwks.py +0 -0
  108. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/authorization.py +0 -0
  109. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/binding_classes.py +0 -0
  110. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/binding_modules.py +0 -0
  111. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/bindings.py +0 -0
  112. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/create.py +0 -0
  113. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/delete.py +0 -0
  114. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/docs.py +0 -0
  115. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/get.py +0 -0
  116. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/jwks.py +0 -0
  117. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/merge.py +0 -0
  118. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/patch.py +0 -0
  119. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/post.py +0 -0
  120. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/public.py +0 -0
  121. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/response_headers.py +0 -0
  122. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/return_raw_response.py +0 -0
  123. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/schema.py +0 -0
  124. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/secret_bearer.py +0 -0
  125. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/decorators/security_headers.py +0 -0
  126. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/__init__.py +0 -0
  127. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/additional_config.py +0 -0
  128. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/additional_config_auto_import.py +0 -0
  129. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/di.py +0 -0
  130. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/test_module/__init__.py +0 -0
  131. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  132. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/di/test_module/module_class.py +0 -0
  133. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/environment.py +0 -0
  134. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/functional/__init__.py +0 -0
  135. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/functional/string.py +0 -0
  136. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/functional/validations.py +0 -0
  137. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/__init__.py +0 -0
  138. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/advanced_search.py +0 -0
  139. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/base.py +0 -0
  140. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/callable.py +0 -0
  141. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/create.py +0 -0
  142. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/crud_by_method.py +0 -0
  143. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/database_connector.py +0 -0
  144. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/delete.py +0 -0
  145. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/__init__.py +0 -0
  146. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/authentication.py +0 -0
  147. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/authorization.py +0 -0
  148. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/client_error.py +0 -0
  149. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/input_error.py +0 -0
  150. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/exceptions/not_found.py +0 -0
  151. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/get.py +0 -0
  152. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/health_check.py +0 -0
  153. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/input_processing.py +0 -0
  154. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/list.py +0 -0
  155. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/mygrations.py +0 -0
  156. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/request_method_routing.py +0 -0
  157. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/restful_api.py +0 -0
  158. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/routing.py +0 -0
  159. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/schema_helper.py +0 -0
  160. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/simple_routing.py +0 -0
  161. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/simple_routing_route.py +0 -0
  162. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/simple_search.py +0 -0
  163. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/update.py +0 -0
  164. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/handlers/write.py +0 -0
  165. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/__init__.py +0 -0
  166. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/cli.py +0 -0
  167. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  168. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  169. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  170. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/input_output.py +0 -0
  171. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_outputs/wsgi.py +0 -0
  172. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/__init__.py +0 -0
  173. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/after.py +0 -0
  174. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/before.py +0 -0
  175. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/in_the_future_at_least.py +0 -0
  176. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/in_the_future_at_most.py +0 -0
  177. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/in_the_past_at_least.py +0 -0
  178. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/in_the_past_at_most.py +0 -0
  179. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/maximum_length.py +0 -0
  180. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/maximum_value.py +0 -0
  181. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/minimum_length.py +0 -0
  182. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/minimum_value.py +0 -0
  183. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/required.py +0 -0
  184. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/requirement.py +0 -0
  185. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/time_delta.py +0 -0
  186. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/input_requirements/unique.py +0 -0
  187. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/mocks/__init__.py +0 -0
  188. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/mocks/input_output.py +0 -0
  189. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/mocks/models.py +0 -0
  190. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/__init__.py +0 -0
  191. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  192. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  193. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  194. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/akeyless.py +0 -0
  195. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  196. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  197. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/secrets/secrets.py +0 -0
  198. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/__init__.py +0 -0
  199. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/base.py +0 -0
  200. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/cache_control.py +0 -0
  201. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/cors.py +0 -0
  202. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/csp.py +0 -0
  203. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/hsts.py +0 -0
  204. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  205. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/security_headers/x_frame_options.py +0 -0
  206. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/__init__.py +0 -0
  207. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/simple_api/__init__.py +0 -0
  208. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/simple_api/models/__init__.py +0 -0
  209. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/simple_api/models/status.py +0 -0
  210. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/simple_api/models/user.py +0 -0
  211. {clear_skies-1.20.3 → clear_skies-1.21.1}/src/clearskies/tests/simple_api/users_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: clear-skies
3
- Version: 1.20.3
3
+ Version: 1.21.1
4
4
  Summary: A framework for building backends in the cloud
5
5
  Home-page: https://github.com/cmancone/clearskies
6
6
  License: MIT
@@ -25,6 +25,7 @@ Requires-Dist: jose (>=1.0.0,<2.0.0) ; extra == "jose"
25
25
  Requires-Dist: jwcrypto (>=1.5.6,<2.0.0) ; extra == "jwcrypto"
26
26
  Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "mysql"
27
27
  Requires-Dist: requests (>=2.31.0,<3.0.0)
28
+ Requires-Dist: typing-extensions (>=4.12.0,<5.0.0) ; python_version >= "3.10" and python_version < "3.11"
28
29
  Project-URL: Repository, https://github.com/cmancone/clearskies
29
30
  Description-Content-Type: text/markdown
30
31
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [tool.poetry]
4
4
  name = "clear-skies"
5
- version = "1.20.3"
5
+ version = "1.21.1"
6
6
  description = "A framework for building backends in the cloud"
7
7
  authors = [
8
8
  "Conor Mancone <cmancone@gmail.com>",
@@ -34,6 +34,7 @@ akeyless-cloud-id = {version = "^0.2.3", optional = true}
34
34
  pymysql = {version = "^1.1.0", optional = true}
35
35
  jose = {version = "^1.0.0", optional = true}
36
36
  jwcrypto = {version = "^1.5.6", optional = true}
37
+ typing-extensions = {version = "^4.12.0", python = ">=3.10,<3.11"}
37
38
 
38
39
  [[tool.poetry.source]]
39
40
  name = "PyPI"
@@ -8,8 +8,8 @@ class Created(DateTime):
8
8
  "utc",
9
9
  ]
10
10
 
11
- def __init__(self, di, datetime):
12
- super().__init__(di)
11
+ def __init__(self, di, datetime, timezone):
12
+ super().__init__(di, timezone)
13
13
  self.datetime = datetime
14
14
 
15
15
  @property
@@ -22,5 +22,5 @@ class Created(DateTime):
22
22
  if self.config("utc", silent=True):
23
23
  now = self.datetime.datetime.now(self.datetime.timezone.utc)
24
24
  else:
25
- now = self.datetime.datetime.now()
25
+ now = self.datetime.datetime.now(self._timezone)
26
26
  return {**data, self.name: now}
@@ -8,8 +8,8 @@ class CreatedMicro(DateTimeMicro):
8
8
  "utc",
9
9
  ]
10
10
 
11
- def __init__(self, di, datetime):
12
- super().__init__(di)
11
+ def __init__(self, di, datetime, timezone):
12
+ super().__init__(di, timezone)
13
13
  self.datetime = datetime
14
14
 
15
15
  @property
@@ -22,5 +22,5 @@ class CreatedMicro(DateTimeMicro):
22
22
  if self.config("utc", silent=True):
23
23
  now = self.datetime.datetime.now(self.datetime.timezone.utc)
24
24
  else:
25
- now = self.datetime.datetime.now()
25
+ now = self.datetime.datetime.now(self._timezone)
26
26
  return {**data, self.name: now}
@@ -3,7 +3,6 @@ from datetime import datetime, timezone
3
3
  import dateparser
4
4
  from ..autodoc.schema import DateTime as AutoDocDateTime
5
5
 
6
-
7
6
  class DateTime(Column):
8
7
  _auto_doc_class = AutoDocDateTime
9
8
  _date_format = "%Y-%m-%d %H:%M:%S"
@@ -14,8 +13,9 @@ class DateTime(Column):
14
13
  "default_date",
15
14
  ]
16
15
 
17
- def __init__(self, di):
16
+ def __init__(self, di, timezone: datetime.tzinfo):
18
17
  super().__init__(di)
18
+ self._timezone = timezone
19
19
 
20
20
  def _finalize_configuration(self, configuration):
21
21
  return {
@@ -33,7 +33,7 @@ class DateTime(Column):
33
33
  date = dateparser.parse(value)
34
34
  else:
35
35
  date = value
36
- return date.replace(tzinfo=timezone.utc) if date else None
36
+ return date.replace(tzinfo=self._timezone) if date else None
37
37
 
38
38
  def to_backend(self, data):
39
39
  if not self.name in data or type(data[self.name]) == str or data[self.name] == None:
@@ -47,7 +47,7 @@ class DateTime(Column):
47
47
  return {self.name: datetime.isoformat() if datetime else None}
48
48
 
49
49
  def build_condition(self, value, operator=None, column_prefix=""):
50
- date = dateparser.parse(value).astimezone(timezone.utc).strftime(self.config("date_format"))
50
+ date = dateparser.parse(value).astimezone(self._timezone).strftime(self.config("date_format"))
51
51
  if not operator:
52
52
  operator = "="
53
53
  return f"{column_prefix}{self.name}{operator}{date}"
@@ -1,3 +1,4 @@
1
+ from re import T
1
2
  from .datetime import DateTime
2
3
  from datetime import datetime, timezone
3
4
  import dateparser
@@ -8,5 +9,5 @@ class DateTimeMicro(DateTime):
8
9
  _date_format = "%Y-%m-%d %H:%M:%S.%f"
9
10
  _default_date = "0000-00-00 00:00:00.000000"
10
11
 
11
- def __init__(self, di):
12
- super().__init__(di)
12
+ def __init__(self, di, timezone: datetime.tzinfo):
13
+ super().__init__(di, timezone)
@@ -1,3 +1,4 @@
1
+ import time
1
2
  from .datetime import DateTime
2
3
  from datetime import datetime, timezone
3
4
  import dateparser
@@ -28,16 +29,16 @@ class Timestamp(DateTime):
28
29
  raise ValueError(
29
30
  f"Invalid data was found in the backend for model {self.model_class.__name__} and column {self.name}: a string value was found that is not a timestamp. It was '{value}'"
30
31
  )
31
- date = datetime.fromtimestamp(int(value) / mult)
32
+ date = datetime.fromtimestamp(int(value) / mult, self._timezone)
32
33
  elif isinstance(value, int):
33
- date = datetime.fromtimestamp(value / mult)
34
+ date = datetime.fromtimestamp(value / mult, self._timezone)
34
35
  else:
35
36
  if not isinstance(value, datetime):
36
37
  raise ValueError(
37
38
  f"Invalid data was found in the backend for model {self.model_class.__name__} and column {self.name}: the value was neither an integer, a string, nor a datetime object"
38
39
  )
39
40
  date = value
40
- return date.replace(tzinfo=timezone.utc) if date else None
41
+ return date.replace(tzinfo=self._timezone) if date else None
41
42
 
42
43
  def to_backend(self, data):
43
44
  if not self.name in data or isinstance(data[self.name], int) or data[self.name] == None:
@@ -1,3 +1,5 @@
1
+ import datetime
2
+
1
3
  from .datetime import DateTime
2
4
 
3
5
 
@@ -8,8 +10,8 @@ class Updated(DateTime):
8
10
  "utc",
9
11
  ]
10
12
 
11
- def __init__(self, di, datetime):
12
- super().__init__(di)
13
+ def __init__(self, di, datetime, timezone: datetime.tzinfo):
14
+ super().__init__(di, timezone)
13
15
  self.datetime = datetime
14
16
 
15
17
  @property
@@ -20,5 +22,5 @@ class Updated(DateTime):
20
22
  if self.config("utc", silent=True):
21
23
  now = self.datetime.datetime.now(self.datetime.timezone.utc)
22
24
  else:
23
- now = self.datetime.datetime.now()
25
+ now = self.datetime.datetime.now(self._timezone)
24
26
  return {**data, self.name: now}
@@ -1,3 +1,5 @@
1
+ import datetime
2
+
1
3
  from .datetime_micro import DateTimeMicro
2
4
 
3
5
 
@@ -8,8 +10,8 @@ class UpdatedMicro(DateTimeMicro):
8
10
  "utc",
9
11
  ]
10
12
 
11
- def __init__(self, di, datetime):
12
- super().__init__(di)
13
+ def __init__(self, di, datetime, timezone: datetime.tzinfo):
14
+ super().__init__(di, timezone)
13
15
  self.datetime = datetime
14
16
 
15
17
  @property
@@ -20,5 +22,5 @@ class UpdatedMicro(DateTimeMicro):
20
22
  if self.config("utc", silent=True):
21
23
  now = self.datetime.datetime.now(self.datetime.timezone.utc)
22
24
  else:
23
- now = self.datetime.datetime.now()
25
+ now = self.datetime.datetime.now(self._timezone)
24
26
  return {**data, self.name: now}
@@ -138,3 +138,8 @@ class StandardDependencies(DI):
138
138
 
139
139
  def provide_uuid(self):
140
140
  return uuid
141
+
142
+ def provide_timezone(self):
143
+ """Set the default timezone."""
144
+ import datetime
145
+ return datetime.UTC
@@ -5,6 +5,10 @@ from .functional import string
5
5
  import re
6
6
  from .models import Models
7
7
 
8
+ try:
9
+ from typing_extensions import Self
10
+ except ModuleNotFoundError:
11
+ from typing import Self
8
12
 
9
13
  class Model(Models):
10
14
  _configured_columns = None
@@ -14,14 +18,14 @@ class Model(Models):
14
18
  _transformed = None
15
19
  id_column_name = "id"
16
20
 
17
- def __init__(self, backend, columns):
21
+ def __init__(self: Self, backend, columns):
18
22
  super().__init__(backend, columns)
19
23
  self._transformed = {}
20
24
  self._data = {}
21
25
  self._previous_data = None
22
26
  self._touched_columns = None
23
27
 
24
- def model_class(self):
28
+ def model_class(self: Self) -> type[Self]:
25
29
  """
26
30
  Return the model class that this models object will find/return instances of
27
31
 
@@ -30,7 +34,7 @@ class Model(Models):
30
34
  return self.__class__
31
35
 
32
36
  @classmethod
33
- def table_name(cls):
37
+ def table_name(cls: type[Self]) -> str:
34
38
  """Return the name of the table that the model uses for data storage"""
35
39
  singular = string.camel_case_to_snake_case(cls.__name__)
36
40
  if singular[-1] == "y":
@@ -40,16 +44,16 @@ class Model(Models):
40
44
  return f"{singular}s"
41
45
 
42
46
  @abstractmethod
43
- def columns_configuration(self):
47
+ def columns_configuration(self: Self):
44
48
  """Returns an ordered dictionary with the configuration for the columns"""
45
49
  pass
46
50
 
47
- def all_columns(self):
51
+ def all_columns(self: Self):
48
52
  default = OrderedDict([(self.id_column_name, {"class": UUID})])
49
53
  default.update(self.columns_configuration())
50
54
  return default
51
55
 
52
- def columns(self, overrides=None):
56
+ def columns(self: Self, overrides=None):
53
57
  # no caching if we have overrides
54
58
  if overrides is not None:
55
59
  return self._columns.configure(self.all_columns(), self.__class__, overrides=overrides)
@@ -58,13 +62,13 @@ class Model(Models):
58
62
  self._configured_columns = self._columns.configure(self.all_columns(), self.__class__)
59
63
  return self._configured_columns
60
64
 
61
- def supports_n_plus_one(self):
65
+ def supports_n_plus_one(self: Self):
62
66
  return self._backend.supports_n_plus_one
63
67
 
64
- def __getitem__(self, column_name):
68
+ def __getitem__(self: Self, column_name):
65
69
  return self.__getattr__(column_name)
66
70
 
67
- def __getattr__(self, column_name):
71
+ def __getattr__(self: Self, column_name):
68
72
  # this should be adjusted to only return None for empty records if the column name corresponds
69
73
  # to an actual column in the table.
70
74
  if not self.exists:
@@ -72,13 +76,13 @@ class Model(Models):
72
76
 
73
77
  return self.get_transformed_from_data(column_name, self._data)
74
78
 
75
- def get(self, column_name, silent=False):
79
+ def get(self: Self, column_name, silent=False):
76
80
  if not self.exists:
77
81
  return None
78
82
 
79
83
  return self.get_transformed_from_data(column_name, self._data, silent=silent)
80
84
 
81
- def get_transformed_from_data(self, column_name, data, cache=True, check_providers=True, silent=False):
85
+ def get_transformed_from_data(self: Self, column_name, data, cache=True, check_providers=True, silent=False):
82
86
  if cache and column_name in self._transformed:
83
87
  return self._transformed[column_name]
84
88
 
@@ -111,18 +115,18 @@ class Model(Models):
111
115
  return value
112
116
 
113
117
  @property
114
- def exists(self):
118
+ def exists(self: Self) -> bool:
115
119
  return True if (self.id_column_name in self._data and self._data[self.id_column_name]) else False
116
120
 
117
121
  @property
118
- def data(self):
122
+ def data(self: Self):
119
123
  return self._data
120
124
 
121
125
  @data.setter
122
- def data(self, data):
126
+ def data(self: Self, data) -> None:
123
127
  self._data = {} if data is None else data
124
128
 
125
- def save(self, data, columns=None):
129
+ def save(self: Self, data, columns=None) -> bool:
126
130
  """
127
131
  Save data to the database and update the model!
128
132
 
@@ -168,7 +172,7 @@ class Model(Models):
168
172
 
169
173
  return True
170
174
 
171
- def is_changing(self, key, data):
175
+ def is_changing(self: Self, key, data) -> bool:
172
176
  """
173
177
  Returns True/False to denote if the given column is being modified by the active save operation
174
178
 
@@ -184,7 +188,7 @@ class Model(Models):
184
188
 
185
189
  return self.__getattr__(key) != data[key]
186
190
 
187
- def latest(self, key, data):
191
+ def latest(self: Self, key, data):
188
192
  """
189
193
  Returns the 'latest' value for a column during the save operation
190
194
 
@@ -198,7 +202,7 @@ class Model(Models):
198
202
  return data[key]
199
203
  return self.__getattr__(key)
200
204
 
201
- def was_changed(self, key):
205
+ def was_changed(self: Self, key) -> bool:
202
206
  """Returns True/False to denote if a column was changed in the last save"""
203
207
  if self._previous_data is None:
204
208
  raise ValueError("was_changed was called before a save was finished - you must save something first")
@@ -221,10 +225,10 @@ class Model(Models):
221
225
  return old_value != new_value
222
226
  return not columns[key].values_match(old_value, new_value)
223
227
 
224
- def previous_value(self, key):
228
+ def previous_value(self: Self, key):
225
229
  return self.get_transformed_from_data(key, self._previous_data, cache=False, check_providers=False, silent=True)
226
230
 
227
- def delete(self, except_if_not_exists=True):
231
+ def delete(self: Self, except_if_not_exists=True) -> bool:
228
232
  if not self.exists:
229
233
  if except_if_not_exists:
230
234
  raise ValueError("Cannot delete model that already exists")
@@ -240,7 +244,7 @@ class Model(Models):
240
244
  self.post_delete()
241
245
  return True
242
246
 
243
- def columns_pre_save(self, data, columns):
247
+ def columns_pre_save(self: Self, data, columns):
244
248
  """Uses the column information present in the model to make any necessary changes before saving"""
245
249
  for column in columns.values():
246
250
  data = column.pre_save(data, self)
@@ -258,7 +262,7 @@ class Model(Models):
258
262
  """
259
263
  return data
260
264
 
261
- def columns_to_backend(self, data, columns):
265
+ def columns_to_backend(self: Self, data, columns):
262
266
  backend_data = {**data}
263
267
  temporary_data = {}
264
268
  for column in columns.values():
@@ -275,10 +279,10 @@ class Model(Models):
275
279
 
276
280
  return [backend_data, temporary_data]
277
281
 
278
- def to_backend(self, data, columns):
282
+ def to_backend(self: Self, data, columns):
279
283
  return data
280
284
 
281
- def columns_post_save(self, data, id, columns):
285
+ def columns_post_save(self: Self, data, id, columns):
282
286
  """Uses the column information present in the model to make additional changes as needed after saving"""
283
287
  for column in columns.values():
284
288
  data = column.post_save(data, self, id)
@@ -288,12 +292,12 @@ class Model(Models):
288
292
  )
289
293
  return data
290
294
 
291
- def columns_save_finished(self, columns):
295
+ def columns_save_finished(self: Self, columns):
292
296
  """Calls the save_finished method on all of our columns"""
293
297
  for column in columns.values():
294
298
  column.save_finished(self)
295
299
 
296
- def post_save(self, data, id):
300
+ def post_save(self: Self, data, id):
297
301
  """
298
302
  A hook to extend so you can provide additional pre-save logic as needed
299
303
 
@@ -302,7 +306,7 @@ class Model(Models):
302
306
  """
303
307
  pass
304
308
 
305
- def pre_save(self, data):
309
+ def pre_save(self: Self, data):
306
310
  """
307
311
  A hook to extend so you can provide additional pre-save logic as needed
308
312
 
@@ -310,7 +314,7 @@ class Model(Models):
310
314
  """
311
315
  return data
312
316
 
313
- def save_finished(self):
317
+ def save_finished(self: Self):
314
318
  """
315
319
  A hook to extend so you can provide additional logic after a save operation has fully completed
316
320
 
@@ -320,29 +324,29 @@ class Model(Models):
320
324
  """
321
325
  pass
322
326
 
323
- def columns_pre_delete(self, columns):
327
+ def columns_pre_delete(self: Self, columns):
324
328
  """Uses the column information present in the model to make any necessary changes before deleting"""
325
329
  for column in columns.values():
326
330
  column.pre_delete(self)
327
331
 
328
- def pre_delete(self):
332
+ def pre_delete(self: Self):
329
333
  """
330
334
  A hook to extend so you can provide additional pre-delete logic as needed
331
335
  """
332
336
  pass
333
337
 
334
- def columns_post_delete(self, columns):
338
+ def columns_post_delete(self: Self, columns):
335
339
  """Uses the column information present in the model to make any necessary changes after deleting"""
336
340
  for column in columns.values():
337
341
  column.post_delete(self)
338
342
 
339
- def post_delete(self):
343
+ def post_delete(self: Self):
340
344
  """
341
345
  A hook to extend so you can provide additional post-delete logic as needed
342
346
  """
343
347
  pass
344
348
 
345
- def where_for_request(self, models, routing_data, authorization_data, input_output, overrides=None):
349
+ def where_for_request(self: Self, models, routing_data, authorization_data, input_output, overrides=None):
346
350
  """
347
351
  A hook to automatically apply filtering whenever the model makes an appearance in a get/update/list/search handler.
348
352
  """