clear-skies 2.0.5__py3-none-any.whl → 2.0.7__py3-none-any.whl

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 (252) hide show
  1. {clear_skies-2.0.5.dist-info → clear_skies-2.0.7.dist-info}/METADATA +1 -1
  2. clear_skies-2.0.7.dist-info/RECORD +251 -0
  3. clearskies/__init__.py +61 -0
  4. clearskies/action.py +7 -0
  5. clearskies/authentication/__init__.py +15 -0
  6. clearskies/authentication/authentication.py +46 -0
  7. clearskies/authentication/authorization.py +16 -0
  8. clearskies/authentication/authorization_pass_through.py +20 -0
  9. clearskies/authentication/jwks.py +163 -0
  10. clearskies/authentication/public.py +5 -0
  11. clearskies/authentication/secret_bearer.py +553 -0
  12. clearskies/autodoc/__init__.py +8 -0
  13. clearskies/autodoc/formats/__init__.py +5 -0
  14. clearskies/autodoc/formats/oai3_json/__init__.py +7 -0
  15. clearskies/autodoc/formats/oai3_json/oai3_json.py +87 -0
  16. clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +15 -0
  17. clearskies/autodoc/formats/oai3_json/parameter.py +35 -0
  18. clearskies/autodoc/formats/oai3_json/request.py +68 -0
  19. clearskies/autodoc/formats/oai3_json/response.py +28 -0
  20. clearskies/autodoc/formats/oai3_json/schema/__init__.py +11 -0
  21. clearskies/autodoc/formats/oai3_json/schema/array.py +9 -0
  22. clearskies/autodoc/formats/oai3_json/schema/default.py +13 -0
  23. clearskies/autodoc/formats/oai3_json/schema/enum.py +7 -0
  24. clearskies/autodoc/formats/oai3_json/schema/object.py +35 -0
  25. clearskies/autodoc/formats/oai3_json/test.json +1985 -0
  26. clearskies/autodoc/py.typed +0 -0
  27. clearskies/autodoc/request/__init__.py +15 -0
  28. clearskies/autodoc/request/header.py +6 -0
  29. clearskies/autodoc/request/json_body.py +6 -0
  30. clearskies/autodoc/request/parameter.py +8 -0
  31. clearskies/autodoc/request/request.py +47 -0
  32. clearskies/autodoc/request/url_parameter.py +6 -0
  33. clearskies/autodoc/request/url_path.py +6 -0
  34. clearskies/autodoc/response/__init__.py +5 -0
  35. clearskies/autodoc/response/response.py +9 -0
  36. clearskies/autodoc/schema/__init__.py +31 -0
  37. clearskies/autodoc/schema/array.py +10 -0
  38. clearskies/autodoc/schema/base64.py +8 -0
  39. clearskies/autodoc/schema/boolean.py +5 -0
  40. clearskies/autodoc/schema/date.py +5 -0
  41. clearskies/autodoc/schema/datetime.py +5 -0
  42. clearskies/autodoc/schema/double.py +5 -0
  43. clearskies/autodoc/schema/enum.py +17 -0
  44. clearskies/autodoc/schema/integer.py +6 -0
  45. clearskies/autodoc/schema/long.py +5 -0
  46. clearskies/autodoc/schema/number.py +6 -0
  47. clearskies/autodoc/schema/object.py +13 -0
  48. clearskies/autodoc/schema/password.py +5 -0
  49. clearskies/autodoc/schema/schema.py +11 -0
  50. clearskies/autodoc/schema/string.py +5 -0
  51. clearskies/backends/__init__.py +65 -0
  52. clearskies/backends/api_backend.py +1178 -0
  53. clearskies/backends/backend.py +136 -0
  54. clearskies/backends/cursor_backend.py +335 -0
  55. clearskies/backends/memory_backend.py +797 -0
  56. clearskies/backends/secrets_backend.py +106 -0
  57. clearskies/column.py +1233 -0
  58. clearskies/columns/__init__.py +71 -0
  59. clearskies/columns/audit.py +206 -0
  60. clearskies/columns/belongs_to_id.py +483 -0
  61. clearskies/columns/belongs_to_model.py +132 -0
  62. clearskies/columns/belongs_to_self.py +105 -0
  63. clearskies/columns/boolean.py +113 -0
  64. clearskies/columns/category_tree.py +275 -0
  65. clearskies/columns/category_tree_ancestors.py +51 -0
  66. clearskies/columns/category_tree_children.py +127 -0
  67. clearskies/columns/category_tree_descendants.py +48 -0
  68. clearskies/columns/created.py +95 -0
  69. clearskies/columns/created_by_authorization_data.py +116 -0
  70. clearskies/columns/created_by_header.py +99 -0
  71. clearskies/columns/created_by_ip.py +92 -0
  72. clearskies/columns/created_by_routing_data.py +97 -0
  73. clearskies/columns/created_by_user_agent.py +92 -0
  74. clearskies/columns/date.py +234 -0
  75. clearskies/columns/datetime.py +282 -0
  76. clearskies/columns/email.py +76 -0
  77. clearskies/columns/float.py +153 -0
  78. clearskies/columns/has_many.py +505 -0
  79. clearskies/columns/has_many_self.py +56 -0
  80. clearskies/columns/has_one.py +14 -0
  81. clearskies/columns/integer.py +160 -0
  82. clearskies/columns/json.py +128 -0
  83. clearskies/columns/many_to_many_ids.py +337 -0
  84. clearskies/columns/many_to_many_ids_with_data.py +274 -0
  85. clearskies/columns/many_to_many_models.py +158 -0
  86. clearskies/columns/many_to_many_pivots.py +134 -0
  87. clearskies/columns/phone.py +159 -0
  88. clearskies/columns/select.py +92 -0
  89. clearskies/columns/string.py +102 -0
  90. clearskies/columns/timestamp.py +164 -0
  91. clearskies/columns/updated.py +110 -0
  92. clearskies/columns/uuid.py +86 -0
  93. clearskies/configs/README.md +105 -0
  94. clearskies/configs/__init__.py +162 -0
  95. clearskies/configs/actions.py +43 -0
  96. clearskies/configs/any.py +13 -0
  97. clearskies/configs/any_dict.py +22 -0
  98. clearskies/configs/any_dict_or_callable.py +23 -0
  99. clearskies/configs/authentication.py +23 -0
  100. clearskies/configs/authorization.py +23 -0
  101. clearskies/configs/boolean.py +16 -0
  102. clearskies/configs/boolean_or_callable.py +18 -0
  103. clearskies/configs/callable_config.py +18 -0
  104. clearskies/configs/columns.py +34 -0
  105. clearskies/configs/conditions.py +30 -0
  106. clearskies/configs/config.py +24 -0
  107. clearskies/configs/datetime.py +18 -0
  108. clearskies/configs/datetime_or_callable.py +19 -0
  109. clearskies/configs/endpoint.py +23 -0
  110. clearskies/configs/endpoint_list.py +29 -0
  111. clearskies/configs/float.py +16 -0
  112. clearskies/configs/float_or_callable.py +18 -0
  113. clearskies/configs/integer.py +16 -0
  114. clearskies/configs/integer_or_callable.py +18 -0
  115. clearskies/configs/joins.py +30 -0
  116. clearskies/configs/list_any_dict.py +30 -0
  117. clearskies/configs/list_any_dict_or_callable.py +31 -0
  118. clearskies/configs/model_class.py +35 -0
  119. clearskies/configs/model_column.py +65 -0
  120. clearskies/configs/model_columns.py +56 -0
  121. clearskies/configs/model_destination_name.py +25 -0
  122. clearskies/configs/model_to_id_column.py +43 -0
  123. clearskies/configs/readable_model_column.py +9 -0
  124. clearskies/configs/readable_model_columns.py +9 -0
  125. clearskies/configs/schema.py +23 -0
  126. clearskies/configs/searchable_model_columns.py +9 -0
  127. clearskies/configs/security_headers.py +39 -0
  128. clearskies/configs/select.py +26 -0
  129. clearskies/configs/select_list.py +47 -0
  130. clearskies/configs/string.py +29 -0
  131. clearskies/configs/string_dict.py +32 -0
  132. clearskies/configs/string_list.py +32 -0
  133. clearskies/configs/string_list_or_callable.py +35 -0
  134. clearskies/configs/string_or_callable.py +18 -0
  135. clearskies/configs/timedelta.py +18 -0
  136. clearskies/configs/timezone.py +18 -0
  137. clearskies/configs/url.py +23 -0
  138. clearskies/configs/validators.py +45 -0
  139. clearskies/configs/writeable_model_column.py +9 -0
  140. clearskies/configs/writeable_model_columns.py +9 -0
  141. clearskies/configurable.py +76 -0
  142. clearskies/contexts/__init__.py +11 -0
  143. clearskies/contexts/cli.py +117 -0
  144. clearskies/contexts/context.py +98 -0
  145. clearskies/contexts/wsgi.py +76 -0
  146. clearskies/contexts/wsgi_ref.py +82 -0
  147. clearskies/decorators.py +33 -0
  148. clearskies/di/__init__.py +15 -0
  149. clearskies/di/additional_config.py +130 -0
  150. clearskies/di/additional_config_auto_import.py +17 -0
  151. clearskies/di/di.py +973 -0
  152. clearskies/di/inject/__init__.py +23 -0
  153. clearskies/di/inject/by_class.py +21 -0
  154. clearskies/di/inject/by_name.py +18 -0
  155. clearskies/di/inject/di.py +13 -0
  156. clearskies/di/inject/environment.py +14 -0
  157. clearskies/di/inject/input_output.py +20 -0
  158. clearskies/di/inject/now.py +13 -0
  159. clearskies/di/inject/requests.py +13 -0
  160. clearskies/di/inject/secrets.py +14 -0
  161. clearskies/di/inject/utcnow.py +13 -0
  162. clearskies/di/inject/uuid.py +15 -0
  163. clearskies/di/injectable.py +29 -0
  164. clearskies/di/injectable_properties.py +131 -0
  165. clearskies/di/test_module/__init__.py +6 -0
  166. clearskies/di/test_module/another_module/__init__.py +2 -0
  167. clearskies/di/test_module/module_class.py +5 -0
  168. clearskies/end.py +183 -0
  169. clearskies/endpoint.py +1314 -0
  170. clearskies/endpoint_group.py +336 -0
  171. clearskies/endpoints/__init__.py +25 -0
  172. clearskies/endpoints/advanced_search.py +526 -0
  173. clearskies/endpoints/callable.py +388 -0
  174. clearskies/endpoints/create.py +205 -0
  175. clearskies/endpoints/delete.py +139 -0
  176. clearskies/endpoints/get.py +271 -0
  177. clearskies/endpoints/health_check.py +183 -0
  178. clearskies/endpoints/list.py +574 -0
  179. clearskies/endpoints/restful_api.py +427 -0
  180. clearskies/endpoints/schema.py +189 -0
  181. clearskies/endpoints/simple_search.py +286 -0
  182. clearskies/endpoints/update.py +193 -0
  183. clearskies/environment.py +104 -0
  184. clearskies/exceptions/__init__.py +19 -0
  185. clearskies/exceptions/authentication.py +2 -0
  186. clearskies/exceptions/authorization.py +2 -0
  187. clearskies/exceptions/client_error.py +2 -0
  188. clearskies/exceptions/input_errors.py +4 -0
  189. clearskies/exceptions/missing_dependency.py +2 -0
  190. clearskies/exceptions/moved_permanently.py +3 -0
  191. clearskies/exceptions/moved_temporarily.py +3 -0
  192. clearskies/exceptions/not_found.py +2 -0
  193. clearskies/functional/__init__.py +7 -0
  194. clearskies/functional/routing.py +92 -0
  195. clearskies/functional/string.py +112 -0
  196. clearskies/functional/validations.py +76 -0
  197. clearskies/input_outputs/__init__.py +13 -0
  198. clearskies/input_outputs/cli.py +171 -0
  199. clearskies/input_outputs/exceptions/__init__.py +2 -0
  200. clearskies/input_outputs/exceptions/cli_input_error.py +2 -0
  201. clearskies/input_outputs/exceptions/cli_not_found.py +2 -0
  202. clearskies/input_outputs/headers.py +45 -0
  203. clearskies/input_outputs/input_output.py +138 -0
  204. clearskies/input_outputs/programmatic.py +69 -0
  205. clearskies/input_outputs/py.typed +0 -0
  206. clearskies/input_outputs/wsgi.py +77 -0
  207. clearskies/model.py +1922 -0
  208. clearskies/py.typed +0 -0
  209. clearskies/query/__init__.py +12 -0
  210. clearskies/query/condition.py +223 -0
  211. clearskies/query/join.py +136 -0
  212. clearskies/query/query.py +196 -0
  213. clearskies/query/sort.py +27 -0
  214. clearskies/schema.py +82 -0
  215. clearskies/secrets/__init__.py +6 -0
  216. clearskies/secrets/additional_configs/__init__.py +32 -0
  217. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +61 -0
  218. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +160 -0
  219. clearskies/secrets/akeyless.py +182 -0
  220. clearskies/secrets/exceptions/__init__.py +1 -0
  221. clearskies/secrets/exceptions/not_found.py +2 -0
  222. clearskies/secrets/secrets.py +38 -0
  223. clearskies/security_header.py +15 -0
  224. clearskies/security_headers/__init__.py +11 -0
  225. clearskies/security_headers/cache_control.py +67 -0
  226. clearskies/security_headers/cors.py +50 -0
  227. clearskies/security_headers/csp.py +94 -0
  228. clearskies/security_headers/hsts.py +22 -0
  229. clearskies/security_headers/x_content_type_options.py +0 -0
  230. clearskies/security_headers/x_frame_options.py +0 -0
  231. clearskies/test_base.py +8 -0
  232. clearskies/typing.py +11 -0
  233. clearskies/validator.py +37 -0
  234. clearskies/validators/__init__.py +33 -0
  235. clearskies/validators/after_column.py +62 -0
  236. clearskies/validators/before_column.py +13 -0
  237. clearskies/validators/in_the_future.py +32 -0
  238. clearskies/validators/in_the_future_at_least.py +11 -0
  239. clearskies/validators/in_the_future_at_most.py +10 -0
  240. clearskies/validators/in_the_past.py +32 -0
  241. clearskies/validators/in_the_past_at_least.py +10 -0
  242. clearskies/validators/in_the_past_at_most.py +10 -0
  243. clearskies/validators/maximum_length.py +26 -0
  244. clearskies/validators/maximum_value.py +29 -0
  245. clearskies/validators/minimum_length.py +26 -0
  246. clearskies/validators/minimum_value.py +29 -0
  247. clearskies/validators/required.py +34 -0
  248. clearskies/validators/timedelta.py +59 -0
  249. clearskies/validators/unique.py +30 -0
  250. clear_skies-2.0.5.dist-info/RECORD +0 -4
  251. {clear_skies-2.0.5.dist-info → clear_skies-2.0.7.dist-info}/WHEEL +0 -0
  252. {clear_skies-2.0.5.dist-info → clear_skies-2.0.7.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clear-skies
3
- Version: 2.0.5
3
+ Version: 2.0.7
4
4
  Summary: A framework for building backends in the cloud
5
5
  Project-URL: Documentation, https://clearskies.io/
6
6
  Project-URL: Repository, https://github.com/clearskies-py/clearskies
@@ -0,0 +1,251 @@
1
+ clearskies/__init__.py,sha256=pvReM1OEkMlXGPR56eNUq1DDantH9ds9szCXI9O-wOQ,1123
2
+ clearskies/action.py,sha256=x_T05XaC0m-BYPZWaSR94XbE7T5ZK1vRtSfEszfZuDg,121
3
+ clearskies/column.py,sha256=_VkvfD_6d4brTkChUbevJe9e7sla8ovsiJ5cH1evoH4,52070
4
+ clearskies/configurable.py,sha256=FFkKwlQk17KOLnZiTsTF3hrCu2WxRSuuddNNhz9aySY,3049
5
+ clearskies/decorators.py,sha256=I91l4Iwe2swzkZPWUWywmIV2LfTBlw9IWmUfspKm3yY,1040
6
+ clearskies/end.py,sha256=Z4C9n7OvBky_640oJ8d19jIr_ap1iqjGJqqO6s_zF5g,8919
7
+ clearskies/endpoint.py,sha256=6ihZzygVvGnBkl7IExoLbiiEPza15ULsFVtgFimZDUQ,49062
8
+ clearskies/endpoint_group.py,sha256=bKnw6d6AHBGqz7jrD56gSxDgwFwtHNOPpjnP0julohM,12528
9
+ clearskies/environment.py,sha256=LV7XztYYUZhaL8zWXi2EC-u6DLrCPxJTeUzmCy7p-ZA,3703
10
+ clearskies/model.py,sha256=6ZJoWNKzjsQFvgXEaXybrO0HaaknoSkKYNYO_i0Ep0k,77189
11
+ clearskies/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ clearskies/schema.py,sha256=9S0RuFBiydsDy4kATy2BBsXJ9aWHILW0ja_q9F4kxb0,2872
13
+ clearskies/security_header.py,sha256=suV3PMGFFJzMIsfDiT4t1sArkLVGzepyoftY0ddBWkM,431
14
+ clearskies/test_base.py,sha256=Nw6qwsPMOx-QT_6wXn6f9P4BcA7OeGrs83IC2naNMYY,205
15
+ clearskies/typing.py,sha256=Kme9es5c_lw4qQCbCL7lKXtDemVl0_qBy7jxKIu4yyg,378
16
+ clearskies/validator.py,sha256=nGFwe74LMJnEO7r2mgwd_V25bLpxUDH7IMolm-zk-3w,1332
17
+ clearskies/authentication/__init__.py,sha256=MxXNCWhKbha7TPu_MAyssfTdOCEDSNBwzshEHx8gfHo,525
18
+ clearskies/authentication/authentication.py,sha256=N-g2qNDGuJaSlMwc_SRwsjAuqOMLI2nKfUzSCF7HOFo,1240
19
+ clearskies/authentication/authorization.py,sha256=3XEOUlQx9XeRPpNEk4GCa-xWafrz-3Xd0T1PCSFuVxY,570
20
+ clearskies/authentication/authorization_pass_through.py,sha256=d3XKcUWmI_u9QBBTGKrU1hdD-LM56iH60Qv_xc8TE6k,512
21
+ clearskies/authentication/jwks.py,sha256=V_Kgcb0peoPRqEej-Ii1GiPF3qoed_ub0nuc_Rx8_EU,4860
22
+ clearskies/authentication/public.py,sha256=GSNl4X4fnB25BZoXSo8nqL0iZCa9rzfvPfIsJ2Y34B4,84
23
+ clearskies/authentication/secret_bearer.py,sha256=JoGBD2s7MubidFi1L0hyB_A4V3w5n1LKsokLiT44fBc,17590
24
+ clearskies/autodoc/__init__.py,sha256=JRUAmd0he8iGlgiZvxewLMIXJqnOFEdvlaKAtHpC2lo,124
25
+ clearskies/autodoc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ clearskies/autodoc/formats/__init__.py,sha256=3rhoLKmEwT6PljaHvOl9qdeMIXyD7PQBZbqZKy5Mb5I,56
27
+ clearskies/autodoc/formats/oai3_json/__init__.py,sha256=tbbOZWkX9ZWj4BM3arHrlmqy4ZrScmIv2bazadbQt1w,142
28
+ clearskies/autodoc/formats/oai3_json/oai3_json.py,sha256=-LViw86zpPAgAEnC42KuobccvFATRg-j8ZEd8BiTYFA,2964
29
+ clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py,sha256=5gifJ36dyWEeYtfjHVbbTpPBo0BB1Gqxt0Y3sxTiHJA,509
30
+ clearskies/autodoc/formats/oai3_json/parameter.py,sha256=h9bHXxqJhUc7NRQCZF6RnIPuaY9BA6V_xzYNnsplXlc,1110
31
+ clearskies/autodoc/formats/oai3_json/request.py,sha256=WHEWQvhuhkw82V4YS6GwDN4y8Qy7QDSn9awJEhwLmWU,2939
32
+ clearskies/autodoc/formats/oai3_json/response.py,sha256=ou06oFQtaAR70qIvIoAe4QzohWiACzhCwlW73oM5Dvg,778
33
+ clearskies/autodoc/formats/oai3_json/test.json,sha256=DdMvSUbaTEAyWtX_RDxEFR82kK9pCCTeFUghQwHjB3s,59848
34
+ clearskies/autodoc/formats/oai3_json/schema/__init__.py,sha256=VJiDueMdGfJoVQVt9SXIE_-uPghSXtCzpTXuqPaaiRw,173
35
+ clearskies/autodoc/formats/oai3_json/schema/array.py,sha256=1VOrMC_i1JSu1Gw2cqQ7uVDhSk-xNm25io7oBQL9PZM,310
36
+ clearskies/autodoc/formats/oai3_json/schema/default.py,sha256=BhwQebdIaK6rrATu6yZxPU3bqVmd4LFKTTlydJVl644,484
37
+ clearskies/autodoc/formats/oai3_json/schema/enum.py,sha256=7qkpYWXPwbkgkoHPAowMIHJeGNb81qQmTmIIdc5yJbA,265
38
+ clearskies/autodoc/formats/oai3_json/schema/object.py,sha256=HkLg3A6cTwV9h3QiXPpoVG7bH8U-aKFzp7nyGClGBgQ,1073
39
+ clearskies/autodoc/request/__init__.py,sha256=-L1hZ70QKn0yzXJtpQS741lbcYXA4i0xQnkebKDjzsA,303
40
+ clearskies/autodoc/request/header.py,sha256=TCeRyFFqcgNN8o9vEmc0JTxs7vRlMHnlhs7zsYfShRM,104
41
+ clearskies/autodoc/request/json_body.py,sha256=qURg3_4fQA9ZUVeR_T0g-RZ8seFIrI0ME-s4PzosfGE,108
42
+ clearskies/autodoc/request/parameter.py,sha256=Z7l7gdsOw-SSLYfL8kQmLnslg89JUQObppxatJiI2sA,233
43
+ clearskies/autodoc/request/request.py,sha256=k9876Pu27H3K-AXlmhOGPrc1W2L972_ugEExWiqW4aU,1814
44
+ clearskies/autodoc/request/url_parameter.py,sha256=mwM9Fe16h_8tdPXvXokjzOH1I2Txs-GFjK1a9FQND2w,117
45
+ clearskies/autodoc/request/url_path.py,sha256=WmZDltORzCir4Ei6_XqoBlh7UBpZZmvZIDfaQezGtmc,107
46
+ clearskies/autodoc/response/__init__.py,sha256=a0vlujvsyLkq1zleRTqcGULoaXTJLkjyTKCUWdsq8Uc,62
47
+ clearskies/autodoc/response/response.py,sha256=I3-wA1gd5XKYey_7gqBoWA-II4k6URop48NO3ckQoh4,266
48
+ clearskies/autodoc/schema/__init__.py,sha256=PF4jywX7Bk6rXaK0LxTQnxk1FLg2O3_Gdm3_XpN61nI,586
49
+ clearskies/autodoc/schema/array.py,sha256=hBLtH5v-o7-KtiFscoa-KAxW4Fcqv_5h542eS7yOo0o,262
50
+ clearskies/autodoc/schema/base64.py,sha256=IPISPbUVf02N_fqcxRMsaiBvFTXAznngZxlWSSyHh-w,190
51
+ clearskies/autodoc/schema/boolean.py,sha256=e6ofkyPcKZllMvSL96M3whjA-tWeT0m5AVotl61wIG8,74
52
+ clearskies/autodoc/schema/date.py,sha256=5IiLM2La1br1E3url6_6k54PYyw_3SyAvvKb1kNReSA,70
53
+ clearskies/autodoc/schema/datetime.py,sha256=WoIPfpVWvr4znQpkqTUT_R1jdnulEvXfOAI3al-AzFA,79
54
+ clearskies/autodoc/schema/double.py,sha256=Wyv9aiPRneeoYWHoYlvkkLUo4WaLnQdvg6ePkXL6k5I,74
55
+ clearskies/autodoc/schema/enum.py,sha256=YP6hPYXTlHWEIPyczPKtimm9luvTcLTT6YrKdGTwty0,413
56
+ clearskies/autodoc/schema/integer.py,sha256=AVqcNyJemzA0Cgg8OGPntDIGONcvOaPWeBVkyQ0ENcY,96
57
+ clearskies/autodoc/schema/long.py,sha256=NhRYUQhr1PZR2gI945RXzu9SfV_hQnTzlxrYCAZKOEo,74
58
+ clearskies/autodoc/schema/number.py,sha256=z6q7XPKW_rLZSv4nYMOcKYQJgXZlmBq9-zsK3kGmI5M,94
59
+ clearskies/autodoc/schema/object.py,sha256=sjW3A1yIGCseRcHHmVbkxNtsg6EPivVMSmmRyZjO_1w,346
60
+ clearskies/autodoc/schema/password.py,sha256=hSXPvHoXEbG-KHQFxXubEarxSMg9Cki_n8tw_yvEFp4,78
61
+ clearskies/autodoc/schema/schema.py,sha256=KZ4r88OUMzbeV4DQ3yUhK8bHS_zJiimsWPWc1rJVDZs,244
62
+ clearskies/autodoc/schema/string.py,sha256=GXRI-aU8PYmjfnhmfaOe4vq7JASb-aB4SiFeG-EmJY0,60
63
+ clearskies/backends/__init__.py,sha256=krBB3gHLP-lVYkm5ksdK7teEtouAHhL3EC__WGVnF4A,3157
64
+ clearskies/backends/api_backend.py,sha256=IOT4JqSxtKGqyBawg0TvE8rQJpHcHdQ8t0LDaLXfxow,54879
65
+ clearskies/backends/backend.py,sha256=xjQGzLtj4de7rVp1m_Aa_HdrHwQUdg-P_32Bb0y2tq0,5876
66
+ clearskies/backends/cursor_backend.py,sha256=lMnkHATU2Fxr0ihgrVnvI9IVnUPxNfjzpkdJIok2mXY,14360
67
+ clearskies/backends/memory_backend.py,sha256=fXgbFcTvbZeKHs4CsI_yNsofHSjWqZqY9QWI7uJzVws,34260
68
+ clearskies/backends/secrets_backend.py,sha256=r1k7YfZ7AKMsN2wWwx939QKeYWgh6PVkdiKayzPBDv0,4275
69
+ clearskies/columns/__init__.py,sha256=a__-1hv-aMV3RU0Sd-BEkfItSJaG51EF2VeRQoTdka8,1990
70
+ clearskies/columns/audit.py,sha256=0BBpBFsxz6JBWDPoyCb73EDJnN95pj1TXtTZqbT1qKU,7628
71
+ clearskies/columns/belongs_to_id.py,sha256=10yImEA5xgA547kPIfRajcNwlCfXF9QTvai0-fBFxG0,17828
72
+ clearskies/columns/belongs_to_model.py,sha256=b0eBBP6EoDEVOKP4ZZpdrD4BOadblTHzuH-KLWjOIrA,5807
73
+ clearskies/columns/belongs_to_self.py,sha256=TbcXmRp6_OAycElrnOqaIZK5aDDheTsRoGc1M8pbAm0,3762
74
+ clearskies/columns/boolean.py,sha256=CiYgMWvNdom8KDQk2Jt_kwWDtrLIyymrmLrP9zTYFTE,3938
75
+ clearskies/columns/category_tree.py,sha256=7z6tUi1YKaCH7GjcgaZ9rKXIX4aa0Dqfo6jmpWIxUvU,11114
76
+ clearskies/columns/category_tree_ancestors.py,sha256=FRFAMD3E6GzOzzLkY-IhWBdiYSpHHnthF5kX8V3iPr8,1380
77
+ clearskies/columns/category_tree_children.py,sha256=N9E_YUIGRKoLCCGRD58a8HELiKfgsk12VtEZ7D7MCio,5239
78
+ clearskies/columns/category_tree_descendants.py,sha256=qM3rgqmxpUkOcCz8b-xCsMDRxjrBpPKyQ_FLGG0ItUc,1234
79
+ clearskies/columns/created.py,sha256=SPQb2rj7H8tpmJUV9c3Q7QyEvWuAhOac5OYMhSuMVvg,2835
80
+ clearskies/columns/created_by_authorization_data.py,sha256=wYTcFUc3sE1T8vp6iPuB7FrEXCSQzEKXkh1ysDsgI3Q,4796
81
+ clearskies/columns/created_by_header.py,sha256=e1gkXljx_vx8ephl7haCjDQJGRyMeoSqlkGV5HYeVrE,3644
82
+ clearskies/columns/created_by_ip.py,sha256=S9Y0o4Ldv9VHSgZhcNRJO_SHzxLJxyPlR8r8wK1awvM,2783
83
+ clearskies/columns/created_by_routing_data.py,sha256=BoUuIQferx60dJlDr1RO57ww7oeNYhTee9dYKlZiGCU,3626
84
+ clearskies/columns/created_by_user_agent.py,sha256=1UzxSQkMtYNVWR3S7vNVIECTysvPofRYQQQMewWGuSI,2868
85
+ clearskies/columns/date.py,sha256=Ilyr_Ho4AA9He_FdooJ2gREJcGajXseFQLSw2H_EcEY,8826
86
+ clearskies/columns/datetime.py,sha256=vURADJYfxyiq0j0Lz5uZtE95t-544G0_uCkl9ppCEcw,10570
87
+ clearskies/columns/email.py,sha256=74es6fdA4MJQ9cm5WfEgEvqZgj5pdnFE96cKN1YQ4b0,1868
88
+ clearskies/columns/float.py,sha256=1XXxuncEAzqqqtCnshpnt-yp4vgI8WcelwSJ2imo4-8,4560
89
+ clearskies/columns/has_many.py,sha256=Frd1LQRiAyh0o2GVrJBlztuaAOAAF_7FzgDt0ZyuRPM,18642
90
+ clearskies/columns/has_many_self.py,sha256=9EG4A7i3W4atOsHPbEKIahoU0QgWohbRFIA29dBOSxg,2403
91
+ clearskies/columns/has_one.py,sha256=8cwfNmAFO1DdfBsZ1scpc3LwLoSUHWR_zPn4T-DN0Mg,396
92
+ clearskies/columns/integer.py,sha256=z4o0t13h7MC9vGxsr3fo0_TLHHSZB2uSqE_QDDUakt8,4650
93
+ clearskies/columns/json.py,sha256=oJc6UZcOCJAPrIwecYVQ69Mi7FvX8w9seYiBdk2YtTw,3723
94
+ clearskies/columns/many_to_many_ids.py,sha256=kkLfb14EKInkkV5xVM9sXTgf0PLmIQlDOJNRIRlzLCY,14265
95
+ clearskies/columns/many_to_many_ids_with_data.py,sha256=FhXPvAtHtBCne-bcwURQplm374t7tVLcEIicb40LpYg,12017
96
+ clearskies/columns/many_to_many_models.py,sha256=CMrkyja0FWXh5BwlZMLZ5ltl6I5Avpi3K78C3SOgV40,7345
97
+ clearskies/columns/many_to_many_pivots.py,sha256=ECG5GYOE_9mGGmXWHdsFMZF5IcLksPxTq8V33SHzL8M,5715
98
+ clearskies/columns/phone.py,sha256=msrCCha75bAVERQ3TD7dcR78PA2sx27IIPic9qE9BQ0,5219
99
+ clearskies/columns/select.py,sha256=0_0-Qw8vuJKLW6NV5w72FJPB_HP9bDQ0YR3eKfqqpQE,2751
100
+ clearskies/columns/string.py,sha256=0KoknprsC75UWqEXQ60t_CuPJv2vwszXpRWBhh8Hl_Y,2586
101
+ clearskies/columns/timestamp.py,sha256=8ZJhaM-RyiyPHy8ABJLWMRhCrnoA-3ZbterfwTj-e-w,5934
102
+ clearskies/columns/updated.py,sha256=XyhfcjyElX4HeOek4M_qUPuHQZ8IxeK1v130dx12hv0,3453
103
+ clearskies/columns/uuid.py,sha256=des-JoGJ5llYjM5xtnLYoEFRBJPmJkvA-hxBwQAiO4o,2404
104
+ clearskies/configs/README.md,sha256=4-r2FvkrBTrKkcKgJ5O3Qj1RZ7nnkknenKze4XYlQDs,4827
105
+ clearskies/configs/__init__.py,sha256=nfaevClmzwsTMYDH4R_6t2VRg4OoeInIocvclIQ-8kY,5079
106
+ clearskies/configs/actions.py,sha256=5OwrokU8uTSSQ_6SvL94SOP5JVkvRRFGAXNcCdMt8aQ,1388
107
+ clearskies/configs/any.py,sha256=_nac0cZY9uRhwGQZqj2N72ZFehYqOedb97lPADP3Yg8,352
108
+ clearskies/configs/any_dict.py,sha256=B8Gd0zwC-6UxvMvPsXMJySzVMADxG3oxnrhgBnJWCGo,871
109
+ clearskies/configs/any_dict_or_callable.py,sha256=cMUaiwcwJS2xv3InwV93icwahUaxoJCbtBwXDylIk-o,1051
110
+ clearskies/configs/authentication.py,sha256=9XZClfYcECi5dzt1BvDof34tW6IotN252bcxlc_u2fc,842
111
+ clearskies/configs/authorization.py,sha256=Pa6wCyMitpKv2Nde69tMB5sJsxeCI2nVSdTuwF6R9pQ,828
112
+ clearskies/configs/boolean.py,sha256=3uoxUmYIK5CAIZRtpcDy18AJ3MWljgUTyvzvSG3EU6I,588
113
+ clearskies/configs/boolean_or_callable.py,sha256=nvvWD_A5HoxW-6_rZJL23_1517T8IQ6Kbu4tNZh9R1E,709
114
+ clearskies/configs/callable_config.py,sha256=gcTlRwCppdaj1gFuCugc4ahxMCTEDKD_z_f85eadWpc,650
115
+ clearskies/configs/columns.py,sha256=WhdpPUiwVqwBO2XCDDiMym2nWr_1-L1JoICyob4T6Wo,1258
116
+ clearskies/configs/conditions.py,sha256=a09bVac4-10ZtKPQGSu_e9VnHnwITwy_7_T4NekXpgs,1008
117
+ clearskies/configs/config.py,sha256=Mw9wnPzEekHGfmNFH9f2vJ3BOPx3l1ktxwZc95flyQg,873
118
+ clearskies/configs/datetime.py,sha256=jRYXwLeTUqh8FNwWq_0yYoSH8YU9NEhYhuQScr56nTg,653
119
+ clearskies/configs/datetime_or_callable.py,sha256=81YCDk0g5cIxdXxgem1Ei6m7gUI213Cfryp3GyBfpD4,799
120
+ clearskies/configs/endpoint.py,sha256=NEDthtdPzejAot7yzUjC01PvQJR9BIyk5YnWXCi1w9I,759
121
+ clearskies/configs/endpoint_list.py,sha256=9xtXmZpdOh7uk9Sm3MF9xi1_N-n2DZ-F4s0zrNfEKng,1200
122
+ clearskies/configs/float.py,sha256=3870-DkoXCyeOSwUGa69BzhG4XI_tNfei5cX-q1b1UQ,585
123
+ clearskies/configs/float_or_callable.py,sha256=lIOg20Xw0AOB0k3I7f0b98srVgMWQKcyM4aWRT0tUI4,708
124
+ clearskies/configs/integer.py,sha256=d6uoQaUoE01rrWOsxYl1vHG_raUFmB0AUOgoCWwOVC0,584
125
+ clearskies/configs/integer_or_callable.py,sha256=IrVY2Ye57xTxuzOYZ0JY7s6nH6Iphsps32x1dNpcUbw,703
126
+ clearskies/configs/joins.py,sha256=i1QmxFwkpL-pnzVPh3mrHpwrvzsjt9nH5pMSj4J1TT4,944
127
+ clearskies/configs/list_any_dict.py,sha256=YLvlEbM3MrxcOLps5a8CCVl-5o82z4J2aIqKDB7VruU,1327
128
+ clearskies/configs/list_any_dict_or_callable.py,sha256=96mtN6DwkKCAmHlFDHRKnWIhODDu5PQ4O9RpE3wVWh0,1545
129
+ clearskies/configs/model_class.py,sha256=ks0hnB2mZFHjhR3-x51d8IJSLVBclNjD_GhBcNfIxZE,1170
130
+ clearskies/configs/model_column.py,sha256=asTgdSIv27rZQP6KKfvkyRxB4iNgRIExm2DplL95Ro0,2584
131
+ clearskies/configs/model_columns.py,sha256=Kxm1K9jV9ribQtQUMsdyZmKv9GbqLteX_VhEEc9PVzY,2467
132
+ clearskies/configs/model_destination_name.py,sha256=lgC6kDEPWH4cHbAF_N92IF7JdMwNzSkau0HmcyeQ7Ik,983
133
+ clearskies/configs/model_to_id_column.py,sha256=1ItXK4bpOV0putVbOmDcPMH9qz1LDiW1uCN2Z0Qf_co,1543
134
+ clearskies/configs/readable_model_column.py,sha256=SD3LzGkzLbODQILliJveGO-xQxPmOMOL-XX0ROCQ__g,316
135
+ clearskies/configs/readable_model_columns.py,sha256=bz-jwdwhSzs57Dp0ffrajPL0WWZfUXxbhA33zLQmkO8,320
136
+ clearskies/configs/schema.py,sha256=W7xK5EOvZbbi2H5CgT4iifefrR2-XJXBNNx4f8t7j7o,766
137
+ clearskies/configs/searchable_model_columns.py,sha256=SEpYLsaCuT4PJ01RbIeSxGIgVFfFjkvAk9jkDt1AsC8,326
138
+ clearskies/configs/security_headers.py,sha256=wNtoUsghhec-NNZl9dSIRxTTApYw2vukbslYI-YY968,1403
139
+ clearskies/configs/select.py,sha256=xhhgqZZ5fE379iRRuLhV4ouKWro50ODusgtFlU96Ze0,1021
140
+ clearskies/configs/select_list.py,sha256=upnGgw4rHLHlfeKoZps9vrtnzWJr9qN9TDbyu6lw7ps,1889
141
+ clearskies/configs/string.py,sha256=LSPMeh30ljWvC21jNDFmCsyOLMgg_Ip2sV1_fkUxEg4,1093
142
+ clearskies/configs/string_dict.py,sha256=XBK6p1MmzU0gux14Rtc1S9B9PLVcuybRjHxK--LCd3Q,1356
143
+ clearskies/configs/string_list.py,sha256=W33fZfetBvKmT2c1Hza7dtxv2b_xGbAPCQLuUXoM75s,1202
144
+ clearskies/configs/string_list_or_callable.py,sha256=9JycGdX9oUi7IGyY7j50ehTuM2RlQ429BO0NEM1x5eM,1455
145
+ clearskies/configs/string_or_callable.py,sha256=2Bg05AYN6j3v4ttFOmD-EBGfYpok67yiuFXnTTUhhNo,702
146
+ clearskies/configs/timedelta.py,sha256=KpuPDu1_ewEGT_JWCp_YQtKPgZesJClAmxHq047MOjY,667
147
+ clearskies/configs/timezone.py,sha256=FShZlSfCeRk7YkDREJpYC_B8mi-H1aC6Q2CZT659es8,683
148
+ clearskies/configs/url.py,sha256=dx02oiwt8ua5Kv30dJFE0ekJ6Zgz3lcPq9-UNIblI9s,775
149
+ clearskies/configs/validators.py,sha256=aAvf5dgncR8OP7_M7QUNhsHau4wAdPiXw9wNARRAYNY,1346
150
+ clearskies/configs/writeable_model_column.py,sha256=ZwroRcvmNznggtNMSZiAmKAvllcV9LDWZSB-J330Lxg,319
151
+ clearskies/configs/writeable_model_columns.py,sha256=D8E4aQRg1MX8-TM8lkyrWE-G_YoX2eerX4KLszgk0hA,323
152
+ clearskies/contexts/__init__.py,sha256=f7XVUq2UKlDH6fjmcUWk6lbe9p_OaGpZ5ZjM6CuwTGQ,247
153
+ clearskies/contexts/cli.py,sha256=Hzh8vgkLoCn2Zx8AQIoLen4fMDPIvZqtSLfEcg_CPKc,2639
154
+ clearskies/contexts/context.py,sha256=S1iqSfV2gPnXz20-8AJU9QWh6IKa56jEV11g99iZO-o,3663
155
+ clearskies/contexts/wsgi.py,sha256=rJCfBZhyvPyRduyY9-ctvoQMcQXwRqRGwldidiUQWBY,3111
156
+ clearskies/contexts/wsgi_ref.py,sha256=BnV2hhusu5Hkd1cFLGXEn7COWS23u1NH9BDgAWlgX_M,2747
157
+ clearskies/di/__init__.py,sha256=Ab8GNv9ZksnCABq8n2gCcyLEAXD-5-kX4O8PweTJIFs,474
158
+ clearskies/di/additional_config.py,sha256=65INxw8aqTZQsyaKPj-aQmd6FBe4_4DwibXGgWYBy14,5139
159
+ clearskies/di/additional_config_auto_import.py,sha256=XYw0Kcnp6hp-ee-c0YjiATwJvRb2E82xk9PuoX9dGRY,758
160
+ clearskies/di/di.py,sha256=USmVkNJ7D5vDfQZiWaJ0M9hBNMZFyo8rkL_m3K2I35w,45433
161
+ clearskies/di/injectable.py,sha256=TTgqhx494470I61-88BUQmHmevfat-wXVseKl8pQOEk,852
162
+ clearskies/di/injectable_properties.py,sha256=yJP0J7l7tjG2soyXtrfDgktE7M8tQHaP-55Cmtq0b7M,6466
163
+ clearskies/di/inject/__init__.py,sha256=plEkWId-VyhvqX5KM2HhdCqi7_ZJzPmFz69cPAo812Y,643
164
+ clearskies/di/inject/by_class.py,sha256=dUA_ZseLZWT30wnkg272rWwe5FzUpr0gCMMQP_HFahc,796
165
+ clearskies/di/inject/by_name.py,sha256=oEfzeotUXPbUAiBrkE7i19nD2ISk59EEwCH3pcgSmqA,639
166
+ clearskies/di/inject/di.py,sha256=JsQJgoxGdawKN3mAfK5Pu7Ju2b1f0JB0PGQmnSaz2RM,275
167
+ clearskies/di/inject/environment.py,sha256=LWzx1ebujXtgQDGHmiX3O8nB3hihZY7Rl-_ZW-qEH-0,450
168
+ clearskies/di/inject/input_output.py,sha256=URb2qt8F-0QJ1zQpGdkrJxrZVNyF7S21EhhE5x2Irys,517
169
+ clearskies/di/inject/now.py,sha256=XZLeCWRQGQdwG12orozpB2YKS4cQYblc2iVHxEmJneU,359
170
+ clearskies/di/inject/requests.py,sha256=GCfPWEZKrL7uergQB-ZYF235GKG4FAYy5WngRhIOi7I,367
171
+ clearskies/di/inject/secrets.py,sha256=zK7ZJJwZS4l13OVlbBs8ESL8yMxa6jDa4_tiLUvUTdY,418
172
+ clearskies/di/inject/utcnow.py,sha256=3OAzR82k0yEfQ65bJ-4Q7gCZH-Y_viucPJQtfcHu_AA,365
173
+ clearskies/di/inject/uuid.py,sha256=ncXvVNevj6CCwxh1r1IGojEPZaOuHnRjYT7B69RTVhs,400
174
+ clearskies/di/test_module/__init__.py,sha256=7YHQF7JHP0FdI7GdEGANSZ_t1EISQYhUNm1wqOg0NKw,88
175
+ clearskies/di/test_module/module_class.py,sha256=I_-wnMuHfbsvti-7d2Z4bXnr6deo__uvww9nds9qrlE,46
176
+ clearskies/di/test_module/another_module/__init__.py,sha256=8SRmHPDepLKGWTUSc1ucDF6U8mJPsNDsBDmBQCpzPWo,35
177
+ clearskies/endpoints/__init__.py,sha256=payWNEivwmxsT-pWqNkzHisSbyNjB7oq7_I5QIQL_XA,750
178
+ clearskies/endpoints/advanced_search.py,sha256=c1fj81nohHGqe56t00o6kLN3XIh3kfy-aKy_C1pxwgw,21835
179
+ clearskies/endpoints/callable.py,sha256=3YrO9voTmwtWlrGTqu8B64sdgEn7eXElsb3KLk-reV4,13960
180
+ clearskies/endpoints/create.py,sha256=mk57WLexX_raAdHJJNGAYgydgkud_3VvcaMWTj8jOlQ,9015
181
+ clearskies/endpoints/delete.py,sha256=ZKBsmpx2QC4hVKWyXkdq3tkW-BkH9uvgyTQAfuS4Bzc,5278
182
+ clearskies/endpoints/get.py,sha256=kV7dLrj3Ph06hhyvmestqydKoNnp_32nFmxvjnh-fVc,10132
183
+ clearskies/endpoints/health_check.py,sha256=j5ozH30xLWUMlrHhNbiHWPMoNhpNmUrdZys3bX_39kg,5540
184
+ clearskies/endpoints/list.py,sha256=Hf1EADraDPrWSV-YgeNmpVLQ30KVzzEoB6IOpF3kH_k,25861
185
+ clearskies/endpoints/restful_api.py,sha256=FjNYg4-qeDjjOSc8QPPFQ74SW4b_84zyQ38ck-g5pRU,16635
186
+ clearskies/endpoints/schema.py,sha256=aMFd8WMRUD_rv3bkEbfPh31u0tAW9bchF0SVhHtqTW8,7418
187
+ clearskies/endpoints/simple_search.py,sha256=ruifcR3efacuWm-mD3Lratunl122tHmv9TW7HVgX2P0,9710
188
+ clearskies/endpoints/update.py,sha256=4c26WDA9Pv8p5xOosK76vxENUxXVahY3H0y1yySfUks,7855
189
+ clearskies/exceptions/__init__.py,sha256=eFCYGp2Pk21kKibGJvJfh2tcn_oxm4wCkR-SbWUp_EI,691
190
+ clearskies/exceptions/authentication.py,sha256=VlNS0Aq2_6LbG0jiE8jULpS54jNW8a8px0gPrK3EZCc,42
191
+ clearskies/exceptions/authorization.py,sha256=14JuU5zLEf2sv82VNxsJt7dGSwfP-t3Pvf_6QZuacfA,41
192
+ clearskies/exceptions/client_error.py,sha256=o1OGnjlXT5zZ1Vb2LTRPYIio0YAnXPpXDGuqSLQP9_Y,39
193
+ clearskies/exceptions/input_errors.py,sha256=cTEFhWKb6zGZ0NCE8s3eyjB2vZpeUVuBaFPg25ThAn0,137
194
+ clearskies/exceptions/missing_dependency.py,sha256=mdzD35at7qM2ymht5vZYgt136Pse4ySr_DyVKcr-L2w,45
195
+ clearskies/exceptions/moved_permanently.py,sha256=fcgU_VBtAe8ZnbyNoNpXDcTQ8UtsjdoYg4Z3Ry2gXmc,110
196
+ clearskies/exceptions/moved_temporarily.py,sha256=Pt3muYHASvgOC50wPmoul9hUfy3Ud_NPSGFxshNWbIk,110
197
+ clearskies/exceptions/not_found.py,sha256=_lZwovDrd18dUHDop5pF4mhexBPNr126xF2gOLA2-EA,36
198
+ clearskies/functional/__init__.py,sha256=yXnbX-pjW6MOaBTjIzogvSJZ6O9dbUAWOalhu0WSDiQ,106
199
+ clearskies/functional/routing.py,sha256=tfIvP_Y29GTGr91_1ec3LSQFoTRwpkqU4BYHXPnBaXA,3685
200
+ clearskies/functional/string.py,sha256=ZnkOjx8nxqZq2TV0CIb-Kz4onGoyekTX_WkLJM6XTmM,3311
201
+ clearskies/functional/validations.py,sha256=cPYOTwWomlQrPvqPP_Jdlds7zZ5H9GABCP5pnGzC9T4,2821
202
+ clearskies/input_outputs/__init__.py,sha256=9qeKJULw3MQ3zqkgBZice5d7qqRgsP3y-wkhWO2Y9vM,362
203
+ clearskies/input_outputs/cli.py,sha256=_r9TNj0Z_8gDw0U_NJECuyLE89CxrHxVpXG6wT_Tt0w,6025
204
+ clearskies/input_outputs/headers.py,sha256=WjDwV3RppIpPtt5QdgdjYJfIO9ufCEpwJLEn4vLypZI,1616
205
+ clearskies/input_outputs/input_output.py,sha256=W5h8a9XFEqwi3h6v17okblz8sOozUj-mMt4JQyTQUJM,5963
206
+ clearskies/input_outputs/programmatic.py,sha256=gfsNFIfiF5cvxi1aS9SgArcKYUgkL5gyxjCMQLwgivY,1711
207
+ clearskies/input_outputs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
+ clearskies/input_outputs/wsgi.py,sha256=94tgWxiwpwvJA9G4nG-hCHteg0pq9pIDCVhnheZuAQc,2544
209
+ clearskies/input_outputs/exceptions/__init__.py,sha256=3KiM3KaMYEKoToqCCQ4_no2n0W5ROqeBC0sI2Ix4P6w,82
210
+ clearskies/input_outputs/exceptions/cli_input_error.py,sha256=kOFU8aLTLmeTL_AKDshxMu8_ufildg6p8ndhE1xHfb0,41
211
+ clearskies/input_outputs/exceptions/cli_not_found.py,sha256=JBBuZA9ZwdkPhd3a0qaGgEPQrxh1fehy4R3ZaV2gWXU,39
212
+ clearskies/query/__init__.py,sha256=ISF80_cG3rd574sRTdKKPxAdlSjtQh_ClXKKs_MSSSo,277
213
+ clearskies/query/condition.py,sha256=9RJrYya1Kfzx0L_BMDKQhYkN9dB7NAq5kRK5mz51YdY,8624
214
+ clearskies/query/join.py,sha256=4lrDUQzck7klKY_VYkc4SVK95SVwyy3SVTvasnsAEyc,4713
215
+ clearskies/query/query.py,sha256=t9tV67CeI6I1u5Uhu6KPT_qiFjvLc3GnwVM2acbXuAU,6088
216
+ clearskies/query/sort.py,sha256=c-EtIkjg3kLjwSTdXD7sfyx-mNUhAepUV-2izprh3iY,754
217
+ clearskies/secrets/__init__.py,sha256=WauemayzKCr-guvMu6wCL4hQUIbkDJFuNKEm8Rd6cUs,136
218
+ clearskies/secrets/akeyless.py,sha256=IUI4RYD-XdNQvyhpuElnw_O74ZY4tJUUtCHmd0dArUI,7158
219
+ clearskies/secrets/secrets.py,sha256=TYN0T7XjmvETtSacDKEkyGGO9kDFCoPl5A7FNkvyNj4,1593
220
+ clearskies/secrets/additional_configs/__init__.py,sha256=cFCrbtKF5nuR061S2y1iKZp349x-y8Srdwe3VZbfSFU,1119
221
+ clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py,sha256=CnIiXLVQdUnUey3dbCTXuNNP7Mmw1gjjNjZiBtfgGto,2757
222
+ clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py,sha256=N8ruxrTNhvYlp3cYXq6V78KPPr4n40LM7QoXHvD8IZg,6235
223
+ clearskies/secrets/exceptions/__init__.py,sha256=j-SLHD-DL0CT4cZXibD9kXHk63JEl_UKX6xL_nq1EfE,32
224
+ clearskies/secrets/exceptions/not_found.py,sha256=_lZwovDrd18dUHDop5pF4mhexBPNr126xF2gOLA2-EA,36
225
+ clearskies/security_headers/__init__.py,sha256=JUpc4Y8dNBinDQAkP7OOABR7N787-lRR23boSWmY6Us,285
226
+ clearskies/security_headers/cache_control.py,sha256=n_fcN4JPfHH8oCC6iSdBaDcAw-5JgPjZQWbD_lMg6qQ,2251
227
+ clearskies/security_headers/cors.py,sha256=zhTLo1FiCwSTgDOYURz7RB0XqLeP456A8mcP_mHBd48,1831
228
+ clearskies/security_headers/csp.py,sha256=jA0ms1X6w52W86-RXcW6dblI_RL7DlrjKt57gcvoNAM,2965
229
+ clearskies/security_headers/hsts.py,sha256=_2EjHgH-OdQ24NF4eWhIi71wcXz2u2K5Q1wwR4NOTe0,732
230
+ clearskies/security_headers/x_content_type_options.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
+ clearskies/security_headers/x_frame_options.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
+ clearskies/validators/__init__.py,sha256=Hz0L5Y7EkeK4Px6WcdQ3ku6VqUGpLHX0ZWwCpT1ts1U,1248
233
+ clearskies/validators/after_column.py,sha256=6qFBodmcrVELDAdvc7w300RDIBFQlsgAmAIJ2-Gv6n4,2366
234
+ clearskies/validators/before_column.py,sha256=fDXhgPwGvnjk1Xy6iwebE8q--BeD48uu3cVGpRGTSBc,528
235
+ clearskies/validators/in_the_future.py,sha256=fKniwgaweKiPrVGqLT1CltmLcdc6zlK9JNA7vwU-w_8,998
236
+ clearskies/validators/in_the_future_at_least.py,sha256=C8g6xizvjgB9ZYI8lsccqmxiWR-AmZDuV2hW9gJ3w3A,407
237
+ clearskies/validators/in_the_future_at_most.py,sha256=55Zlw4hEmjm7VbUAesvFpP2Ha1gcEZJuPMZE_15bY0Y,361
238
+ clearskies/validators/in_the_past.py,sha256=lxUJQ_bcMTW5_NPhbZM1tsOn7ejC1gIBQ_wwD-tK6no,994
239
+ clearskies/validators/in_the_past_at_least.py,sha256=58oZEWCL9GC-8kC-VyxN_455DQC2IdF2bWLsOxqLVqU,359
240
+ clearskies/validators/in_the_past_at_most.py,sha256=e78fz7XIBmvbw5EAj-4xjRqiQ-Ul1xKKwMXL-erpxto,357
241
+ clearskies/validators/maximum_length.py,sha256=lTatC9xFQ2JAiBOJtWCrqNEPh7O5k-_L5--FAc-z05U,877
242
+ clearskies/validators/maximum_value.py,sha256=dy3h2LdnPlAhQoVDCtlrf9Yd8yIrmax08u_qSmBddmI,889
243
+ clearskies/validators/minimum_length.py,sha256=gOMbtkoWxvWT4WEPtdP_5xCTn5GsshaaTC1vADpBoao,878
244
+ clearskies/validators/minimum_value.py,sha256=Vz0e_9U5KYqBGqfrVBOtPiVtmNPWwFEGPAuMH1q7Ky0,890
245
+ clearskies/validators/required.py,sha256=f8VE9sbvIorTIC0q_77DyDfDjAJYFJs-uTgJkAwLxX4,1362
246
+ clearskies/validators/timedelta.py,sha256=nFEHefllfMZsguJoSdeWzaBsxBDZfMZoIdt5jZxeg0g,1932
247
+ clearskies/validators/unique.py,sha256=DZA7dbLucYDShtr1bVP2pnmbzciIEMvYSrTjOKCQ4vM,1029
248
+ clear_skies-2.0.7.dist-info/METADATA,sha256=w1OcQL_DT49x-H4eoOR3vrAIPdnrGwtJ8A44qCh9TjM,2113
249
+ clear_skies-2.0.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
250
+ clear_skies-2.0.7.dist-info/licenses/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
251
+ clear_skies-2.0.7.dist-info/RECORD,,
clearskies/__init__.py ADDED
@@ -0,0 +1,61 @@
1
+ from . import (
2
+ authentication,
3
+ autodoc,
4
+ backends,
5
+ columns,
6
+ configs,
7
+ contexts,
8
+ decorators,
9
+ di,
10
+ endpoints,
11
+ exceptions,
12
+ functional,
13
+ input_outputs,
14
+ query,
15
+ # secrets,
16
+ security_headers,
17
+ typing,
18
+ validators,
19
+ )
20
+ from .action import Action
21
+ from .column import Column
22
+ from .configurable import Configurable
23
+ from .end import End # type: ignore
24
+ from .endpoint import Endpoint
25
+ from .endpoint_group import EndpointGroup
26
+ from .environment import Environment
27
+ from .model import Model
28
+ from .schema import Schema
29
+ from .security_header import SecurityHeader
30
+ from .validator import Validator
31
+
32
+ __all__ = [
33
+ "Action",
34
+ "authentication",
35
+ "autodoc",
36
+ "backends",
37
+ "Column",
38
+ "columns",
39
+ "configs",
40
+ "Configurable",
41
+ "contexts",
42
+ "di",
43
+ "input_outputs",
44
+ "End",
45
+ "Endpoint",
46
+ "EndpointGroup",
47
+ "endpoints",
48
+ "Environment",
49
+ "exceptions",
50
+ "functional",
51
+ "Model",
52
+ "Schema",
53
+ "typing",
54
+ "Validator",
55
+ "query",
56
+ # "secrets",
57
+ "SecurityHeader",
58
+ "security_headers",
59
+ "validators",
60
+ "decorators",
61
+ ]
clearskies/action.py ADDED
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class Action(ABC):
5
+ @abstractmethod
6
+ def __call__(self, model):
7
+ pass
@@ -0,0 +1,15 @@
1
+ from clearskies.authentication.authentication import Authentication
2
+ from clearskies.authentication.authorization import Authorization
3
+ from clearskies.authentication.authorization_pass_through import AuthorizationPassThrough
4
+ from clearskies.authentication.jwks import Jwks
5
+ from clearskies.authentication.public import Public
6
+ from clearskies.authentication.secret_bearer import SecretBearer
7
+
8
+ __all__ = [
9
+ "Authentication",
10
+ "Authorization",
11
+ "AuthorizationPassThrough",
12
+ "Jwks",
13
+ "Public",
14
+ "SecretBearer",
15
+ ]
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ import requests
6
+
7
+ import clearskies.configurable
8
+ from clearskies.authentication.authorization import Authorization
9
+
10
+ if TYPE_CHECKING:
11
+ from clearskies.security_headers.cors import Cors
12
+
13
+
14
+ class Authentication(clearskies.configurable.Configurable, requests.auth.AuthBase):
15
+ """
16
+ Authentication!
17
+ """
18
+
19
+ is_public = True
20
+ can_authorize = False
21
+ has_dynamic_credentials = False
22
+
23
+ def clear_credential_cache(self) -> None:
24
+ pass
25
+
26
+ def headers(self, retry_auth: bool = False) -> dict[str, str]:
27
+ return {}
28
+
29
+ def authenticate(self, input_output) -> bool:
30
+ return True
31
+
32
+ def authorize(self, authorization: Authorization):
33
+ raise ValueError("Public endpoints do not support authorization")
34
+
35
+ def set_headers_for_cors(self, cors: Cors):
36
+ pass
37
+
38
+ def documentation_security_scheme(self) -> dict[str, Any]:
39
+ return {}
40
+
41
+ def documentation_security_scheme_name(self) -> str:
42
+ return ""
43
+
44
+ def __call__(self, request: requests.models.PreparedRequest) -> requests.models.PreparedRequest:
45
+ request.headers = {**request.headers, **self.headers()} # type: ignore
46
+ return request
@@ -0,0 +1,16 @@
1
+ class Authorization:
2
+ """
3
+ Authorization!
4
+ """
5
+
6
+ def gate(self, authorization_data, input_output):
7
+ """
8
+ Return True/False to denote if the given user, as represented by the authorization data, should be allowed access.
9
+
10
+ Raise clearskies.exceptions.ClientError if you want to raise a specific error message.
11
+ """
12
+ return True
13
+
14
+ def filter_model(self, model, authorization_data, input_output):
15
+ """Return a models object with additional filters applied to account for authorization needs."""
16
+ return model
@@ -0,0 +1,20 @@
1
+ import clearskies.di
2
+
3
+ from .jwks import Jwks
4
+
5
+
6
+ class AuthorizationPassThrough(Jwks):
7
+ """
8
+ Authentication class with pass through.
9
+
10
+ This authentication class takes the authentication header from the incoming request and reflects
11
+ it on outgoing requests.
12
+ """
13
+
14
+ """
15
+ The input output helper
16
+ """
17
+ input_output = clearskies.di.inject.InputOutput()
18
+
19
+ def headers(self, retry_auth=False):
20
+ return {"Authorization": self.input_output.request_headers.get("authorization", True)}
@@ -0,0 +1,163 @@
1
+ import json
2
+ from typing import Any
3
+
4
+ import clearskies.configs
5
+ import clearskies.decorators
6
+ import clearskies.di
7
+ from clearskies.authentication.authentication import Authentication
8
+ from clearskies.exceptions import ClientError
9
+ from clearskies.security_headers.cors import Cors
10
+
11
+
12
+ class Jwks(Authentication, clearskies.di.InjectableProperties):
13
+ """
14
+ Validate a JWT against a JWKS (JSON Web Key Set)
15
+ """
16
+
17
+ """
18
+ The URL of the JWKS
19
+ """
20
+ jwks_url = clearskies.configs.String(required=True)
21
+
22
+ """
23
+ The audience to accept JWTs for.
24
+ """
25
+ audience = clearskies.configs.StringList(default=[])
26
+
27
+ """
28
+ The expected issuer of the JWTs.
29
+ """
30
+ issuer = clearskies.configs.String(default="")
31
+
32
+ """
33
+ The allowed algorithms
34
+ """
35
+ algorithms = clearskies.configs.StringList(default=["RS256"])
36
+
37
+ """
38
+ The number of seconds for which the JWKS URL contents can be cached
39
+ """
40
+ jwks_cache_time = clearskies.configs.Integer(default=86400)
41
+
42
+ """
43
+ The Authorization URL (used in the auto-generated documentation)
44
+ """
45
+ authorization_url = clearskies.configs.String()
46
+
47
+ """
48
+ The name of the security scheme in the auto-generated documentation.
49
+ """
50
+ documentation_security_name = clearskies.configs.String(default="jwt")
51
+
52
+ """
53
+ The environment helper.
54
+ """
55
+ environment = clearskies.di.inject.Environment()
56
+
57
+ """
58
+ The requests object.
59
+ """
60
+ requests = clearskies.di.inject.Requests()
61
+
62
+ """
63
+ The JoseJwt library
64
+ """
65
+ jose_jwt = clearskies.di.inject.ByName("jose_jwt")
66
+
67
+ """
68
+ The current time
69
+ """
70
+ now = clearskies.di.inject.Now()
71
+
72
+ """
73
+ Local cache of the JWKS
74
+ """
75
+ _jwks = None
76
+
77
+ """
78
+ The time when the JWKS was last fetched
79
+ """
80
+ _jwks_fetched = None
81
+
82
+ @clearskies.decorators.parameters_to_properties
83
+ def __init__(
84
+ self,
85
+ jwks_url: str,
86
+ audience: str = "",
87
+ issuer: str = "",
88
+ algorithms: list[str] = ["RS256"],
89
+ jwks_cache_time: int = 86400,
90
+ authorization_url: str = "",
91
+ documentation_security_name: str = "jwt",
92
+ ):
93
+ self.finalize_and_validate_configuration()
94
+
95
+ def authenticate(self, input_output) -> bool:
96
+ auth_header = input_output.get_request_header("authorization", True)
97
+ if not auth_header:
98
+ raise ClientError("Missing 'Authorization' header in request")
99
+ if auth_header[:7].lower() != "bearer ":
100
+ raise ClientError("Missing 'Bearer ' prefix in authorization header")
101
+ self.validate_jwt(auth_header[7:])
102
+ input_output.authorization_data = self.jwt_claims
103
+ return True
104
+
105
+ def validate_jwt(self, raw_jwt):
106
+ try:
107
+ from jwcrypto import jwk, jws, jwt # type: ignore
108
+ from jwcrypto.common import JWException # type: ignore
109
+ except:
110
+ raise ValueError(
111
+ "The JWKS authentication method requires the jwcrypto libraries to be installed. These are optional dependencies of clearskies, so to include them do a `pip install 'clear-skies[jwcrypto]'`"
112
+ )
113
+
114
+ keys = jwk.JWKSet()
115
+ keys.import_keyset(json.dumps(self._get_jwks()))
116
+
117
+ client_jwt = jwt.JWT()
118
+ try:
119
+ client_jwt.deserialize(raw_jwt)
120
+ except Exception as e:
121
+ raise ClientError(str(e))
122
+
123
+ try:
124
+ client_jwt.validate(keys)
125
+ self.jwt_claims = json.loads(client_jwt.claims)
126
+ except JWException as e:
127
+ raise ClientError(str(e))
128
+
129
+ if self.issuer and self.jwt_claims.get("iss") != self.issuer:
130
+ raise ClientError("Issuer does not match")
131
+
132
+ if self.audience:
133
+ jwt_audience = self.jwt_claims.get("aud")
134
+ if not jwt_audience:
135
+ raise ClientError("Audience required, but missing in JWT")
136
+ has_match = False
137
+ for audience in jwt_audience:
138
+ if audience == self.audience:
139
+ has_match = True
140
+ if not has_match:
141
+ raise ClientError("Audience does not match")
142
+
143
+ return True
144
+
145
+ def _get_jwks(self):
146
+ if self._jwks is None or ((self.now - self._jwks_fetched).total_seconds() > self.jwks_cache_time):
147
+ self._jwks = self.requests.get(self.jwks_url).json()
148
+ self._jwks_fetched = self.now
149
+
150
+ return self._jwks
151
+
152
+ def documentation_security_scheme(self) -> dict[str, Any]:
153
+ return {
154
+ "type": "oauth2",
155
+ "description": "JWT based authentication",
156
+ "flows": {"implicit": {"authorizationUrl": self.authorization_url, "scopes": {}}},
157
+ }
158
+
159
+ def documentation_security_scheme_name(self) -> str:
160
+ return self.documentation_security_name
161
+
162
+ def set_headers_for_cors(self, cors: Cors):
163
+ cors.add_header("Authorization")
@@ -0,0 +1,5 @@
1
+ from .authentication import Authentication
2
+
3
+
4
+ class Public(Authentication):
5
+ pass