clear-skies 1.18.6__tar.gz → 1.18.8__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 (194) hide show
  1. {clear_skies-1.18.6 → clear_skies-1.18.8}/PKG-INFO +1 -1
  2. {clear_skies-1.18.6 → clear_skies-1.18.8}/pyproject.toml +1 -1
  3. clear_skies-1.18.8/src/clearskies/column_types/created_by_authorization_data.py +26 -0
  4. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/base.py +2 -2
  5. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/routing.py +1 -1
  6. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/simple_routing_route.py +24 -1
  7. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/update.py +14 -8
  8. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/model.py +12 -10
  9. clear_skies-1.18.6/src/clearskies/column_types/created_by_authorization_data.py +0 -21
  10. {clear_skies-1.18.6 → clear_skies-1.18.8}/LICENSE +0 -0
  11. {clear_skies-1.18.6 → clear_skies-1.18.8}/README.md +0 -0
  12. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/__init__.py +0 -0
  13. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/application.py +0 -0
  14. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/__init__.py +0 -0
  15. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/auth0_jwks.py +0 -0
  16. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/auth_exception.py +0 -0
  17. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/authorization.py +0 -0
  18. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/jwks.py +0 -0
  19. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/public.py +0 -0
  20. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/authentication/secret_bearer.py +0 -0
  21. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/__init__.py +0 -0
  22. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/__init__.py +0 -0
  23. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
  24. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
  25. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
  26. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
  27. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
  28. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
  29. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
  30. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
  31. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
  32. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
  33. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
  34. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
  35. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/__init__.py +0 -0
  36. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/header.py +0 -0
  37. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/json_body.py +0 -0
  38. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/request.py +0 -0
  39. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/url_parameter.py +0 -0
  40. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/request/url_path.py +0 -0
  41. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/response/__init__.py +0 -0
  42. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/response/response.py +0 -0
  43. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/__init__.py +0 -0
  44. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/array.py +0 -0
  45. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/base64.py +0 -0
  46. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/boolean.py +0 -0
  47. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/date.py +0 -0
  48. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/datetime.py +0 -0
  49. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/double.py +0 -0
  50. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/enum.py +0 -0
  51. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/integer.py +0 -0
  52. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/long.py +0 -0
  53. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/number.py +0 -0
  54. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/object.py +0 -0
  55. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/password.py +0 -0
  56. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/autodoc/schema/string.py +0 -0
  57. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/__init__.py +0 -0
  58. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/api_backend.py +0 -0
  59. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/backend.py +0 -0
  60. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/cursor_backend.py +0 -0
  61. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/example_backend.py +0 -0
  62. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/file_backend.py +0 -0
  63. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/json_backend.py +0 -0
  64. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/memory_backend.py +0 -0
  65. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/restful_api_advanced_search_backend.py +0 -0
  66. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/backends/secrets_backend.py +0 -0
  67. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/binding_config.py +0 -0
  68. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/__init__.py +0 -0
  69. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/audit.py +0 -0
  70. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/belongs_to.py +0 -0
  71. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/boolean.py +0 -0
  72. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/category_tree.py +0 -0
  73. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/column.py +0 -0
  74. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/created.py +0 -0
  75. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/created_by_ip.py +0 -0
  76. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/created_by_user_agent.py +0 -0
  77. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/datetime.py +0 -0
  78. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/email.py +0 -0
  79. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/float.py +0 -0
  80. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/has_many.py +0 -0
  81. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/integer.py +0 -0
  82. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/json.py +0 -0
  83. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/many_to_many.py +0 -0
  84. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/many_to_many_with_data.py +0 -0
  85. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/select.py +0 -0
  86. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/string.py +0 -0
  87. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/updated.py +0 -0
  88. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/column_types/uuid.py +0 -0
  89. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/columns.py +0 -0
  90. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/condition_parser.py +0 -0
  91. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/__init__.py +0 -0
  92. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/bash.py +0 -0
  93. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/build_context.py +0 -0
  94. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/cli.py +0 -0
  95. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/context.py +0 -0
  96. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/convert_to_application.py +0 -0
  97. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/extract_handler.py +0 -0
  98. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/test.py +0 -0
  99. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/contexts/wsgi.py +0 -0
  100. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/__init__.py +0 -0
  101. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/auth0_jwks.py +0 -0
  102. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/authorization.py +0 -0
  103. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/binding_classes.py +0 -0
  104. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/binding_modules.py +0 -0
  105. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/bindings.py +0 -0
  106. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/create.py +0 -0
  107. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/delete.py +0 -0
  108. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/docs.py +0 -0
  109. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/get.py +0 -0
  110. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/jwks.py +0 -0
  111. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/merge.py +0 -0
  112. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/patch.py +0 -0
  113. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/post.py +0 -0
  114. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/public.py +0 -0
  115. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/response_headers.py +0 -0
  116. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/return_raw_response.py +0 -0
  117. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/schema.py +0 -0
  118. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/secret_bearer.py +0 -0
  119. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/decorators/security_headers.py +0 -0
  120. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/__init__.py +0 -0
  121. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/additional_config.py +0 -0
  122. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/additional_config_auto_import.py +0 -0
  123. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/di.py +0 -0
  124. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/standard_dependencies.py +0 -0
  125. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/test_module/__init__.py +0 -0
  126. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
  127. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/di/test_module/module_class.py +0 -0
  128. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/environment.py +0 -0
  129. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/functional/__init__.py +0 -0
  130. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/functional/string.py +0 -0
  131. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/functional/validations.py +0 -0
  132. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/__init__.py +0 -0
  133. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/advanced_search.py +0 -0
  134. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/callable.py +0 -0
  135. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/create.py +0 -0
  136. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/crud_by_method.py +0 -0
  137. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/database_connector.py +0 -0
  138. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/delete.py +0 -0
  139. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/__init__.py +0 -0
  140. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/authentication.py +0 -0
  141. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/authorization.py +0 -0
  142. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/client_error.py +0 -0
  143. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/input_error.py +0 -0
  144. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/exceptions/not_found.py +0 -0
  145. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/get.py +0 -0
  146. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/health_check.py +0 -0
  147. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/input_processing.py +0 -0
  148. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/list.py +0 -0
  149. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/mygrations.py +0 -0
  150. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/request_method_routing.py +0 -0
  151. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/restful_api.py +0 -0
  152. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/schema_helper.py +0 -0
  153. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/simple_routing.py +0 -0
  154. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/simple_search.py +0 -0
  155. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/handlers/write.py +0 -0
  156. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/__init__.py +0 -0
  157. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/cli.py +0 -0
  158. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
  159. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
  160. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
  161. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/input_output.py +0 -0
  162. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_outputs/wsgi.py +0 -0
  163. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/__init__.py +0 -0
  164. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/maximum_length.py +0 -0
  165. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/minimum_length.py +0 -0
  166. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/required.py +0 -0
  167. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/requirement.py +0 -0
  168. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/input_requirements/unique.py +0 -0
  169. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/mocks/__init__.py +0 -0
  170. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/mocks/input_output.py +0 -0
  171. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/mocks/models.py +0 -0
  172. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/models.py +0 -0
  173. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/__init__.py +0 -0
  174. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
  175. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
  176. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
  177. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/akeyless.py +0 -0
  178. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/exceptions/__init__.py +0 -0
  179. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/exceptions/not_found.py +0 -0
  180. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/secrets/secrets.py +0 -0
  181. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/__init__.py +0 -0
  182. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/base.py +0 -0
  183. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/cache_control.py +0 -0
  184. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/cors.py +0 -0
  185. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/csp.py +0 -0
  186. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/hsts.py +0 -0
  187. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/x_content_type_options.py +0 -0
  188. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/security_headers/x_frame_options.py +0 -0
  189. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/tests/__init__.py +0 -0
  190. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/tests/simple_api/__init__.py +0 -0
  191. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/tests/simple_api/models/__init__.py +0 -0
  192. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/tests/simple_api/models/status.py +0 -0
  193. {clear_skies-1.18.6 → clear_skies-1.18.8}/src/clearskies/tests/simple_api/models/user.py +0 -0
  194. {clear_skies-1.18.6 → clear_skies-1.18.8}/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.18.6
3
+ Version: 1.18.8
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.18.6"
5
+ version = "1.18.8"
6
6
  description = "A framework for building backends in the cloud"
7
7
  authors = [
8
8
  "Conor Mancone <cmancone@gmail.com>",
@@ -0,0 +1,26 @@
1
+ from .string import String
2
+
3
+
4
+ class CreatedByAuthorizationData(String):
5
+ required_configs = [
6
+ "authorization_data_key_name",
7
+ ]
8
+
9
+ def __init__(self, di):
10
+ super().__init__(di)
11
+
12
+ @property
13
+ def is_writeable(self):
14
+ return False
15
+
16
+ def pre_save(self, data, model):
17
+ if model.exists:
18
+ return data
19
+
20
+ authorization_data = self.di.build("input_output", cache=True).get_authorization_data()
21
+ # data comes last so that it can override the info in the authorization data. This seems counter-intuitive,
22
+ # but is important. You would think that you *don't* want the data from the authorization data to be
23
+ # overridden (since this is mainly used for logging), but the trouble is that there are a variety of use-cases
24
+ # where the application must provide the audit data. Examples include registration and login. In these
25
+ # cases, authorization data will be empty, and must be provided by the applicaiton.
26
+ return {self.name: authorization_data.get(self.config("authorization_data_key_name"), "N/A"), **data}
@@ -48,7 +48,7 @@ class Base(ABC):
48
48
  raise KeyError(f"Attempt to set unknown configuration setting '{key}' for handler '{class_name}'")
49
49
 
50
50
  self._check_configuration(configuration)
51
- self._configuration = self._finalize_configuration(self.apply_default_configuation(configuration))
51
+ self._configuration = self._finalize_configuration(self.apply_default_configuration(configuration))
52
52
 
53
53
  def _check_configuration(self, configuration):
54
54
  if not "authentication" in configuration:
@@ -113,7 +113,7 @@ class Base(ABC):
113
113
  f"Configuration error for handler '{self.__class__.__name__}': if provided, base_url must be a string"
114
114
  )
115
115
 
116
- def apply_default_configuation(self, configuration):
116
+ def apply_default_configuration(self, configuration):
117
117
  return {
118
118
  **self._global_configuration_defaults,
119
119
  **self._configuration_defaults,
@@ -56,7 +56,7 @@ class Routing(Base):
56
56
  raise KeyError(f"Attempt to set unknown configuration setting '{key}' for handler '{class_name}'")
57
57
 
58
58
  self._check_configuration(configuration)
59
- self._configuration = self._finalize_configuration(self.apply_default_configuation(configuration))
59
+ self._configuration = self._finalize_configuration(self.apply_default_configuration(configuration))
60
60
 
61
61
  def _check_configuration(self, configuration):
62
62
  super()._check_configuration(configuration)
@@ -1,9 +1,13 @@
1
+ import logging
1
2
  import urllib.parse
2
3
  import re
4
+ import json
3
5
  from ..autodoc.request import URLPath
4
6
  from ..autodoc.schema import String
5
7
  from . import simple_routing
6
8
 
9
+ logger = logging.getLogger(__name__)
10
+
7
11
 
8
12
  class SimpleRoutingRoute:
9
13
  _di = None
@@ -91,26 +95,45 @@ class SimpleRoutingRoute:
91
95
  to understand if there was no route match at all.
92
96
  """
93
97
  # if we're routing to a simple router then defer to it
98
+ incoming = f"Incoming request: [{request_method}] {full_path}. Check against route with url '{self._path}' "
99
+ if not self._methods:
100
+ incoming += " configured for any method except OPTIONS"
101
+ elif isinstance(self._methods, str):
102
+ incoming += f" with method '{self._methods}'"
103
+ else:
104
+ incoming += " with any of the following methods: " + ", ".join(self._methods)
94
105
  if self._routes_to_simple_routing:
95
106
  return self._handler.can_handle(full_path, request_method, is_cors=is_cors)
96
107
  # If we're routing for CORS then ignore the request method (since it won't match)
97
108
  if not is_cors and self._methods is not None and request_method not in self._methods:
109
+ logger.debug(
110
+ f"{incoming} Skipped because this route is not specifically configured for CORS, and this is an OPTIONS request."
111
+ )
98
112
  return None
99
113
  if self._resource_paths:
100
- return self._resource_path_match(full_path, self._path_parts, self._resource_paths)
114
+ results = self._resource_path_match(full_path, self._path_parts, self._resource_paths)
115
+ if not results:
116
+ logger.debug(f"{incoming} Not a match.")
117
+ else:
118
+ logger.debug(f"{incoming} Matched and extracted route data: " + json.dumps(results))
119
+ return results
101
120
  if self._path is not None:
102
121
  full_path = full_path.strip("/")
103
122
  my_path = self._path.strip("/")
104
123
  my_path_length = len(my_path)
105
124
  full_path_length = len(full_path)
106
125
  if my_path_length > full_path_length:
126
+ logger.debug(f"{incoming} Not a match. I'm too long to bother checking.")
107
127
  return None
108
128
  if full_path[:my_path_length] != my_path:
129
+ logger.debug(f"{incoming} Not a match. Our prefixes just don't match.")
109
130
  return None
110
131
  # make sure we don't get confused by partial matches. `user` should match `user/` and `user/5`,
111
132
  # but it shouldn't match `users/`
112
133
  if full_path_length > my_path_length and full_path[my_path_length] != "/":
134
+ logger.debug(f"{incoming} Not a match. I only partially matched the URL but not as a sub-directory.")
113
135
  return None
136
+ logger.debug(f"{incoming} Match!")
114
137
  return {}
115
138
 
116
139
  def _resource_path_match(self, requested_path, path_parts, resource_paths):
@@ -12,6 +12,7 @@ class Update(Write):
12
12
  "model": None,
13
13
  "model_class": None,
14
14
  "columns": None,
15
+ "column_overrides": None,
15
16
  "writeable_columns": None,
16
17
  "readable_columns": None,
17
18
  "where": [],
@@ -19,15 +20,19 @@ class Update(Write):
19
20
  "include_id_in_path": False,
20
21
  }
21
22
 
22
- def handle(self, input_output):
23
- input_data = self.request_data(input_output)
23
+ def get_model_id(self, input_output, input_data):
24
24
  routing_data = input_output.routing_data()
25
25
  if self.id_column_name in routing_data:
26
- model_id = routing_data[self.id_column_name]
27
- elif "id" in routing_data:
28
- model_id = routing_data["id"]
29
- else:
30
- raise ValueError("I didn't receive the ID in my routing data. I am probably misconfigured.")
26
+ return routing_data[self.id_column_name]
27
+ if "id" in routing_data:
28
+ return routing_data["id"]
29
+ raise ValueError("I didn't receive the ID in my routing data. I am probably misconfigured.")
30
+
31
+ def handle(self, input_output):
32
+ input_data = self.request_data(input_output)
33
+ model_id = self.get_model_id(input_output, input_data)
34
+ if not model_id:
35
+ return self.error(input_output, "Not Found", 404)
31
36
  id_column_name = self.id_column_name
32
37
  models = self._model.where(f"{id_column_name}={model_id}")
33
38
  for where in self.configuration("where"):
@@ -42,6 +47,7 @@ class Update(Write):
42
47
  input_output.routing_data(),
43
48
  input_output.get_authorization_data(),
44
49
  input_output,
50
+ overrides=self.configuration("column_overrides"),
45
51
  )
46
52
  authorization = self._configuration.get("authorization", None)
47
53
  if authorization and hasattr(authorization, "filter_models"):
@@ -58,7 +64,7 @@ class Update(Write):
58
64
  }
59
65
  if input_errors:
60
66
  raise InputError(input_errors)
61
- model.save(input_data, columns=self._columns)
67
+ model.save(input_data, columns=self._get_writeable_columns())
62
68
 
63
69
  return self.success(input_output, self._model_as_json(model, input_output))
64
70
 
@@ -130,24 +130,26 @@ class Model(Models):
130
130
  """
131
131
  if not len(data):
132
132
  raise ValueError("You have to pass in something to save!")
133
- if columns is None:
134
- columns = self.columns()
133
+ save_columns = self.columns()
134
+ if columns is not None:
135
+ for column in columns.values():
136
+ save_columns[column.name] = column
135
137
 
136
138
  old_data = self.data
137
- data = self.columns_pre_save(data, columns)
139
+ data = self.columns_pre_save(data, save_columns)
138
140
  data = self.pre_save(data)
139
141
  if data is None:
140
142
  raise ValueError("pre_save forgot to return the data array!")
141
143
 
142
- to_save = self.columns_to_backend(data, columns)
143
- to_save = self.to_backend(to_save, columns)
144
+ to_save = self.columns_to_backend(data, save_columns)
145
+ to_save = self.to_backend(to_save, save_columns)
144
146
  if self.exists:
145
147
  new_data = self._backend.update(self._data[self.id_column_name], to_save, self)
146
148
  else:
147
149
  new_data = self._backend.create(to_save, self)
148
- id = self._backend.column_from_backend(columns[self.id_column_name], new_data[self.id_column_name])
150
+ id = self._backend.column_from_backend(save_columns[self.id_column_name], new_data[self.id_column_name])
149
151
 
150
- data = self.columns_post_save(data, id, columns)
152
+ data = self.columns_post_save(data, id, save_columns)
151
153
  self.post_save(data, id)
152
154
 
153
155
  self.data = new_data
@@ -155,7 +157,7 @@ class Model(Models):
155
157
  self._previous_data = old_data
156
158
  self._touched_columns = list(data.keys())
157
159
 
158
- self.columns_save_finished(columns)
160
+ self.columns_save_finished(save_columns)
159
161
  self.save_finished()
160
162
 
161
163
  return True
@@ -332,10 +334,10 @@ class Model(Models):
332
334
  """
333
335
  pass
334
336
 
335
- def where_for_request(self, models, routing_data, authorization_data, input_output):
337
+ def where_for_request(self, models, routing_data, authorization_data, input_output, overrides=None):
336
338
  """
337
339
  A hook to automatically apply filtering whenever the model makes an appearance in a get/update/list/search handler.
338
340
  """
339
- for column in self.columns().values():
341
+ for column in self.columns(overrides=overrides).values():
340
342
  models = column.where_for_request(models, routing_data, authorization_data, input_output)
341
343
  return models
@@ -1,21 +0,0 @@
1
- from .string import String
2
-
3
-
4
- class CreatedByAuthorizationData(String):
5
- required_configs = [
6
- "authorization_data_key_name",
7
- ]
8
-
9
- def __init__(self, di):
10
- super().__init__(di)
11
-
12
- @property
13
- def is_writeable(self):
14
- return False
15
-
16
- def pre_save(self, data, model):
17
- if model.exists:
18
- return data
19
-
20
- authorization_data = self.di.build("input_output", cache=True).get_authorization_data()
21
- return {**data, self.name: authorization_data.get(self.config("authorization_data_key_name"), "N/A")}
File without changes
File without changes