clear-skies 1.19.30__tar.gz → 1.20.0__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.19.30 → clear_skies-1.20.0}/PKG-INFO +1 -1
  2. {clear_skies-1.19.30 → clear_skies-1.20.0}/pyproject.toml +1 -1
  3. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/__init__.py +12 -0
  4. clear_skies-1.20.0/src/clearskies/column_types/has_one.py +58 -0
  5. clear_skies-1.20.0/src/clearskies/column_types/timestamp.py +72 -0
  6. {clear_skies-1.19.30 → clear_skies-1.20.0}/LICENSE +0 -0
  7. {clear_skies-1.19.30 → clear_skies-1.20.0}/README.md +0 -0
  8. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/__init__.py +0 -0
  9. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/application.py +0 -0
  10. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/__init__.py +0 -0
  11. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/auth0_jwks.py +0 -0
  12. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/auth_exception.py +0 -0
  13. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/authorization.py +0 -0
  14. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/jwks.py +0 -0
  15. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/jwks_jwcrypto.py +0 -0
  16. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/public.py +0 -0
  17. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/authentication/secret_bearer.py +0 -0
  18. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/__init__.py +0 -0
  19. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/__init__.py +0 -0
  20. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  21. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  22. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  23. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  24. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  25. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  26. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  27. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  28. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  29. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  30. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  31. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  32. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/__init__.py +0 -0
  33. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/header.py +0 -0
  34. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/json_body.py +0 -0
  35. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/request.py +0 -0
  36. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  37. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/request/url_path.py +0 -0
  38. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/response/__init__.py +0 -0
  39. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/response/response.py +0 -0
  40. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/__init__.py +0 -0
  41. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/array.py +0 -0
  42. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/base64.py +0 -0
  43. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/boolean.py +0 -0
  44. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/date.py +0 -0
  45. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/datetime.py +0 -0
  46. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/double.py +0 -0
  47. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/enum.py +0 -0
  48. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/integer.py +0 -0
  49. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/long.py +0 -0
  50. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/number.py +0 -0
  51. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/object.py +0 -0
  52. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/password.py +0 -0
  53. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/autodoc/schema/string.py +0 -0
  54. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/__init__.py +0 -0
  55. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/api_backend.py +0 -0
  56. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/backend.py +0 -0
  57. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/cursor_backend.py +0 -0
  58. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/example_backend.py +0 -0
  59. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/file_backend.py +0 -0
  60. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/json_backend.py +0 -0
  61. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/memory_backend.py +0 -0
  62. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/restful_api_advanced_search_backend.py +0 -0
  63. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/backends/secrets_backend.py +0 -0
  64. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/binding_config.py +0 -0
  65. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/audit.py +0 -0
  66. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/belongs_to.py +0 -0
  67. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/boolean.py +0 -0
  68. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/category_tree.py +0 -0
  69. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/column.py +0 -0
  70. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created.py +0 -0
  71. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_by_authorization_data.py +0 -0
  72. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_by_header.py +0 -0
  73. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_by_ip.py +0 -0
  74. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_by_routing_data.py +0 -0
  75. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_by_user_agent.py +0 -0
  76. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/created_micro.py +0 -0
  77. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/datetime.py +0 -0
  78. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/datetime_micro.py +0 -0
  79. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/email.py +0 -0
  80. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/float.py +0 -0
  81. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/has_many.py +0 -0
  82. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/integer.py +0 -0
  83. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/json.py +0 -0
  84. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/many_to_many.py +0 -0
  85. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/many_to_many_with_data.py +0 -0
  86. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/phone.py +0 -0
  87. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/select.py +0 -0
  88. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/string.py +0 -0
  89. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/updated.py +0 -0
  90. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/updated_micro.py +0 -0
  91. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/column_types/uuid.py +0 -0
  92. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/columns.py +0 -0
  93. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/condition_parser.py +0 -0
  94. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/__init__.py +0 -0
  95. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/bash.py +0 -0
  96. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/build_context.py +0 -0
  97. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/cli.py +0 -0
  98. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/context.py +0 -0
  99. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/convert_to_application.py +0 -0
  100. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/extract_handler.py +0 -0
  101. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/test.py +0 -0
  102. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/contexts/wsgi.py +0 -0
  103. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/__init__.py +0 -0
  104. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/auth0_jwks.py +0 -0
  105. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/authorization.py +0 -0
  106. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/binding_classes.py +0 -0
  107. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/binding_modules.py +0 -0
  108. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/bindings.py +0 -0
  109. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/create.py +0 -0
  110. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/delete.py +0 -0
  111. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/docs.py +0 -0
  112. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/get.py +0 -0
  113. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/jwks.py +0 -0
  114. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/merge.py +0 -0
  115. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/patch.py +0 -0
  116. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/post.py +0 -0
  117. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/public.py +0 -0
  118. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/response_headers.py +0 -0
  119. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/return_raw_response.py +0 -0
  120. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/schema.py +0 -0
  121. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/secret_bearer.py +0 -0
  122. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/decorators/security_headers.py +0 -0
  123. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/__init__.py +0 -0
  124. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/additional_config.py +0 -0
  125. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/additional_config_auto_import.py +0 -0
  126. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/di.py +0 -0
  127. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/standard_dependencies.py +0 -0
  128. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/test_module/__init__.py +0 -0
  129. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  130. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/di/test_module/module_class.py +0 -0
  131. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/environment.py +0 -0
  132. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/functional/__init__.py +0 -0
  133. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/functional/string.py +0 -0
  134. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/functional/validations.py +0 -0
  135. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/__init__.py +0 -0
  136. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/advanced_search.py +0 -0
  137. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/base.py +0 -0
  138. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/callable.py +0 -0
  139. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/create.py +0 -0
  140. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/crud_by_method.py +0 -0
  141. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/database_connector.py +0 -0
  142. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/delete.py +0 -0
  143. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/__init__.py +0 -0
  144. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/authentication.py +0 -0
  145. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/authorization.py +0 -0
  146. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/client_error.py +0 -0
  147. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/input_error.py +0 -0
  148. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/exceptions/not_found.py +0 -0
  149. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/get.py +0 -0
  150. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/health_check.py +0 -0
  151. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/input_processing.py +0 -0
  152. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/list.py +0 -0
  153. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/mygrations.py +0 -0
  154. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/request_method_routing.py +0 -0
  155. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/restful_api.py +0 -0
  156. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/routing.py +0 -0
  157. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/schema_helper.py +0 -0
  158. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/simple_routing.py +0 -0
  159. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/simple_routing_route.py +0 -0
  160. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/simple_search.py +0 -0
  161. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/update.py +0 -0
  162. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/handlers/write.py +0 -0
  163. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/__init__.py +0 -0
  164. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/cli.py +0 -0
  165. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  166. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  167. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  168. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/input_output.py +0 -0
  169. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_outputs/wsgi.py +0 -0
  170. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/__init__.py +0 -0
  171. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/after.py +0 -0
  172. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/before.py +0 -0
  173. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/in_the_future_at_least.py +0 -0
  174. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/in_the_future_at_most.py +0 -0
  175. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/in_the_past_at_least.py +0 -0
  176. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/in_the_past_at_most.py +0 -0
  177. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/maximum_length.py +0 -0
  178. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/maximum_value.py +0 -0
  179. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/minimum_length.py +0 -0
  180. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/minimum_value.py +0 -0
  181. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/required.py +0 -0
  182. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/requirement.py +0 -0
  183. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/time_delta.py +0 -0
  184. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/input_requirements/unique.py +0 -0
  185. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/mocks/__init__.py +0 -0
  186. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/mocks/input_output.py +0 -0
  187. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/mocks/models.py +0 -0
  188. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/model.py +0 -0
  189. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/models.py +0 -0
  190. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/__init__.py +0 -0
  191. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  192. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  193. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  194. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/akeyless.py +0 -0
  195. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  196. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  197. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/secrets/secrets.py +0 -0
  198. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/__init__.py +0 -0
  199. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/base.py +0 -0
  200. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/cache_control.py +0 -0
  201. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/cors.py +0 -0
  202. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/csp.py +0 -0
  203. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/hsts.py +0 -0
  204. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  205. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/security_headers/x_frame_options.py +0 -0
  206. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/tests/__init__.py +0 -0
  207. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/tests/simple_api/__init__.py +0 -0
  208. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/tests/simple_api/models/__init__.py +0 -0
  209. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/tests/simple_api/models/status.py +0 -0
  210. {clear_skies-1.19.30 → clear_skies-1.20.0}/src/clearskies/tests/simple_api/models/user.py +0 -0
  211. {clear_skies-1.19.30 → clear_skies-1.20.0}/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.19.30
3
+ Version: 1.20.0
4
4
  Summary: A framework for building backends in the cloud
5
5
  Home-page: https://github.com/cmancone/clearskies
6
6
  License: MIT
@@ -2,7 +2,7 @@
2
2
 
3
3
  [tool.poetry]
4
4
  name = "clear-skies"
5
- version = "1.19.30"
5
+ version = "1.20.0"
6
6
  description = "A framework for building backends in the cloud"
7
7
  authors = [
8
8
  "Conor Mancone <cmancone@gmail.com>",
@@ -15,6 +15,7 @@ from .datetime_micro import DateTimeMicro
15
15
  from .email import Email
16
16
  from .float import Float
17
17
  from .has_many import HasMany
18
+ from .has_one import HasOne
18
19
  from .integer import Integer
19
20
  from .json import JSON
20
21
  from .many_to_many import ManyToMany
@@ -22,6 +23,7 @@ from .many_to_many_with_data import ManyToManyWithData
22
23
  from .phone import Phone
23
24
  from .select import Select
24
25
  from .string import String
26
+ from .timestamp import Timestamp
25
27
  from .updated import Updated
26
28
  from .updated_micro import UpdatedMicro
27
29
  from .uuid import UUID
@@ -95,6 +97,10 @@ def has_many(name, **kwargs):
95
97
  return build_column_config(name, HasMany, **kwargs)
96
98
 
97
99
 
100
+ def has_one(name, **kwargs):
101
+ return build_column_config(name, HasOne, **kwargs)
102
+
103
+
98
104
  def integer(name, **kwargs):
99
105
  return build_column_config(name, Integer, **kwargs)
100
106
 
@@ -123,6 +129,10 @@ def string(name, **kwargs):
123
129
  return build_column_config(name, String, **kwargs)
124
130
 
125
131
 
132
+ def timestamp(name, **kwargs):
133
+ return build_column_config(name, Timestamp, **kwargs)
134
+
135
+
126
136
  def updated(name, **kwargs):
127
137
  return build_column_config(name, Updated, **kwargs)
128
138
 
@@ -168,6 +178,8 @@ __all__ = [
168
178
  "Float",
169
179
  "has_many",
170
180
  "HasMany",
181
+ "has_one",
182
+ "HasOne",
171
183
  "integer",
172
184
  "Integer",
173
185
  "json",
@@ -0,0 +1,58 @@
1
+ from .has_many import HasMany
2
+ import re
3
+ from collections import OrderedDict
4
+ from ..autodoc.schema import Array as AutoDocArray
5
+ from ..autodoc.schema import Object as AutoDocObject
6
+ from ..autodoc.schema import String as AutoDocString
7
+
8
+
9
+ class HasOne(HasMany):
10
+ """
11
+ Controls a has-one relationship.
12
+
13
+ This is a readonly column. When used in a model context it will return the related record.
14
+ When used in an API context, it will convert the child record into an object.
15
+
16
+ It assumes that the foreign id in the child table is `[parent_model_class_name]_id` in all lower case.
17
+ e.g., if the parent model class is named Status, then it assumes an id in the child class called `status_id`.
18
+ """
19
+
20
+ def can_provide(self, column_name):
21
+ return column_name == self.name
22
+
23
+ def provide(self, data, column_name):
24
+ foreign_column_name = self.config("foreign_column_name")
25
+ id_column_name = self.config("parent_id_column_name")
26
+ return self.child_models.find(f"{foreign_column_name}={data[id_column_name]}")
27
+
28
+ def to_json(self, model):
29
+ json = OrderedDict()
30
+ columns = self.get_child_columns()
31
+ child = model.__getattr__(self.name)
32
+ child_id_column_name = child.id_column_name
33
+ json = {
34
+ **json,
35
+ **columns[child_id_column_name].to_json(child),
36
+ }
37
+ for column_name in self.config("readable_child_columns"):
38
+ json = {
39
+ **json,
40
+ **columns[column_name].to_json(child),
41
+ }
42
+ return {self.name: json}
43
+
44
+ def documentation(self, name=None, example=None, value=None):
45
+ columns = self.get_child_columns()
46
+ child_id_column_name = self.child_models.get_id_column_name()
47
+ child_properties = [columns[child_id_column_name].documentation()]
48
+
49
+ for column_name in self.config("readable_child_columns"):
50
+ child_docs = columns[column_name].documentation()
51
+ if type(child_docs) != list:
52
+ child_docs = [child_docs]
53
+ child_properties.extend(child_docs)
54
+
55
+ return AutoDocObject(
56
+ self.camel_to_nice(self.child_models.model_class().__name__),
57
+ child_properties,
58
+ )
@@ -0,0 +1,72 @@
1
+ from .datetime import DateTime
2
+ from datetime import datetime, timezone
3
+ import dateparser
4
+ from ..autodoc.schema import DateTime as AutoDocDateTime
5
+
6
+
7
+ class Timestamp(DateTime):
8
+ my_configs = [
9
+ "date_format",
10
+ "milliseconds",
11
+ ]
12
+
13
+ def _finalize_configuration(self, configuration):
14
+ return {
15
+ **{
16
+ "date_format": self._date_format,
17
+ "milliseconds": False,
18
+ },
19
+ **super()._finalize_configuration(configuration),
20
+ }
21
+
22
+ def from_backend(self, value):
23
+ mult = 1000 if self.config("milliseconds") else 1
24
+ if not value:
25
+ date = None
26
+ elif isinstance(value, str):
27
+ if not value.isdigit():
28
+ raise ValueError(
29
+ 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
+ date = datetime.fromtimestamp(int(value) / mult)
32
+ elif isinstance(value, int):
33
+ date = datetime.fromtimestamp(value / mult)
34
+ else:
35
+ if not isinstance(value, datetime):
36
+ raise ValueError(
37
+ 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
+ date = value
40
+ return date.replace(tzinfo=timezone.utc) if date else None
41
+
42
+ def to_backend(self, data):
43
+ if not self.name in data or isinstance(data[self.name], int) or data[self.name] == None:
44
+ return data
45
+
46
+ value = data[self.name]
47
+ if isinstance(value, str):
48
+ if not value.isdigit():
49
+ raise ValueError(
50
+ f"Invalid data was sent to 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}'"
51
+ )
52
+ value = int(value)
53
+ elif isinstance(value, datetime):
54
+ value = value.timestamp()
55
+ else:
56
+ raise ValueError(
57
+ f"Invalid data was sent to the backend for model {self.model_class.__name__} and column {self.name}: the value was neither an integer, a string, nor a datetime object"
58
+ )
59
+
60
+ # hopefully this is a Python datetime object in UTC timezone...
61
+ return {**data, **{self.name: value}}
62
+
63
+ def input_error_for_value(self, value, operator=None):
64
+ if not isinstance(value, int):
65
+ return f"'{self.name}' must be an integer"
66
+ return ""
67
+
68
+ def values_match(self, value_1, value_2):
69
+ """
70
+ Compares two values to see if they are the same
71
+ """
72
+ return value_1 == value_2
File without changes
File without changes