clear-skies 2.0.7__py3-none-any.whl → 2.0.8__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 (148) hide show
  1. {clear_skies-2.0.7.dist-info → clear_skies-2.0.8.dist-info}/METADATA +1 -1
  2. clear_skies-2.0.8.dist-info/RECORD +252 -0
  3. clearskies/__init__.py +2 -2
  4. clearskies/authentication/authentication.py +1 -3
  5. clearskies/authentication/authorization.py +12 -5
  6. clearskies/authentication/authorization_pass_through.py +5 -3
  7. clearskies/authentication/jwks.py +25 -23
  8. clearskies/authentication/secret_bearer.py +15 -17
  9. clearskies/autodoc/schema/schema.py +1 -1
  10. clearskies/backends/api_backend.py +50 -56
  11. clearskies/backends/backend.py +14 -14
  12. clearskies/backends/cursor_backend.py +17 -23
  13. clearskies/backends/memory_backend.py +27 -30
  14. clearskies/backends/secrets_backend.py +13 -18
  15. clearskies/column.py +44 -56
  16. clearskies/columns/audit.py +14 -13
  17. clearskies/columns/belongs_to_id.py +10 -15
  18. clearskies/columns/belongs_to_model.py +6 -9
  19. clearskies/columns/belongs_to_self.py +13 -9
  20. clearskies/columns/boolean.py +13 -16
  21. clearskies/columns/category_tree.py +9 -11
  22. clearskies/columns/category_tree_children.py +2 -3
  23. clearskies/columns/category_tree_descendants.py +1 -1
  24. clearskies/columns/created.py +8 -11
  25. clearskies/columns/created_by_authorization_data.py +7 -9
  26. clearskies/columns/created_by_header.py +12 -8
  27. clearskies/columns/created_by_ip.py +6 -8
  28. clearskies/columns/created_by_routing_data.py +12 -7
  29. clearskies/columns/created_by_user_agent.py +6 -9
  30. clearskies/columns/date.py +12 -14
  31. clearskies/columns/datetime.py +19 -17
  32. clearskies/columns/email.py +3 -1
  33. clearskies/columns/float.py +10 -14
  34. clearskies/columns/has_many.py +8 -10
  35. clearskies/columns/has_many_self.py +13 -7
  36. clearskies/columns/has_one.py +2 -0
  37. clearskies/columns/integer.py +9 -11
  38. clearskies/columns/json.py +10 -12
  39. clearskies/columns/many_to_many_ids.py +14 -16
  40. clearskies/columns/many_to_many_ids_with_data.py +16 -16
  41. clearskies/columns/many_to_many_models.py +5 -7
  42. clearskies/columns/many_to_many_pivots.py +3 -5
  43. clearskies/columns/phone.py +12 -9
  44. clearskies/columns/select.py +12 -9
  45. clearskies/columns/string.py +1 -1
  46. clearskies/columns/timestamp.py +15 -15
  47. clearskies/columns/updated.py +8 -10
  48. clearskies/columns/uuid.py +7 -10
  49. clearskies/configs/any.py +2 -0
  50. clearskies/configs/any_dict.py +2 -0
  51. clearskies/configs/any_dict_or_callable.py +2 -0
  52. clearskies/configs/boolean.py +2 -0
  53. clearskies/configs/boolean_or_callable.py +2 -0
  54. clearskies/configs/callable_config.py +2 -0
  55. clearskies/configs/config.py +2 -0
  56. clearskies/configs/datetime.py +2 -0
  57. clearskies/configs/datetime_or_callable.py +2 -0
  58. clearskies/configs/float.py +2 -0
  59. clearskies/configs/float_or_callable.py +2 -0
  60. clearskies/configs/integer.py +2 -0
  61. clearskies/configs/integer_or_callable.py +2 -0
  62. clearskies/configs/list_any_dict.py +2 -0
  63. clearskies/configs/list_any_dict_or_callable.py +2 -0
  64. clearskies/configs/model_column.py +2 -0
  65. clearskies/configs/model_columns.py +2 -0
  66. clearskies/configs/model_destination_name.py +2 -1
  67. clearskies/configs/model_to_id_column.py +2 -0
  68. clearskies/configs/readable_model_column.py +2 -0
  69. clearskies/configs/readable_model_columns.py +2 -0
  70. clearskies/configs/searchable_model_columns.py +2 -0
  71. clearskies/configs/select.py +2 -0
  72. clearskies/configs/select_list.py +2 -0
  73. clearskies/configs/string.py +2 -0
  74. clearskies/configs/string_dict.py +2 -0
  75. clearskies/configs/string_list.py +2 -0
  76. clearskies/configs/string_list_or_callable.py +2 -0
  77. clearskies/configs/timedelta.py +2 -0
  78. clearskies/configs/timezone.py +2 -0
  79. clearskies/configs/url.py +2 -0
  80. clearskies/configs/writeable_model_column.py +2 -0
  81. clearskies/configs/writeable_model_columns.py +2 -0
  82. clearskies/configurable.py +2 -0
  83. clearskies/contexts/cli.py +9 -1
  84. clearskies/contexts/context.py +13 -14
  85. clearskies/contexts/wsgi.py +12 -10
  86. clearskies/contexts/wsgi_ref.py +12 -6
  87. clearskies/decorators.py +1 -1
  88. clearskies/decorators.pyi +10 -0
  89. clearskies/di/di.py +7 -6
  90. clearskies/di/inject/by_class.py +2 -0
  91. clearskies/di/inject/by_name.py +2 -0
  92. clearskies/di/inject/di.py +2 -0
  93. clearskies/di/inject/environment.py +1 -1
  94. clearskies/di/inject/now.py +2 -0
  95. clearskies/di/inject/requests.py +2 -0
  96. clearskies/di/inject/secrets.py +2 -2
  97. clearskies/di/inject/utcnow.py +2 -0
  98. clearskies/di/inject/uuid.py +2 -2
  99. clearskies/end.py +45 -7
  100. clearskies/endpoint.py +43 -59
  101. clearskies/endpoint_group.py +15 -18
  102. clearskies/endpoints/advanced_search.py +19 -26
  103. clearskies/endpoints/callable.py +10 -16
  104. clearskies/endpoints/create.py +6 -10
  105. clearskies/endpoints/delete.py +5 -11
  106. clearskies/endpoints/get.py +11 -15
  107. clearskies/endpoints/health_check.py +9 -11
  108. clearskies/endpoints/list.py +29 -36
  109. clearskies/endpoints/restful_api.py +43 -53
  110. clearskies/endpoints/schema.py +14 -18
  111. clearskies/endpoints/simple_search.py +5 -12
  112. clearskies/endpoints/update.py +6 -11
  113. clearskies/environment.py +2 -0
  114. clearskies/input_outputs/cli.py +2 -0
  115. clearskies/input_outputs/headers.py +2 -0
  116. clearskies/input_outputs/input_output.py +15 -15
  117. clearskies/input_outputs/programmatic.py +2 -2
  118. clearskies/input_outputs/wsgi.py +2 -2
  119. clearskies/model.py +120 -25
  120. clearskies/query/query.py +1 -4
  121. clearskies/secrets/__init__.py +2 -1
  122. clearskies/secrets/akeyless.py +12 -10
  123. clearskies/secrets/secrets.py +7 -2
  124. clearskies/security_header.py +4 -2
  125. clearskies/security_headers/cache_control.py +15 -14
  126. clearskies/security_headers/cors.py +10 -9
  127. clearskies/security_headers/csp.py +25 -24
  128. clearskies/security_headers/hsts.py +6 -5
  129. clearskies/typing.py +1 -1
  130. clearskies/validator.py +5 -6
  131. clearskies/validators/after_column.py +6 -7
  132. clearskies/validators/before_column.py +2 -0
  133. clearskies/validators/in_the_future.py +5 -8
  134. clearskies/validators/in_the_future_at_least.py +2 -0
  135. clearskies/validators/in_the_future_at_most.py +2 -0
  136. clearskies/validators/in_the_past.py +5 -8
  137. clearskies/validators/in_the_past_at_least.py +2 -0
  138. clearskies/validators/in_the_past_at_most.py +2 -0
  139. clearskies/validators/maximum_length.py +4 -5
  140. clearskies/validators/maximum_value.py +4 -4
  141. clearskies/validators/minimum_length.py +4 -4
  142. clearskies/validators/minimum_value.py +4 -4
  143. clearskies/validators/required.py +2 -4
  144. clearskies/validators/timedelta.py +8 -9
  145. clearskies/validators/unique.py +2 -3
  146. clear_skies-2.0.7.dist-info/RECORD +0 -251
  147. {clear_skies-2.0.7.dist-info → clear_skies-2.0.8.dist-info}/WHEEL +0 -0
  148. {clear_skies-2.0.7.dist-info → clear_skies-2.0.8.dist-info}/licenses/LICENSE +0 -0
@@ -1,19 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
- import inspect
4
- from collections import OrderedDict
5
3
  from typing import TYPE_CHECKING, Any, Callable
6
4
 
7
- import clearskies.configs
8
- import clearskies.exceptions
9
- from clearskies import authentication, autodoc, typing
5
+ from clearskies import authentication, autodoc, decorators, exceptions
10
6
  from clearskies.endpoints.list import List
11
- from clearskies.functional import string
12
- from clearskies.input_outputs import InputOutput
13
7
 
14
8
  if TYPE_CHECKING:
15
- from clearskies import Column, Schema, SecurityHeader
16
- from clearskies.model import Model
9
+ from clearskies import Column, Model, Schema, SecurityHeader, typing
17
10
 
18
11
 
19
12
  class SimpleSearch(List):
@@ -194,7 +187,7 @@ class SimpleSearch(List):
194
187
  ```
195
188
  """
196
189
 
197
- @clearskies.decorators.parameters_to_properties
190
+ @decorators.parameters_to_properties
198
191
  def __init__(
199
192
  self,
200
193
  model_class: type[Model],
@@ -233,7 +226,7 @@ class SimpleSearch(List):
233
226
  if column_name in self.allowed_request_keys and column_name not in self.searchable_column_names:
234
227
  continue
235
228
  if column_name not in self.searchable_column_names:
236
- raise clearskies.exceptions.ClientError(
229
+ raise exceptions.ClientError(
237
230
  f"Invalid request parameter found in {input_source_label}: '{column_name}'"
238
231
  )
239
232
  [relationship_column_name, final_column_name] = self.unpack_column_name_with_relationship(column_name)
@@ -242,7 +235,7 @@ class SimpleSearch(List):
242
235
  value, relationship_reference=final_column_name
243
236
  )
244
237
  if value_error:
245
- raise clearskies.exceptions.InputErrors({column_name: value_error})
238
+ raise exceptions.InputErrors({column_name: value_error})
246
239
 
247
240
  def configure_model_from_request_data(
248
241
  self,
@@ -1,19 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
- import inspect
4
- from collections import OrderedDict
5
- from typing import TYPE_CHECKING, Any, Callable, Type
3
+ from typing import TYPE_CHECKING, Any, Callable
6
4
 
7
- import clearskies.configs
8
- import clearskies.exceptions
9
- from clearskies import authentication, autodoc, typing
5
+ from clearskies import authentication, autodoc, decorators, exceptions
10
6
  from clearskies.endpoints.get import Get
11
- from clearskies.functional import routing, string
7
+ from clearskies.functional import string
12
8
  from clearskies.input_outputs import InputOutput
13
9
 
14
10
  if TYPE_CHECKING:
15
- from clearskies import SecurityHeader
16
- from clearskies.model import Column, Model, Schema
11
+ from clearskies import Column, Model, Schema, SecurityHeader, typing
17
12
 
18
13
 
19
14
  class Update(Get):
@@ -90,7 +85,7 @@ class Update(Get):
90
85
  }
91
86
  """
92
87
 
93
- @clearskies.decorators.parameters_to_properties
88
+ @decorators.parameters_to_properties
94
89
  def __init__(
95
90
  self,
96
91
  model_class: type[Model],
@@ -124,7 +119,7 @@ class Update(Get):
124
119
  def handle(self, input_output: InputOutput) -> Any:
125
120
  request_data = self.get_request_data(input_output)
126
121
  if not request_data and input_output.has_body():
127
- raise clearskies.exceptions.ClientError("Request body was not valid JSON")
122
+ raise exceptions.ClientError("Request body was not valid JSON")
128
123
  model = self.fetch_model(input_output)
129
124
  self.validate_input_against_schema(request_data, input_output, model)
130
125
  model.save(request_data)
clearskies/environment.py CHANGED
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import os.path
2
4
  from typing import Any
3
5
 
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import json
2
4
  import sys
3
5
  from os import isatty
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import re
2
4
 
3
5
 
@@ -1,38 +1,38 @@
1
+ from __future__ import annotations
2
+
1
3
  import json
2
4
  from abc import ABC, abstractmethod
3
- from typing import Any
5
+ from typing import TYPE_CHECKING, Any
4
6
  from urllib.parse import parse_qs
5
7
 
6
- import clearskies.configurable
7
- import clearskies.typing
8
- from clearskies.configs import AnyDict, StringDict
9
- from clearskies.exceptions import ClientError
8
+ from clearskies import configs, configurable, input_outputs
10
9
 
11
- from .headers import Headers
10
+ if TYPE_CHECKING:
11
+ from clearskies import typing
12
12
 
13
13
 
14
- class InputOutput(ABC, clearskies.configurable.Configurable):
14
+ class InputOutput(ABC, configurable.Configurable):
15
15
  """Manage the request and response to the client."""
16
16
 
17
- response_headers: Headers = None # type: ignore
18
- request_headers: Headers = None # type: ignore
19
- query_parameters = clearskies.configs.AnyDict(default={})
20
- routing_data = clearskies.configs.StringDict(default={})
21
- authorization_data = clearskies.configs.AnyDict(default={})
17
+ response_headers: input_outputs.Headers = None # type: ignore
18
+ request_headers: input_outputs.Headers = None # type: ignore
19
+ query_parameters = configs.AnyDict(default={})
20
+ routing_data = configs.StringDict(default={})
21
+ authorization_data = configs.AnyDict(default={})
22
22
 
23
23
  _body_as_json: dict[str, Any] | list[Any] | None = {}
24
24
  _body_loaded_as_json = False
25
25
 
26
26
  def __init__(self):
27
- self.response_headers = Headers()
28
- self.request_headers = Headers(self.get_request_headers())
27
+ self.response_headers = input_outputs.Headers()
28
+ self.request_headers = input_outputs.Headers(self.get_request_headers())
29
29
  self.query_parameters = {key: val[0] for (key, val) in parse_qs(self.get_query_string()).items()}
30
30
  self.authorization_data = {}
31
31
  self.routing_data = {}
32
32
  self.finalize_and_validate_configuration()
33
33
 
34
34
  @abstractmethod
35
- def respond(self, body: clearskies.typing.response, status_code: int = 200) -> Any:
35
+ def respond(self, body: typing.response, status_code: int = 200) -> Any:
36
36
  """
37
37
  Pass along a response to the client.
38
38
 
@@ -1,9 +1,9 @@
1
+ from __future__ import annotations
2
+
1
3
  from typing import Any
2
4
 
3
5
  from clearskies.input_outputs.input_output import InputOutput
4
6
 
5
- from .headers import Headers
6
-
7
7
 
8
8
  class Programmatic(InputOutput):
9
9
  _body: str | dict[str, Any] | list[Any] = ""
@@ -1,6 +1,6 @@
1
+ from __future__ import annotations
2
+
1
3
  import json
2
- import urllib
3
- import urllib.parse
4
4
  from typing import Callable
5
5
 
6
6
  from .input_output import InputOutput