clear-skies 0.0.3a0__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 (248) hide show
  1. clear_skies-0.0.3a0.dist-info/LICENSE +7 -0
  2. clear_skies-0.0.3a0.dist-info/METADATA +46 -0
  3. clear_skies-0.0.3a0.dist-info/RECORD +248 -0
  4. clear_skies-0.0.3a0.dist-info/WHEEL +4 -0
  5. clearskies/__init__.py +62 -0
  6. clearskies/action.py +7 -0
  7. clearskies/authentication/__init__.py +15 -0
  8. clearskies/authentication/authentication.py +42 -0
  9. clearskies/authentication/authorization.py +12 -0
  10. clearskies/authentication/authorization_pass_through.py +20 -0
  11. clearskies/authentication/jwks.py +158 -0
  12. clearskies/authentication/public.py +5 -0
  13. clearskies/authentication/secret_bearer.py +553 -0
  14. clearskies/autodoc/__init__.py +8 -0
  15. clearskies/autodoc/formats/__init__.py +5 -0
  16. clearskies/autodoc/formats/oai3_json/__init__.py +7 -0
  17. clearskies/autodoc/formats/oai3_json/oai3_json.py +87 -0
  18. clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +15 -0
  19. clearskies/autodoc/formats/oai3_json/parameter.py +35 -0
  20. clearskies/autodoc/formats/oai3_json/request.py +68 -0
  21. clearskies/autodoc/formats/oai3_json/response.py +28 -0
  22. clearskies/autodoc/formats/oai3_json/schema/__init__.py +11 -0
  23. clearskies/autodoc/formats/oai3_json/schema/array.py +9 -0
  24. clearskies/autodoc/formats/oai3_json/schema/default.py +13 -0
  25. clearskies/autodoc/formats/oai3_json/schema/enum.py +7 -0
  26. clearskies/autodoc/formats/oai3_json/schema/object.py +29 -0
  27. clearskies/autodoc/formats/oai3_json/test.json +1985 -0
  28. clearskies/autodoc/py.typed +0 -0
  29. clearskies/autodoc/request/__init__.py +15 -0
  30. clearskies/autodoc/request/header.py +6 -0
  31. clearskies/autodoc/request/json_body.py +6 -0
  32. clearskies/autodoc/request/parameter.py +8 -0
  33. clearskies/autodoc/request/request.py +38 -0
  34. clearskies/autodoc/request/url_parameter.py +6 -0
  35. clearskies/autodoc/request/url_path.py +6 -0
  36. clearskies/autodoc/response/__init__.py +5 -0
  37. clearskies/autodoc/response/response.py +9 -0
  38. clearskies/autodoc/schema/__init__.py +31 -0
  39. clearskies/autodoc/schema/array.py +10 -0
  40. clearskies/autodoc/schema/base64.py +8 -0
  41. clearskies/autodoc/schema/boolean.py +5 -0
  42. clearskies/autodoc/schema/date.py +5 -0
  43. clearskies/autodoc/schema/datetime.py +5 -0
  44. clearskies/autodoc/schema/double.py +5 -0
  45. clearskies/autodoc/schema/enum.py +17 -0
  46. clearskies/autodoc/schema/integer.py +6 -0
  47. clearskies/autodoc/schema/long.py +5 -0
  48. clearskies/autodoc/schema/number.py +6 -0
  49. clearskies/autodoc/schema/object.py +13 -0
  50. clearskies/autodoc/schema/password.py +5 -0
  51. clearskies/autodoc/schema/schema.py +11 -0
  52. clearskies/autodoc/schema/string.py +5 -0
  53. clearskies/backends/__init__.py +65 -0
  54. clearskies/backends/api_backend.py +1178 -0
  55. clearskies/backends/backend.py +123 -0
  56. clearskies/backends/cursor_backend.py +335 -0
  57. clearskies/backends/memory_backend.py +797 -0
  58. clearskies/backends/secrets_backend.py +107 -0
  59. clearskies/column.py +1232 -0
  60. clearskies/columns/__init__.py +71 -0
  61. clearskies/columns/audit.py +205 -0
  62. clearskies/columns/belongs_to_id.py +483 -0
  63. clearskies/columns/belongs_to_model.py +128 -0
  64. clearskies/columns/belongs_to_self.py +105 -0
  65. clearskies/columns/boolean.py +109 -0
  66. clearskies/columns/category_tree.py +275 -0
  67. clearskies/columns/category_tree_ancestors.py +51 -0
  68. clearskies/columns/category_tree_children.py +127 -0
  69. clearskies/columns/category_tree_descendants.py +48 -0
  70. clearskies/columns/created.py +94 -0
  71. clearskies/columns/created_by_authorization_data.py +116 -0
  72. clearskies/columns/created_by_header.py +99 -0
  73. clearskies/columns/created_by_ip.py +92 -0
  74. clearskies/columns/created_by_routing_data.py +96 -0
  75. clearskies/columns/created_by_user_agent.py +92 -0
  76. clearskies/columns/date.py +230 -0
  77. clearskies/columns/datetime.py +278 -0
  78. clearskies/columns/email.py +76 -0
  79. clearskies/columns/float.py +149 -0
  80. clearskies/columns/has_many.py +505 -0
  81. clearskies/columns/has_many_self.py +56 -0
  82. clearskies/columns/has_one.py +14 -0
  83. clearskies/columns/integer.py +156 -0
  84. clearskies/columns/json.py +122 -0
  85. clearskies/columns/many_to_many_ids.py +333 -0
  86. clearskies/columns/many_to_many_ids_with_data.py +270 -0
  87. clearskies/columns/many_to_many_models.py +154 -0
  88. clearskies/columns/many_to_many_pivots.py +133 -0
  89. clearskies/columns/phone.py +158 -0
  90. clearskies/columns/select.py +91 -0
  91. clearskies/columns/string.py +98 -0
  92. clearskies/columns/timestamp.py +160 -0
  93. clearskies/columns/updated.py +110 -0
  94. clearskies/columns/uuid.py +86 -0
  95. clearskies/configs/README.md +105 -0
  96. clearskies/configs/__init__.py +159 -0
  97. clearskies/configs/actions.py +43 -0
  98. clearskies/configs/any.py +13 -0
  99. clearskies/configs/any_dict.py +22 -0
  100. clearskies/configs/any_dict_or_callable.py +23 -0
  101. clearskies/configs/authentication.py +23 -0
  102. clearskies/configs/authorization.py +23 -0
  103. clearskies/configs/boolean.py +16 -0
  104. clearskies/configs/boolean_or_callable.py +18 -0
  105. clearskies/configs/callable_config.py +18 -0
  106. clearskies/configs/columns.py +34 -0
  107. clearskies/configs/conditions.py +30 -0
  108. clearskies/configs/config.py +21 -0
  109. clearskies/configs/datetime.py +18 -0
  110. clearskies/configs/datetime_or_callable.py +19 -0
  111. clearskies/configs/endpoint.py +23 -0
  112. clearskies/configs/float.py +16 -0
  113. clearskies/configs/float_or_callable.py +18 -0
  114. clearskies/configs/integer.py +16 -0
  115. clearskies/configs/integer_or_callable.py +18 -0
  116. clearskies/configs/joins.py +30 -0
  117. clearskies/configs/list_any_dict.py +30 -0
  118. clearskies/configs/list_any_dict_or_callable.py +31 -0
  119. clearskies/configs/model_class.py +35 -0
  120. clearskies/configs/model_column.py +65 -0
  121. clearskies/configs/model_columns.py +56 -0
  122. clearskies/configs/model_destination_name.py +25 -0
  123. clearskies/configs/model_to_id_column.py +43 -0
  124. clearskies/configs/readable_model_column.py +9 -0
  125. clearskies/configs/readable_model_columns.py +9 -0
  126. clearskies/configs/schema.py +23 -0
  127. clearskies/configs/searchable_model_columns.py +9 -0
  128. clearskies/configs/security_headers.py +39 -0
  129. clearskies/configs/select.py +26 -0
  130. clearskies/configs/select_list.py +47 -0
  131. clearskies/configs/string.py +29 -0
  132. clearskies/configs/string_dict.py +32 -0
  133. clearskies/configs/string_list.py +32 -0
  134. clearskies/configs/string_list_or_callable.py +35 -0
  135. clearskies/configs/string_or_callable.py +18 -0
  136. clearskies/configs/timedelta.py +18 -0
  137. clearskies/configs/timezone.py +18 -0
  138. clearskies/configs/url.py +23 -0
  139. clearskies/configs/validators.py +45 -0
  140. clearskies/configs/writeable_model_column.py +9 -0
  141. clearskies/configs/writeable_model_columns.py +9 -0
  142. clearskies/configurable.py +76 -0
  143. clearskies/contexts/__init__.py +11 -0
  144. clearskies/contexts/cli.py +7 -0
  145. clearskies/contexts/context.py +84 -0
  146. clearskies/contexts/wsgi.py +16 -0
  147. clearskies/contexts/wsgi_ref.py +49 -0
  148. clearskies/di/__init__.py +14 -0
  149. clearskies/di/additional_config.py +130 -0
  150. clearskies/di/additional_config_auto_import.py +17 -0
  151. clearskies/di/di.py +968 -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 +1309 -0
  170. clearskies/endpoint_group.py +297 -0
  171. clearskies/endpoints/__init__.py +23 -0
  172. clearskies/endpoints/advanced_search.py +526 -0
  173. clearskies/endpoints/callable.py +387 -0
  174. clearskies/endpoints/create.py +202 -0
  175. clearskies/endpoints/delete.py +139 -0
  176. clearskies/endpoints/get.py +275 -0
  177. clearskies/endpoints/health_check.py +181 -0
  178. clearskies/endpoints/list.py +573 -0
  179. clearskies/endpoints/restful_api.py +427 -0
  180. clearskies/endpoints/simple_search.py +286 -0
  181. clearskies/endpoints/update.py +190 -0
  182. clearskies/environment.py +104 -0
  183. clearskies/exceptions/__init__.py +17 -0
  184. clearskies/exceptions/authentication.py +2 -0
  185. clearskies/exceptions/authorization.py +2 -0
  186. clearskies/exceptions/client_error.py +2 -0
  187. clearskies/exceptions/input_errors.py +4 -0
  188. clearskies/exceptions/moved_permanently.py +3 -0
  189. clearskies/exceptions/moved_temporarily.py +3 -0
  190. clearskies/exceptions/not_found.py +2 -0
  191. clearskies/functional/__init__.py +7 -0
  192. clearskies/functional/routing.py +92 -0
  193. clearskies/functional/string.py +112 -0
  194. clearskies/functional/validations.py +76 -0
  195. clearskies/input_outputs/__init__.py +13 -0
  196. clearskies/input_outputs/cli.py +170 -0
  197. clearskies/input_outputs/exceptions/__init__.py +2 -0
  198. clearskies/input_outputs/exceptions/cli_input_error.py +2 -0
  199. clearskies/input_outputs/exceptions/cli_not_found.py +2 -0
  200. clearskies/input_outputs/headers.py +45 -0
  201. clearskies/input_outputs/input_output.py +138 -0
  202. clearskies/input_outputs/programmatic.py +69 -0
  203. clearskies/input_outputs/py.typed +0 -0
  204. clearskies/input_outputs/wsgi.py +77 -0
  205. clearskies/model.py +662 -0
  206. clearskies/parameters_to_properties.py +31 -0
  207. clearskies/py.typed +0 -0
  208. clearskies/query/__init__.py +12 -0
  209. clearskies/query/condition.py +223 -0
  210. clearskies/query/join.py +136 -0
  211. clearskies/query/query.py +196 -0
  212. clearskies/query/sort.py +27 -0
  213. clearskies/schema.py +82 -0
  214. clearskies/secrets/__init__.py +6 -0
  215. clearskies/secrets/additional_configs/__init__.py +32 -0
  216. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +61 -0
  217. clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +160 -0
  218. clearskies/secrets/akeyless.py +182 -0
  219. clearskies/secrets/exceptions/__init__.py +1 -0
  220. clearskies/secrets/exceptions/not_found.py +2 -0
  221. clearskies/secrets/secrets.py +38 -0
  222. clearskies/security_header.py +8 -0
  223. clearskies/security_headers/__init__.py +11 -0
  224. clearskies/security_headers/cache_control.py +67 -0
  225. clearskies/security_headers/cors.py +50 -0
  226. clearskies/security_headers/csp.py +94 -0
  227. clearskies/security_headers/hsts.py +22 -0
  228. clearskies/security_headers/x_content_type_options.py +0 -0
  229. clearskies/security_headers/x_frame_options.py +0 -0
  230. clearskies/test_base.py +8 -0
  231. clearskies/typing.py +11 -0
  232. clearskies/validator.py +25 -0
  233. clearskies/validators/__init__.py +33 -0
  234. clearskies/validators/after_column.py +62 -0
  235. clearskies/validators/before_column.py +13 -0
  236. clearskies/validators/in_the_future.py +32 -0
  237. clearskies/validators/in_the_future_at_least.py +11 -0
  238. clearskies/validators/in_the_future_at_most.py +10 -0
  239. clearskies/validators/in_the_past.py +32 -0
  240. clearskies/validators/in_the_past_at_least.py +10 -0
  241. clearskies/validators/in_the_past_at_most.py +10 -0
  242. clearskies/validators/maximum_length.py +26 -0
  243. clearskies/validators/maximum_value.py +29 -0
  244. clearskies/validators/minimum_length.py +26 -0
  245. clearskies/validators/minimum_value.py +29 -0
  246. clearskies/validators/required.py +35 -0
  247. clearskies/validators/timedelta.py +59 -0
  248. clearskies/validators/unique.py +31 -0
@@ -0,0 +1,69 @@
1
+ from typing import Any
2
+
3
+ from clearskies.input_outputs.input_output import InputOutput
4
+
5
+ from .headers import Headers
6
+
7
+
8
+ class Programmatic(InputOutput):
9
+ _body: str | dict[str, Any] | list[Any] = ""
10
+ _request_method: str = ""
11
+ _request_headers: dict[str, Any] = {}
12
+ url: str = ""
13
+
14
+ def __init__(
15
+ self,
16
+ url: str = "",
17
+ request_method: str = "GET",
18
+ body: str | dict[str, Any] | list[Any] = "",
19
+ query_parameters: dict[str, Any] = {},
20
+ request_headers: dict[str, str] = {},
21
+ ):
22
+ self.url = url
23
+ self._request_headers = {**request_headers}
24
+ self._body_loaded_as_json = True
25
+ self._body_as_json = None
26
+ self._request_method = request_method
27
+ if body:
28
+ self._body = body
29
+ if isinstance(body, dict) or isinstance(body, list):
30
+ self._body_as_json = body
31
+
32
+ super().__init__()
33
+ self.query_parameters = {**query_parameters}
34
+
35
+ def respond(self, response, status_code=200):
36
+ return (status_code, response, self.response_headers)
37
+
38
+ def get_script_name(self):
39
+ return self.url
40
+
41
+ def get_path_info(self):
42
+ return self.url
43
+
44
+ def get_full_path(self):
45
+ return self.url
46
+
47
+ def get_request_method(self):
48
+ return self._request_method
49
+
50
+ def has_body(self):
51
+ return bool(self._body)
52
+
53
+ def get_body(self):
54
+ if not self.has_body():
55
+ return ""
56
+
57
+ return self._body
58
+
59
+ def context_specifics(self):
60
+ return {}
61
+
62
+ def get_client_ip(self):
63
+ return "127.0.0.1"
64
+
65
+ def get_query_string(self):
66
+ return ""
67
+
68
+ def get_request_headers(self):
69
+ return self._request_headers
File without changes
@@ -0,0 +1,77 @@
1
+ import json
2
+ import urllib
3
+ import urllib.parse
4
+ from typing import Callable
5
+
6
+ from .input_output import InputOutput
7
+
8
+
9
+ class Wsgi(InputOutput):
10
+ _environment: dict[str, str] = {}
11
+ _start_response: Callable = None # type: ignore
12
+ _request_headers: dict[str, str] = {}
13
+ _cached_body: str | None = None
14
+
15
+ def __init__(self, environment, start_response):
16
+ self._environment = environment
17
+ self._start_response = start_response
18
+ self._request_headers = {}
19
+ for key, value in self._environment.items():
20
+ if key.upper()[0:5] == "HTTP_":
21
+ self._request_headers[key[5:].lower()] = value
22
+ super().__init__()
23
+
24
+ def _from_environment(self, key):
25
+ return self._environment[key] if key in self._environment else ""
26
+
27
+ def respond(self, body, status_code=200):
28
+ if "content-type" not in self.response_headers:
29
+ self.response_headers.content_type = "application/json; charset=UTF-8"
30
+
31
+ self._start_response(f"{status_code} Ok", [header for header in self.response_headers.items()]) # type: ignore
32
+ if type(body) == bytes:
33
+ final_body = body
34
+ elif type(body) == str:
35
+ final_body = body.encode("utf-8")
36
+ else:
37
+ final_body = json.dumps(body).encode("utf-8")
38
+ return [final_body]
39
+
40
+ def has_body(self):
41
+ return bool(self._from_environment("CONTENT_LENGTH"))
42
+
43
+ def get_body(self):
44
+ if self._cached_body is None:
45
+ self._cached_body = (
46
+ self._from_environment("wsgi.input").read(int(self._from_environment("CONTENT_LENGTH"))).decode("utf-8")
47
+ if self._from_environment("CONTENT_LENGTH")
48
+ else ""
49
+ )
50
+ return self._cached_body
51
+
52
+ def get_request_method(self):
53
+ return self._from_environment("REQUEST_METHOD").upper()
54
+
55
+ def get_script_name(self):
56
+ return self._from_environment("SCRIPT_NAME")
57
+
58
+ def get_path_info(self):
59
+ return self._from_environment("PATH_INFO")
60
+
61
+ def get_query_string(self):
62
+ return self._from_environment("QUERY_STRING")
63
+
64
+ def get_content_type(self):
65
+ return self._from_environment("CONTENT_TYPE")
66
+
67
+ def get_protocol(self):
68
+ return self._from_environment("wsgi.url_scheme").lower()
69
+
70
+ def context_specifics(self):
71
+ return {"wsgi_environment": self._environment}
72
+
73
+ def get_client_ip(self):
74
+ return self._environment.get("REMOTE_ADDR")
75
+
76
+ def get_request_headers(self):
77
+ return self._request_headers