clear-skies 1.21.1__tar.gz → 1.21.2__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.21.1 → clear_skies-1.21.2}/PKG-INFO +1 -1
  2. {clear_skies-1.21.1 → clear_skies-1.21.2}/pyproject.toml +1 -1
  3. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/category_tree.py +79 -1
  4. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/datetime.py +1 -0
  5. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/standard_dependencies.py +2 -1
  6. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/model.py +2 -1
  7. {clear_skies-1.21.1 → clear_skies-1.21.2}/LICENSE +0 -0
  8. {clear_skies-1.21.1 → clear_skies-1.21.2}/README.md +0 -0
  9. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/__init__.py +0 -0
  10. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/application.py +0 -0
  11. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/__init__.py +0 -0
  12. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/auth0_jwks.py +0 -0
  13. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/auth_exception.py +0 -0
  14. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/authorization.py +0 -0
  15. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/jwks.py +0 -0
  16. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/jwks_jwcrypto.py +0 -0
  17. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/public.py +0 -0
  18. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/authentication/secret_bearer.py +0 -0
  19. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/__init__.py +0 -0
  20. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/__init__.py +0 -0
  21. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  22. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  23. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  24. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  25. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  26. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  27. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  28. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  29. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  30. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  31. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  32. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  33. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/__init__.py +0 -0
  34. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/header.py +0 -0
  35. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/json_body.py +0 -0
  36. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/request.py +0 -0
  37. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  38. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/request/url_path.py +0 -0
  39. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/response/__init__.py +0 -0
  40. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/response/response.py +0 -0
  41. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/__init__.py +0 -0
  42. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/array.py +0 -0
  43. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/base64.py +0 -0
  44. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/boolean.py +0 -0
  45. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/date.py +0 -0
  46. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/datetime.py +0 -0
  47. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/double.py +0 -0
  48. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/enum.py +0 -0
  49. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/integer.py +0 -0
  50. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/long.py +0 -0
  51. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/number.py +0 -0
  52. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/object.py +0 -0
  53. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/password.py +0 -0
  54. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/autodoc/schema/string.py +0 -0
  55. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/__init__.py +0 -0
  56. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/api_backend.py +0 -0
  57. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/backend.py +0 -0
  58. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/cursor_backend.py +0 -0
  59. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/example_backend.py +0 -0
  60. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/file_backend.py +0 -0
  61. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/json_backend.py +0 -0
  62. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/memory_backend.py +0 -0
  63. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/restful_api_advanced_search_backend.py +0 -0
  64. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/backends/secrets_backend.py +0 -0
  65. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/binding_config.py +0 -0
  66. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/__init__.py +0 -0
  67. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/audit.py +0 -0
  68. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/belongs_to.py +0 -0
  69. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/boolean.py +0 -0
  70. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/column.py +0 -0
  71. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created.py +0 -0
  72. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_by_authorization_data.py +0 -0
  73. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_by_header.py +0 -0
  74. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_by_ip.py +0 -0
  75. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_by_routing_data.py +0 -0
  76. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_by_user_agent.py +0 -0
  77. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/created_micro.py +0 -0
  78. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/datetime_micro.py +0 -0
  79. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/email.py +0 -0
  80. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/float.py +0 -0
  81. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/has_many.py +0 -0
  82. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/has_one.py +0 -0
  83. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/integer.py +0 -0
  84. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/json.py +0 -0
  85. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/many_to_many.py +0 -0
  86. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/many_to_many_with_data.py +0 -0
  87. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/phone.py +0 -0
  88. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/select.py +0 -0
  89. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/string.py +0 -0
  90. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/timestamp.py +0 -0
  91. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/updated.py +0 -0
  92. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/updated_micro.py +0 -0
  93. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/column_types/uuid.py +0 -0
  94. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/columns.py +0 -0
  95. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/condition_parser.py +0 -0
  96. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/__init__.py +0 -0
  97. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/bash.py +0 -0
  98. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/build_context.py +0 -0
  99. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/cli.py +0 -0
  100. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/context.py +0 -0
  101. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/convert_to_application.py +0 -0
  102. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/extract_handler.py +0 -0
  103. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/test.py +0 -0
  104. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/contexts/wsgi.py +0 -0
  105. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/__init__.py +0 -0
  106. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/auth0_jwks.py +0 -0
  107. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/authorization.py +0 -0
  108. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/binding_classes.py +0 -0
  109. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/binding_modules.py +0 -0
  110. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/bindings.py +0 -0
  111. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/create.py +0 -0
  112. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/delete.py +0 -0
  113. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/docs.py +0 -0
  114. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/get.py +0 -0
  115. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/jwks.py +0 -0
  116. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/merge.py +0 -0
  117. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/patch.py +0 -0
  118. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/post.py +0 -0
  119. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/public.py +0 -0
  120. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/response_headers.py +0 -0
  121. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/return_raw_response.py +0 -0
  122. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/schema.py +0 -0
  123. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/secret_bearer.py +0 -0
  124. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/decorators/security_headers.py +0 -0
  125. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/__init__.py +0 -0
  126. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/additional_config.py +0 -0
  127. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/additional_config_auto_import.py +0 -0
  128. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/di.py +0 -0
  129. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/test_module/__init__.py +0 -0
  130. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  131. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/di/test_module/module_class.py +0 -0
  132. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/environment.py +0 -0
  133. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/functional/__init__.py +0 -0
  134. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/functional/string.py +0 -0
  135. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/functional/validations.py +0 -0
  136. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/__init__.py +0 -0
  137. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/advanced_search.py +0 -0
  138. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/base.py +0 -0
  139. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/callable.py +0 -0
  140. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/create.py +0 -0
  141. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/crud_by_method.py +0 -0
  142. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/database_connector.py +0 -0
  143. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/delete.py +0 -0
  144. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/__init__.py +0 -0
  145. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/authentication.py +0 -0
  146. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/authorization.py +0 -0
  147. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/client_error.py +0 -0
  148. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/input_error.py +0 -0
  149. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/exceptions/not_found.py +0 -0
  150. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/get.py +0 -0
  151. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/health_check.py +0 -0
  152. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/input_processing.py +0 -0
  153. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/list.py +0 -0
  154. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/mygrations.py +0 -0
  155. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/request_method_routing.py +0 -0
  156. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/restful_api.py +0 -0
  157. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/routing.py +0 -0
  158. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/schema_helper.py +0 -0
  159. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/simple_routing.py +0 -0
  160. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/simple_routing_route.py +0 -0
  161. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/simple_search.py +0 -0
  162. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/update.py +0 -0
  163. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/handlers/write.py +0 -0
  164. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/__init__.py +0 -0
  165. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/cli.py +0 -0
  166. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  167. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  168. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  169. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/input_output.py +0 -0
  170. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_outputs/wsgi.py +0 -0
  171. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/__init__.py +0 -0
  172. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/after.py +0 -0
  173. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/before.py +0 -0
  174. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/in_the_future_at_least.py +0 -0
  175. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/in_the_future_at_most.py +0 -0
  176. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/in_the_past_at_least.py +0 -0
  177. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/in_the_past_at_most.py +0 -0
  178. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/maximum_length.py +0 -0
  179. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/maximum_value.py +0 -0
  180. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/minimum_length.py +0 -0
  181. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/minimum_value.py +0 -0
  182. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/required.py +0 -0
  183. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/requirement.py +0 -0
  184. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/time_delta.py +0 -0
  185. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/input_requirements/unique.py +0 -0
  186. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/mocks/__init__.py +0 -0
  187. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/mocks/input_output.py +0 -0
  188. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/mocks/models.py +0 -0
  189. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/models.py +0 -0
  190. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/__init__.py +0 -0
  191. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  192. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  193. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  194. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/akeyless.py +0 -0
  195. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  196. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  197. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/secrets/secrets.py +0 -0
  198. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/__init__.py +0 -0
  199. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/base.py +0 -0
  200. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/cache_control.py +0 -0
  201. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/cors.py +0 -0
  202. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/csp.py +0 -0
  203. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/hsts.py +0 -0
  204. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  205. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/security_headers/x_frame_options.py +0 -0
  206. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/tests/__init__.py +0 -0
  207. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/tests/simple_api/__init__.py +0 -0
  208. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/tests/simple_api/models/__init__.py +0 -0
  209. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/tests/simple_api/models/status.py +0 -0
  210. {clear_skies-1.21.1 → clear_skies-1.21.2}/src/clearskies/tests/simple_api/models/user.py +0 -0
  211. {clear_skies-1.21.1 → clear_skies-1.21.2}/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.21.1
3
+ Version: 1.21.2
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.21.1"
5
+ version = "1.21.2"
6
6
  description = "A framework for building backends in the cloud"
7
7
  authors = [
8
8
  "Conor Mancone <cmancone@gmail.com>",
@@ -119,6 +119,10 @@ class CategoryTree(BelongsTo):
119
119
  "tree_level_column_name",
120
120
  "max_iterations",
121
121
  "parent_models_class",
122
+ "children_column_name",
123
+ "descendents_column_name",
124
+ "ancestors_column_name",
125
+ "load_relatives_strategy",
122
126
  ]
123
127
 
124
128
  def __init__(self, di):
@@ -137,6 +141,11 @@ class CategoryTree(BelongsTo):
137
141
  configuration["tree_models_class"],
138
142
  config_name="tree_models_class",
139
143
  )
144
+ load_relatives_strategy = configuration.get("load_relatives_strategy", None)
145
+ if load_relatives_strategy and load_relatives_strategy not in ["join", "where_in", "individual"]:
146
+ raise ValueError(
147
+ f"Configuration error for category_tree column '{self.name} in model class '{self.model_class.__name__}': load_relatives_strategy must be one of ['join', 'where_in', or 'individual']"
148
+ )
140
149
 
141
150
  def _finalize_configuration(self, configuration):
142
151
  return {
@@ -152,6 +161,10 @@ class CategoryTree(BelongsTo):
152
161
  "tree_is_parent_column_name": configuration.get("tree_is_parent_column_name", "is_parent"),
153
162
  "tree_level_column_name": configuration.get("tree_level_column_name", "level"),
154
163
  "max_iterations": configuration.get("max_iterations", 100),
164
+ "children_column_name": configuration.get("children_column_name", "children"),
165
+ "descendents_column_name": configuration.get("descendents_column_name", "descendents"),
166
+ "ancestors_column_name": configuration.get("ancestors_column_name", "ancestors"),
167
+ "load_relatives_strategy": configuration.get("load_relatives_strategy", "join"),
155
168
  },
156
169
  }
157
170
 
@@ -167,7 +180,7 @@ class CategoryTree(BelongsTo):
167
180
  return data
168
181
 
169
182
  def force_tree_update(self, model):
170
- self.update_tree_table(model, model.id, model.__getattr__(self.name))
183
+ self.update_tree_table(model, model.get(self.id_column_name), model.__getattr__(self.name))
171
184
 
172
185
  def update_tree_table(self, model, child_id, direct_parent_id):
173
186
  tree_models = self.tree_models
@@ -224,3 +237,68 @@ class CategoryTree(BelongsTo):
224
237
  + "You may have accidentally created a circular cateogry tree. If not, and your category tree "
225
238
  + "really _is_ that deep, then adjust the 'max_iterations' configuration for this column accordingly. "
226
239
  )
240
+
241
+ def can_provide(self, column_name):
242
+ return column_name in [
243
+ self.config("model_column_name"),
244
+ self.config("children_column_name"),
245
+ self.config("descendents_column_name"),
246
+ self.config("ancestors_column_name"),
247
+ ]
248
+
249
+ def provide(self, data, column_name):
250
+ if column_name == self.config("model_column_name"):
251
+ return super().provide(data, column_name)
252
+
253
+ if column_name == self.config("children_column_name"):
254
+ return self.relatives(data)
255
+
256
+ if column_name == self.config("descendents_column_name"):
257
+ return self.relatives(data, include_all=True)
258
+
259
+ if column_name == self.config("ancestors_column_name"):
260
+ return self.relatives(data, find_parents=True)
261
+
262
+ def relatives(self, data, include_all=False, find_parents=False):
263
+ id_column_name = self.model_class.id_column_name
264
+ model_id = data[self.model_class.id_column_name]
265
+ model_table_name = self.model_class.table_name()
266
+ tree_table_name = self.config("tree_models_class").table_name()
267
+ parent_id_column_name = self.config("tree_parent_id_column_name")
268
+ child_id_column_name = self.config("tree_child_id_column_name")
269
+ is_parent_column_name = self.config("is_parent_column_name")
270
+ level_column_name = self.config("tree_level_column_name")
271
+
272
+ if find_parents:
273
+ join_on = parent_id_column_name
274
+ search_on = child_id_column_name
275
+ else:
276
+ join_on = child_id_column_name
277
+ search_on = parent_id_column_name
278
+
279
+ # if we can join then use a join.
280
+ if self.config("load_relatives_strategy") == "join":
281
+ relatives = self.parent_models.join(
282
+ f"{tree_table_name} as tree on tree.{join_on}={model_table_name}.{id_column_name}"
283
+ )
284
+ relatives = relatives.where(f"tree.{search_on}={model_id}")
285
+ if not include_all:
286
+ relatives = relatives.where(f"tree.{is_parent_column_name}=1")
287
+ if find_parents:
288
+ relatives = relatives.sort_by(level_column_name, "asc")
289
+ return relatives
290
+
291
+ # joins only work for SQL-like backends. Otherwise, we have to pull out our list of ids
292
+ branches = self.tree_models.where(f"{search_on}={model_id}")
293
+ if not include_all:
294
+ branches = branches.where(f"tree.{is_parent_column_name}=1")
295
+ if find_parents:
296
+ branches = branches.sort_by(level_column_name, "asc")
297
+ ids = [str(branch.get(child_id_column_name)) for branch in branches]
298
+
299
+ # Can we search with a WHERE IN() clause? If the backend supports it, it is probably faster
300
+ if self.config("load_relatives_strategy") == "where_in":
301
+ return self.parent_models.where(f"{id_column_name} IN ('" + "','".join(ids) + "')")
302
+
303
+ # otherwise we have to load each model individually which is SLOW....
304
+ return [self.parent_models.find(f"{id_column_name}={id}") for id in ids]
@@ -3,6 +3,7 @@ from datetime import datetime, timezone
3
3
  import dateparser
4
4
  from ..autodoc.schema import DateTime as AutoDocDateTime
5
5
 
6
+
6
7
  class DateTime(Column):
7
8
  _auto_doc_class = AutoDocDateTime
8
9
  _date_format = "%Y-%m-%d %H:%M:%S"
@@ -138,8 +138,9 @@ class StandardDependencies(DI):
138
138
 
139
139
  def provide_uuid(self):
140
140
  return uuid
141
-
141
+
142
142
  def provide_timezone(self):
143
143
  """Set the default timezone."""
144
144
  import datetime
145
+
145
146
  return datetime.UTC
@@ -10,6 +10,7 @@ try:
10
10
  except ModuleNotFoundError:
11
11
  from typing import Self
12
12
 
13
+
13
14
  class Model(Models):
14
15
  _configured_columns = None
15
16
  _data = None
@@ -202,7 +203,7 @@ class Model(Models):
202
203
  return data[key]
203
204
  return self.__getattr__(key)
204
205
 
205
- def was_changed(self: Self, key) -> bool:
206
+ def was_changed(self: Self, key) -> bool:
206
207
  """Returns True/False to denote if a column was changed in the last save"""
207
208
  if self._previous_data is None:
208
209
  raise ValueError("was_changed was called before a save was finished - you must save something first")
File without changes
File without changes