clear-skies 1.22.30__py3-none-any.whl → 2.0.0__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 (344) hide show
  1. {clear_skies-1.22.30.dist-info → clear_skies-2.0.0.dist-info}/METADATA +5 -7
  2. clear_skies-2.0.0.dist-info/RECORD +248 -0
  3. {clear_skies-1.22.30.dist-info → clear_skies-2.0.0.dist-info}/WHEEL +1 -1
  4. clearskies/__init__.py +42 -25
  5. clearskies/action.py +7 -0
  6. clearskies/authentication/__init__.py +8 -41
  7. clearskies/authentication/authentication.py +42 -0
  8. clearskies/authentication/authorization.py +4 -9
  9. clearskies/authentication/authorization_pass_through.py +11 -9
  10. clearskies/authentication/jwks.py +128 -58
  11. clearskies/authentication/public.py +3 -38
  12. clearskies/authentication/secret_bearer.py +516 -54
  13. clearskies/autodoc/formats/oai3_json/__init__.py +1 -1
  14. clearskies/autodoc/formats/oai3_json/oai3_json.py +9 -7
  15. clearskies/autodoc/formats/oai3_json/parameter.py +6 -3
  16. clearskies/autodoc/formats/oai3_json/request.py +7 -5
  17. clearskies/autodoc/formats/oai3_json/response.py +7 -4
  18. clearskies/autodoc/formats/oai3_json/schema/object.py +4 -1
  19. clearskies/autodoc/request/__init__.py +2 -0
  20. clearskies/autodoc/request/header.py +4 -6
  21. clearskies/autodoc/request/json_body.py +4 -6
  22. clearskies/autodoc/request/parameter.py +8 -0
  23. clearskies/autodoc/request/request.py +7 -4
  24. clearskies/autodoc/request/url_parameter.py +4 -6
  25. clearskies/autodoc/request/url_path.py +4 -6
  26. clearskies/autodoc/schema/__init__.py +4 -2
  27. clearskies/autodoc/schema/array.py +5 -6
  28. clearskies/autodoc/schema/boolean.py +4 -10
  29. clearskies/autodoc/schema/date.py +0 -3
  30. clearskies/autodoc/schema/datetime.py +1 -4
  31. clearskies/autodoc/schema/double.py +0 -3
  32. clearskies/autodoc/schema/enum.py +4 -2
  33. clearskies/autodoc/schema/integer.py +4 -9
  34. clearskies/autodoc/schema/long.py +0 -3
  35. clearskies/autodoc/schema/number.py +4 -9
  36. clearskies/autodoc/schema/object.py +5 -7
  37. clearskies/autodoc/schema/password.py +0 -3
  38. clearskies/autodoc/schema/schema.py +11 -0
  39. clearskies/autodoc/schema/string.py +4 -10
  40. clearskies/backends/__init__.py +55 -20
  41. clearskies/backends/api_backend.py +1100 -284
  42. clearskies/backends/backend.py +40 -84
  43. clearskies/backends/cursor_backend.py +236 -186
  44. clearskies/backends/memory_backend.py +519 -226
  45. clearskies/backends/secrets_backend.py +75 -31
  46. clearskies/column.py +1232 -0
  47. clearskies/columns/__init__.py +71 -0
  48. clearskies/columns/audit.py +205 -0
  49. clearskies/columns/belongs_to_id.py +483 -0
  50. clearskies/columns/belongs_to_model.py +128 -0
  51. clearskies/columns/belongs_to_self.py +105 -0
  52. clearskies/columns/boolean.py +109 -0
  53. clearskies/columns/category_tree.py +275 -0
  54. clearskies/columns/category_tree_ancestors.py +51 -0
  55. clearskies/columns/category_tree_children.py +127 -0
  56. clearskies/columns/category_tree_descendants.py +48 -0
  57. clearskies/columns/created.py +94 -0
  58. clearskies/columns/created_by_authorization_data.py +116 -0
  59. clearskies/columns/created_by_header.py +99 -0
  60. clearskies/columns/created_by_ip.py +92 -0
  61. clearskies/columns/created_by_routing_data.py +96 -0
  62. clearskies/columns/created_by_user_agent.py +92 -0
  63. clearskies/columns/date.py +230 -0
  64. clearskies/columns/datetime.py +278 -0
  65. clearskies/columns/email.py +76 -0
  66. clearskies/columns/float.py +149 -0
  67. clearskies/columns/has_many.py +505 -0
  68. clearskies/columns/has_many_self.py +56 -0
  69. clearskies/columns/has_one.py +14 -0
  70. clearskies/columns/integer.py +156 -0
  71. clearskies/columns/json.py +122 -0
  72. clearskies/columns/many_to_many_ids.py +333 -0
  73. clearskies/columns/many_to_many_ids_with_data.py +270 -0
  74. clearskies/columns/many_to_many_models.py +154 -0
  75. clearskies/columns/many_to_many_pivots.py +133 -0
  76. clearskies/columns/phone.py +158 -0
  77. clearskies/columns/select.py +91 -0
  78. clearskies/columns/string.py +98 -0
  79. clearskies/columns/timestamp.py +160 -0
  80. clearskies/columns/updated.py +110 -0
  81. clearskies/columns/uuid.py +86 -0
  82. clearskies/configs/README.md +105 -0
  83. clearskies/configs/__init__.py +159 -0
  84. clearskies/configs/actions.py +43 -0
  85. clearskies/configs/any.py +13 -0
  86. clearskies/configs/any_dict.py +22 -0
  87. clearskies/configs/any_dict_or_callable.py +23 -0
  88. clearskies/configs/authentication.py +23 -0
  89. clearskies/configs/authorization.py +23 -0
  90. clearskies/configs/boolean.py +16 -0
  91. clearskies/configs/boolean_or_callable.py +18 -0
  92. clearskies/configs/callable_config.py +18 -0
  93. clearskies/configs/columns.py +34 -0
  94. clearskies/configs/conditions.py +30 -0
  95. clearskies/configs/config.py +21 -0
  96. clearskies/configs/datetime.py +18 -0
  97. clearskies/configs/datetime_or_callable.py +19 -0
  98. clearskies/configs/endpoint.py +23 -0
  99. clearskies/configs/float.py +16 -0
  100. clearskies/configs/float_or_callable.py +18 -0
  101. clearskies/configs/integer.py +16 -0
  102. clearskies/configs/integer_or_callable.py +18 -0
  103. clearskies/configs/joins.py +30 -0
  104. clearskies/configs/list_any_dict.py +30 -0
  105. clearskies/configs/list_any_dict_or_callable.py +31 -0
  106. clearskies/configs/model_class.py +35 -0
  107. clearskies/configs/model_column.py +65 -0
  108. clearskies/configs/model_columns.py +56 -0
  109. clearskies/configs/model_destination_name.py +25 -0
  110. clearskies/configs/model_to_id_column.py +43 -0
  111. clearskies/configs/readable_model_column.py +9 -0
  112. clearskies/configs/readable_model_columns.py +9 -0
  113. clearskies/configs/schema.py +23 -0
  114. clearskies/configs/searchable_model_columns.py +9 -0
  115. clearskies/configs/security_headers.py +39 -0
  116. clearskies/configs/select.py +26 -0
  117. clearskies/configs/select_list.py +47 -0
  118. clearskies/configs/string.py +29 -0
  119. clearskies/configs/string_dict.py +32 -0
  120. clearskies/configs/string_list.py +32 -0
  121. clearskies/configs/string_list_or_callable.py +35 -0
  122. clearskies/configs/string_or_callable.py +18 -0
  123. clearskies/configs/timedelta.py +18 -0
  124. clearskies/configs/timezone.py +18 -0
  125. clearskies/configs/url.py +23 -0
  126. clearskies/configs/validators.py +45 -0
  127. clearskies/configs/writeable_model_column.py +9 -0
  128. clearskies/configs/writeable_model_columns.py +9 -0
  129. clearskies/configurable.py +76 -0
  130. clearskies/contexts/__init__.py +8 -8
  131. clearskies/contexts/cli.py +5 -42
  132. clearskies/contexts/context.py +78 -56
  133. clearskies/contexts/wsgi.py +13 -30
  134. clearskies/contexts/wsgi_ref.py +49 -0
  135. clearskies/di/__init__.py +10 -7
  136. clearskies/di/additional_config.py +115 -4
  137. clearskies/di/additional_config_auto_import.py +12 -0
  138. clearskies/di/di.py +742 -121
  139. clearskies/di/inject/__init__.py +23 -0
  140. clearskies/di/inject/by_class.py +21 -0
  141. clearskies/di/inject/by_name.py +18 -0
  142. clearskies/di/inject/di.py +13 -0
  143. clearskies/di/inject/environment.py +14 -0
  144. clearskies/di/inject/input_output.py +20 -0
  145. clearskies/di/inject/now.py +13 -0
  146. clearskies/di/inject/requests.py +13 -0
  147. clearskies/di/inject/secrets.py +14 -0
  148. clearskies/di/inject/utcnow.py +13 -0
  149. clearskies/di/inject/uuid.py +15 -0
  150. clearskies/di/injectable.py +29 -0
  151. clearskies/di/injectable_properties.py +131 -0
  152. clearskies/end.py +183 -0
  153. clearskies/endpoint.py +1309 -0
  154. clearskies/endpoint_group.py +297 -0
  155. clearskies/endpoints/__init__.py +23 -0
  156. clearskies/endpoints/advanced_search.py +526 -0
  157. clearskies/endpoints/callable.py +387 -0
  158. clearskies/endpoints/create.py +202 -0
  159. clearskies/endpoints/delete.py +139 -0
  160. clearskies/endpoints/get.py +275 -0
  161. clearskies/endpoints/health_check.py +181 -0
  162. clearskies/endpoints/list.py +573 -0
  163. clearskies/endpoints/restful_api.py +427 -0
  164. clearskies/endpoints/simple_search.py +286 -0
  165. clearskies/endpoints/update.py +190 -0
  166. clearskies/environment.py +5 -3
  167. clearskies/exceptions/__init__.py +17 -0
  168. clearskies/{handlers/exceptions/input_error.py → exceptions/input_errors.py} +1 -1
  169. clearskies/exceptions/moved_permanently.py +3 -0
  170. clearskies/exceptions/moved_temporarily.py +3 -0
  171. clearskies/exceptions/not_found.py +2 -0
  172. clearskies/functional/__init__.py +2 -2
  173. clearskies/functional/routing.py +92 -0
  174. clearskies/functional/string.py +19 -11
  175. clearskies/functional/validations.py +61 -9
  176. clearskies/input_outputs/__init__.py +9 -7
  177. clearskies/input_outputs/cli.py +130 -142
  178. clearskies/input_outputs/exceptions/__init__.py +1 -1
  179. clearskies/input_outputs/headers.py +45 -0
  180. clearskies/input_outputs/input_output.py +91 -122
  181. clearskies/input_outputs/programmatic.py +69 -0
  182. clearskies/input_outputs/wsgi.py +23 -38
  183. clearskies/model.py +489 -184
  184. clearskies/parameters_to_properties.py +31 -0
  185. clearskies/query/__init__.py +12 -0
  186. clearskies/query/condition.py +223 -0
  187. clearskies/query/join.py +136 -0
  188. clearskies/query/query.py +196 -0
  189. clearskies/query/sort.py +27 -0
  190. clearskies/schema.py +82 -0
  191. clearskies/secrets/__init__.py +3 -31
  192. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +15 -4
  193. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +11 -5
  194. clearskies/secrets/akeyless.py +88 -147
  195. clearskies/secrets/secrets.py +8 -8
  196. clearskies/security_header.py +8 -0
  197. clearskies/security_headers/__init__.py +8 -8
  198. clearskies/security_headers/cache_control.py +47 -110
  199. clearskies/security_headers/cors.py +40 -95
  200. clearskies/security_headers/csp.py +76 -151
  201. clearskies/security_headers/hsts.py +14 -16
  202. clearskies/test_base.py +8 -0
  203. clearskies/typing.py +11 -0
  204. clearskies/validator.py +25 -0
  205. clearskies/validators/__init__.py +33 -0
  206. clearskies/validators/after_column.py +62 -0
  207. clearskies/validators/before_column.py +13 -0
  208. clearskies/validators/in_the_future.py +32 -0
  209. clearskies/validators/in_the_future_at_least.py +11 -0
  210. clearskies/validators/in_the_future_at_most.py +10 -0
  211. clearskies/validators/in_the_past.py +32 -0
  212. clearskies/validators/in_the_past_at_least.py +10 -0
  213. clearskies/validators/in_the_past_at_most.py +10 -0
  214. clearskies/validators/maximum_length.py +26 -0
  215. clearskies/validators/maximum_value.py +29 -0
  216. clearskies/validators/minimum_length.py +26 -0
  217. clearskies/validators/minimum_value.py +29 -0
  218. clearskies/validators/required.py +35 -0
  219. clearskies/validators/timedelta.py +59 -0
  220. clearskies/validators/unique.py +31 -0
  221. clear_skies-1.22.30.dist-info/RECORD +0 -214
  222. clearskies/application.py +0 -29
  223. clearskies/authentication/auth0_jwks.py +0 -118
  224. clearskies/authentication/auth_exception.py +0 -2
  225. clearskies/authentication/jwks_jwcrypto.py +0 -51
  226. clearskies/backends/api_get_only_backend.py +0 -48
  227. clearskies/backends/example_backend.py +0 -43
  228. clearskies/backends/file_backend.py +0 -48
  229. clearskies/backends/json_backend.py +0 -7
  230. clearskies/backends/restful_api_advanced_search_backend.py +0 -103
  231. clearskies/binding_config.py +0 -16
  232. clearskies/column_types/__init__.py +0 -203
  233. clearskies/column_types/audit.py +0 -249
  234. clearskies/column_types/belongs_to.py +0 -271
  235. clearskies/column_types/boolean.py +0 -60
  236. clearskies/column_types/category_tree.py +0 -304
  237. clearskies/column_types/column.py +0 -373
  238. clearskies/column_types/created.py +0 -26
  239. clearskies/column_types/created_by_authorization_data.py +0 -26
  240. clearskies/column_types/created_by_header.py +0 -24
  241. clearskies/column_types/created_by_ip.py +0 -17
  242. clearskies/column_types/created_by_routing_data.py +0 -25
  243. clearskies/column_types/created_by_user_agent.py +0 -17
  244. clearskies/column_types/created_micro.py +0 -26
  245. clearskies/column_types/datetime.py +0 -109
  246. clearskies/column_types/datetime_micro.py +0 -12
  247. clearskies/column_types/email.py +0 -18
  248. clearskies/column_types/float.py +0 -43
  249. clearskies/column_types/has_many.py +0 -179
  250. clearskies/column_types/has_one.py +0 -60
  251. clearskies/column_types/integer.py +0 -41
  252. clearskies/column_types/json.py +0 -25
  253. clearskies/column_types/many_to_many.py +0 -278
  254. clearskies/column_types/many_to_many_with_data.py +0 -162
  255. clearskies/column_types/phone.py +0 -48
  256. clearskies/column_types/select.py +0 -11
  257. clearskies/column_types/string.py +0 -24
  258. clearskies/column_types/timestamp.py +0 -73
  259. clearskies/column_types/updated.py +0 -26
  260. clearskies/column_types/updated_micro.py +0 -26
  261. clearskies/column_types/uuid.py +0 -25
  262. clearskies/columns.py +0 -123
  263. clearskies/condition_parser.py +0 -172
  264. clearskies/contexts/build_context.py +0 -54
  265. clearskies/contexts/convert_to_application.py +0 -190
  266. clearskies/contexts/extract_handler.py +0 -37
  267. clearskies/contexts/test.py +0 -94
  268. clearskies/decorators/__init__.py +0 -41
  269. clearskies/decorators/allow_non_json_bodies.py +0 -9
  270. clearskies/decorators/auth0_jwks.py +0 -22
  271. clearskies/decorators/authorization.py +0 -10
  272. clearskies/decorators/binding_classes.py +0 -9
  273. clearskies/decorators/binding_modules.py +0 -9
  274. clearskies/decorators/bindings.py +0 -9
  275. clearskies/decorators/create.py +0 -10
  276. clearskies/decorators/delete.py +0 -10
  277. clearskies/decorators/docs.py +0 -14
  278. clearskies/decorators/get.py +0 -10
  279. clearskies/decorators/jwks.py +0 -26
  280. clearskies/decorators/merge.py +0 -124
  281. clearskies/decorators/patch.py +0 -10
  282. clearskies/decorators/post.py +0 -10
  283. clearskies/decorators/public.py +0 -11
  284. clearskies/decorators/response_headers.py +0 -10
  285. clearskies/decorators/return_raw_response.py +0 -9
  286. clearskies/decorators/schema.py +0 -10
  287. clearskies/decorators/secret_bearer.py +0 -24
  288. clearskies/decorators/security_headers.py +0 -10
  289. clearskies/di/standard_dependencies.py +0 -151
  290. clearskies/handlers/__init__.py +0 -41
  291. clearskies/handlers/advanced_search.py +0 -271
  292. clearskies/handlers/base.py +0 -479
  293. clearskies/handlers/callable.py +0 -192
  294. clearskies/handlers/create.py +0 -35
  295. clearskies/handlers/crud_by_method.py +0 -18
  296. clearskies/handlers/database_connector.py +0 -32
  297. clearskies/handlers/delete.py +0 -61
  298. clearskies/handlers/exceptions/__init__.py +0 -5
  299. clearskies/handlers/exceptions/not_found.py +0 -3
  300. clearskies/handlers/get.py +0 -156
  301. clearskies/handlers/health_check.py +0 -59
  302. clearskies/handlers/input_processing.py +0 -79
  303. clearskies/handlers/list.py +0 -530
  304. clearskies/handlers/mygrations.py +0 -82
  305. clearskies/handlers/request_method_routing.py +0 -47
  306. clearskies/handlers/restful_api.py +0 -218
  307. clearskies/handlers/routing.py +0 -62
  308. clearskies/handlers/schema_helper.py +0 -128
  309. clearskies/handlers/simple_routing.py +0 -206
  310. clearskies/handlers/simple_routing_route.py +0 -197
  311. clearskies/handlers/simple_search.py +0 -136
  312. clearskies/handlers/update.py +0 -102
  313. clearskies/handlers/write.py +0 -193
  314. clearskies/input_requirements/__init__.py +0 -78
  315. clearskies/input_requirements/after.py +0 -36
  316. clearskies/input_requirements/before.py +0 -36
  317. clearskies/input_requirements/in_the_future_at_least.py +0 -19
  318. clearskies/input_requirements/in_the_future_at_most.py +0 -19
  319. clearskies/input_requirements/in_the_past_at_least.py +0 -19
  320. clearskies/input_requirements/in_the_past_at_most.py +0 -19
  321. clearskies/input_requirements/maximum_length.py +0 -19
  322. clearskies/input_requirements/maximum_value.py +0 -19
  323. clearskies/input_requirements/minimum_length.py +0 -22
  324. clearskies/input_requirements/minimum_value.py +0 -19
  325. clearskies/input_requirements/required.py +0 -23
  326. clearskies/input_requirements/requirement.py +0 -25
  327. clearskies/input_requirements/time_delta.py +0 -38
  328. clearskies/input_requirements/unique.py +0 -18
  329. clearskies/mocks/__init__.py +0 -7
  330. clearskies/mocks/input_output.py +0 -124
  331. clearskies/mocks/models.py +0 -142
  332. clearskies/models.py +0 -350
  333. clearskies/security_headers/base.py +0 -12
  334. clearskies/tests/simple_api/models/__init__.py +0 -2
  335. clearskies/tests/simple_api/models/status.py +0 -23
  336. clearskies/tests/simple_api/models/user.py +0 -21
  337. clearskies/tests/simple_api/users_api.py +0 -64
  338. {clear_skies-1.22.30.dist-info → clear_skies-2.0.0.dist-info}/LICENSE +0 -0
  339. /clearskies/{contexts/bash.py → autodoc/py.typed} +0 -0
  340. /clearskies/{handlers/exceptions → exceptions}/authentication.py +0 -0
  341. /clearskies/{handlers/exceptions → exceptions}/authorization.py +0 -0
  342. /clearskies/{handlers/exceptions → exceptions}/client_error.py +0 -0
  343. /clearskies/{tests/__init__.py → input_outputs/py.typed} +0 -0
  344. /clearskies/{tests/simple_api/__init__.py → py.typed} +0 -0
@@ -1,8 +1,11 @@
1
+ from typing import Any
2
+
3
+
1
4
  class Response:
2
- response = None
3
- formatted_schema = None
4
- oai3_schema_resolver = None
5
- status_code = None
5
+ response: Any = None
6
+ formatted_schema: Any = None
7
+ oai3_schema_resolver: Any = None
8
+ status_code: Any = None
6
9
 
7
10
  def __init__(self, oai3_schema_resolver):
8
11
  self.oai3_schema_resolver = oai3_schema_resolver
@@ -1,10 +1,13 @@
1
+ from typing import Any
2
+
3
+
1
4
  class Object:
2
5
  def __init__(self, schema, oai3_schema_resolver):
3
6
  self.schema = schema
4
7
  self.oai3_schema_resolver = oai3_schema_resolver
5
8
 
6
9
  def convert(self, include_required=False):
7
- schema = {
10
+ schema: dict[str, Any] = {
8
11
  "type": "object",
9
12
  }
10
13
 
@@ -1,5 +1,6 @@
1
1
  from .header import Header
2
2
  from .json_body import JSONBody
3
+ from .parameter import Parameter
3
4
  from .request import Request
4
5
  from .url_parameter import URLParameter
5
6
  from .url_path import URLPath
@@ -7,6 +8,7 @@ from .url_path import URLPath
7
8
  __all__ = [
8
9
  "Header",
9
10
  "JSONBody",
11
+ "Parameter",
10
12
  "Request",
11
13
  "URLParameter",
12
14
  "URLPath",
@@ -1,8 +1,6 @@
1
- class Header:
1
+ from .parameter import Parameter
2
+
3
+
4
+ class Header(Parameter):
2
5
  location = "header"
3
6
  in_body = False
4
-
5
- def __init__(self, definition, description="", required=False):
6
- self.definition = definition
7
- self.description = description
8
- self.required = required
@@ -1,8 +1,6 @@
1
- class JSONBody:
1
+ from .parameter import Parameter
2
+
3
+
4
+ class JSONBody(Parameter):
2
5
  location = "json_body"
3
6
  in_body = True
4
-
5
- def __init__(self, definition, description="", required=False):
6
- self.definition = definition
7
- self.description = description
8
- self.required = required
@@ -0,0 +1,8 @@
1
+ class Parameter:
2
+ location = ""
3
+ in_body = False
4
+
5
+ def __init__(self, definition, description="", required=False):
6
+ self.definition = definition
7
+ self.description = description
8
+ self.required = required
@@ -1,8 +1,11 @@
1
+ from typing import Any
2
+
3
+
1
4
  class Request:
2
- description = None
3
- relative_path = None
4
- request_methods = None
5
- parameters = None
5
+ description: str = ""
6
+ relative_path: str = ""
7
+ request_methods: list[str] = []
8
+ parameters: list[Any] = []
6
9
  responses = None
7
10
  root_properties = None
8
11
 
@@ -1,8 +1,6 @@
1
- class URLParameter:
1
+ from .parameter import Parameter
2
+
3
+
4
+ class URLParameter(Parameter):
2
5
  location = "url_parameter"
3
6
  in_body = False
4
-
5
- def __init__(self, definition, description="", required=False):
6
- self.definition = definition
7
- self.description = description
8
- self.required = required
@@ -1,8 +1,6 @@
1
- class URLPath:
1
+ from .parameter import Parameter
2
+
3
+
4
+ class URLPath(Parameter):
2
5
  location = "url_path"
3
6
  in_body = False
4
-
5
- def __init__(self, definition, description="", required=False):
6
- self.definition = definition
7
- self.description = description
8
- self.required = required
@@ -2,7 +2,7 @@ from .array import Array
2
2
  from .base64 import Base64
3
3
  from .boolean import Boolean
4
4
  from .date import Date
5
- from .datetime import DateTime
5
+ from .datetime import Datetime
6
6
  from .double import Double
7
7
  from .enum import Enum
8
8
  from .integer import Integer
@@ -10,6 +10,7 @@ from .long import Long
10
10
  from .number import Number
11
11
  from .object import Object
12
12
  from .password import Password
13
+ from .schema import Schema
13
14
  from .string import String
14
15
 
15
16
  __all__ = [
@@ -17,7 +18,7 @@ __all__ = [
17
18
  "Base64",
18
19
  "Boolean",
19
20
  "Date",
20
- "DateTime",
21
+ "Datetime",
21
22
  "Double",
22
23
  "Enum",
23
24
  "Integer",
@@ -25,5 +26,6 @@ __all__ = [
25
26
  "Number",
26
27
  "Object",
27
28
  "Password",
29
+ "Schema",
28
30
  "String",
29
31
  ]
@@ -1,11 +1,10 @@
1
- class Array:
2
- name = None
3
- value = None
1
+ from .schema import Schema
2
+
3
+
4
+ class Array(Schema):
4
5
  item_definition = None
5
6
  _type = "array"
6
- _format = ""
7
7
 
8
8
  def __init__(self, name, item_definition, value=None):
9
- self.name = name
10
- self.value = value
9
+ super().__init__(name, example=None, value=value)
11
10
  self.item_definition = item_definition
@@ -1,11 +1,5 @@
1
- class Boolean:
2
- name = None
3
- example = None
4
- value = None
5
- _type = "boolean"
6
- _format = ""
1
+ from .schema import Schema
2
+
7
3
 
8
- def __init__(self, name, example=None, value=None):
9
- self.name = name
10
- self.example = example
11
- self.value = value
4
+ class Boolean(Schema):
5
+ _type = "boolean"
@@ -3,6 +3,3 @@ from .string import String
3
3
 
4
4
  class Date(String):
5
5
  _format = "date"
6
-
7
- def __init__(self, name, example=None, value=None):
8
- super().__init__(name, example=example, value=value)
@@ -1,8 +1,5 @@
1
1
  from .string import String
2
2
 
3
3
 
4
- class DateTime(String):
4
+ class Datetime(String):
5
5
  _format = "date-time"
6
-
7
- def __init__(self, name, example=None, value=None):
8
- super().__init__(name, example=example, value=value)
@@ -3,6 +3,3 @@ from .number import Number
3
3
 
4
4
  class Double(Number):
5
5
  _format = "double"
6
-
7
- def __init__(self, name, example=None, value=None):
8
- super().__init__(name, example=example, value=value)
@@ -1,5 +1,7 @@
1
- class Enum:
2
- name = None
1
+ from .schema import Schema
2
+
3
+
4
+ class Enum(Schema):
3
5
  values = None
4
6
  value_type = None
5
7
  example = None
@@ -1,11 +1,6 @@
1
- class Integer:
2
- name = None
3
- example = None
4
- value = None
1
+ from .schema import Schema
2
+
3
+
4
+ class Integer(Schema):
5
5
  _type = "integer"
6
6
  _format = "int32"
7
-
8
- def __init__(self, name, example=None, value=None):
9
- self.name = name
10
- self.example = example
11
- self.value = value
@@ -3,6 +3,3 @@ from .integer import Integer
3
3
 
4
4
  class Long(Integer):
5
5
  _format = "int64"
6
-
7
- def __init__(self, name, example=None, value=None):
8
- super().__init__(name, example=example, value=value)
@@ -1,11 +1,6 @@
1
- class Number:
2
- name = None
3
- example = None
4
- value = None
1
+ from .schema import Schema
2
+
3
+
4
+ class Number(Schema):
5
5
  _type = "number"
6
6
  _format = "float"
7
-
8
- def __init__(self, name, example=None, value=None):
9
- self.name = name
10
- self.example = example
11
- self.value = value
@@ -1,15 +1,13 @@
1
- class Object:
2
- name = None
1
+ from .schema import Schema
2
+
3
+
4
+ class Object(Schema):
3
5
  children = None
4
- value = None
5
- example = None
6
6
  model_name = None
7
7
  _type = "object"
8
8
  _format = ""
9
9
 
10
10
  def __init__(self, name, children, value=None, example=None, model_name=None):
11
- self.name = name
11
+ super().__init__(name, example=example, value=value)
12
12
  self.children = children
13
- self.value = value
14
- self.example = example
15
13
  self.model_name = model_name
@@ -3,6 +3,3 @@ from .string import String
3
3
 
4
4
  class Password(String):
5
5
  _format = "password"
6
-
7
- def __init__(self, name, example=None, value=None):
8
- super().__init__(name, example=example, value=value)
@@ -0,0 +1,11 @@
1
+ class Schema:
2
+ name = None
3
+ example = None
4
+ value = None
5
+ _type = "string"
6
+ _format = ""
7
+
8
+ def __init__(self, name, example=None, value=None):
9
+ self.name = name
10
+ self.example = example
11
+ self.value = value
@@ -1,11 +1,5 @@
1
- class String:
2
- name = None
3
- example = None
4
- value = None
5
- _type = "string"
6
- _format = ""
1
+ from .schema import Schema
7
2
 
8
- def __init__(self, name, example=None, value=None):
9
- self.name = name
10
- self.example = example
11
- self.value = value
3
+
4
+ class String(Schema):
5
+ pass
@@ -1,30 +1,65 @@
1
- from .. import binding_config
2
- from .api_backend import ApiBackend
3
- from .api_get_only_backend import ApiGetOnlyBackend
4
- from .backend import Backend
5
- from .cursor_backend import CursorBackend
6
- from .example_backend import ExampleBackend
7
- from .file_backend import FileBackend
8
- from .json_backend import JsonBackend
9
- from .memory_backend import MemoryBackend
10
- from .restful_api_advanced_search_backend import RestfulApiAdvancedSearchBackend
11
- from .secrets_backend import SecretsBackend
1
+ """
2
+ The backend system provides a layer of abstraction between a clearskies model and the place where it stores its data.
12
3
 
4
+ ## Motivation
13
5
 
14
- def example_backend(data):
15
- return binding_config.BindingConfig(ExampleBackend, data=data)
6
+ The goal of the backend system is to create a standard way to interact with external systems, whether those are
7
+ databases, APIs, cloud resources, etc... For comparison, models in other frameworks typically interact exclusively
8
+ with SQL databases. Therefore, building integrations with other data stores or 3rd party systems requires the
9
+ creation of bespoke SDKs, which results in time spent integrating and learning how to use them. Clearskies models
10
+ work with different backends to normalize the process of integrating with data stores and external systems.
11
+ This ability to switch backends turns the models, in essence, into a standardized SDK. The details of how to
12
+ interact with some other system are abstracted away into the backend, and then developers can interact with the
13
+ system using models in the standard way.
14
+
15
+ Of course, no abstraction layer is perfect, and not all datastores can fit into the backend system provided by
16
+ clearskies. That's okay! Like every abstraction layer in clearskies, you should use it when it works for
17
+ you and forget about it otherwise. So, for instance, it is not possible to build arbitrarily complex SQL
18
+ queries with the query system provided by models, but you can always inject the cursor and use it directly.
19
+ If some arbitrary data store just works in a completely different way, such that the backend system doesn't
20
+ work for it, it's still fine to build an SDK the "old school" way and use it in a clearskies application.
21
+
22
+ ## Backends
23
+
24
+ There are four primary kinds of backends built into clearskies, with a few sub-types. Those are:
25
+
26
+ 1. CursorBackend: Store data in an SQL-like database
27
+ 2. MemoryBackend: Store data in-memory
28
+ 3. ApiBackend: Use an API to fetch and store data
29
+ 1. ApiGetOnlyBackend: Only supports fetching individual records from the API by id.
30
+ 2. RestfulApiAdvancedSearchBackend: Automatically integrates with APIs built using clearskies.endpoints.RestfulApi
31
+ 4. SecretsBackend - Store data directly in a secrets manager
32
+
33
+ See the documentation for each backend to understand how to configure and use it. In all cases though, you specify
34
+ the backend by instantiating the backend and attaching it to the model class via the `backend` attribute:
35
+
36
+ ```python
37
+ import clearskies
38
+
39
+
40
+ class MyModel(clearskies.model):
41
+ backend = clearskies.backends.MemoryBackend()
42
+ ```
43
+ """
44
+
45
+ # from .api_backend import ApiBackend
46
+ # from .api_get_only_backend import ApiGetOnlyBackend
47
+ from clearskies.backends.api_backend import ApiBackend
48
+ from clearskies.backends.backend import Backend
49
+ from clearskies.backends.cursor_backend import CursorBackend
50
+ from clearskies.backends.memory_backend import MemoryBackend
51
+
52
+ # from .memory_backend import MemoryBackend
53
+ # from .restful_api_advanced_search_backend import RestfulApiAdvancedSearchBackend
54
+ # from .secrets_backend import SecretsBackend
16
55
 
17
56
 
18
57
  __all__ = [
19
58
  "ApiBackend",
20
- "ApiGetOnlyBackend",
59
+ # "ApiGetOnlyBackend",
21
60
  "Backend",
22
61
  "CursorBackend",
23
- "ExampleBackend",
24
- "example_backend",
25
- "FileBackend",
26
- "JsonBackend",
27
62
  "MemoryBackend",
28
- "RestfulApiAdvancedSearchBackend",
29
- "SecretsBackend",
63
+ # "RestfulApiAdvancedSearchBackend",
64
+ # "SecretsBackend",
30
65
  ]