clear-skies 2.0.0__py3-none-any.whl → 2.0.2__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 (78) hide show
  1. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/METADATA +2 -2
  2. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/RECORD +78 -77
  3. clearskies/__init__.py +5 -8
  4. clearskies/authentication/authentication.py +4 -0
  5. clearskies/authentication/authorization.py +4 -0
  6. clearskies/authentication/jwks.py +8 -3
  7. clearskies/authentication/secret_bearer.py +3 -3
  8. clearskies/backends/api_backend.py +2 -2
  9. clearskies/backends/backend.py +13 -0
  10. clearskies/backends/secrets_backend.py +0 -1
  11. clearskies/column.py +9 -8
  12. clearskies/columns/audit.py +3 -2
  13. clearskies/columns/belongs_to_id.py +2 -2
  14. clearskies/columns/belongs_to_model.py +6 -2
  15. clearskies/columns/belongs_to_self.py +2 -2
  16. clearskies/columns/boolean.py +6 -2
  17. clearskies/columns/category_tree.py +2 -2
  18. clearskies/columns/category_tree_children.py +2 -2
  19. clearskies/columns/created.py +3 -2
  20. clearskies/columns/created_by_authorization_data.py +2 -2
  21. clearskies/columns/created_by_header.py +2 -2
  22. clearskies/columns/created_by_ip.py +2 -2
  23. clearskies/columns/created_by_routing_data.py +3 -2
  24. clearskies/columns/created_by_user_agent.py +2 -2
  25. clearskies/columns/date.py +6 -2
  26. clearskies/columns/datetime.py +6 -2
  27. clearskies/columns/float.py +6 -2
  28. clearskies/columns/has_many.py +2 -2
  29. clearskies/columns/has_many_self.py +2 -2
  30. clearskies/columns/integer.py +6 -2
  31. clearskies/columns/json.py +6 -2
  32. clearskies/columns/many_to_many_ids.py +6 -2
  33. clearskies/columns/many_to_many_ids_with_data.py +6 -2
  34. clearskies/columns/many_to_many_models.py +6 -2
  35. clearskies/columns/many_to_many_pivots.py +3 -2
  36. clearskies/columns/phone.py +3 -2
  37. clearskies/columns/select.py +3 -2
  38. clearskies/columns/string.py +4 -0
  39. clearskies/columns/timestamp.py +6 -2
  40. clearskies/columns/updated.py +2 -2
  41. clearskies/columns/uuid.py +2 -2
  42. clearskies/configs/__init__.py +4 -1
  43. clearskies/configs/config.py +4 -1
  44. clearskies/configs/endpoint_list.py +28 -0
  45. clearskies/contexts/cli.py +4 -0
  46. clearskies/contexts/context.py +13 -0
  47. clearskies/contexts/wsgi.py +4 -0
  48. clearskies/contexts/wsgi_ref.py +4 -0
  49. clearskies/{parameters_to_properties.py → decorators.py} +2 -0
  50. clearskies/di/di.py +2 -2
  51. clearskies/di/injectable_properties.py +2 -2
  52. clearskies/endpoint.py +7 -6
  53. clearskies/endpoint_group.py +14 -1
  54. clearskies/endpoints/callable.py +5 -4
  55. clearskies/endpoints/create.py +1 -1
  56. clearskies/endpoints/delete.py +1 -1
  57. clearskies/endpoints/get.py +1 -1
  58. clearskies/endpoints/health_check.py +1 -1
  59. clearskies/endpoints/list.py +1 -1
  60. clearskies/endpoints/restful_api.py +2 -2
  61. clearskies/endpoints/simple_search.py +1 -1
  62. clearskies/endpoints/update.py +1 -1
  63. clearskies/model.py +1214 -64
  64. clearskies/query/query.py +4 -4
  65. clearskies/security_header.py +7 -0
  66. clearskies/security_headers/cache_control.py +2 -2
  67. clearskies/security_headers/cors.py +2 -2
  68. clearskies/security_headers/csp.py +2 -2
  69. clearskies/security_headers/hsts.py +2 -2
  70. clearskies/validator.py +12 -0
  71. clearskies/validators/after_column.py +2 -2
  72. clearskies/validators/in_the_future.py +1 -1
  73. clearskies/validators/in_the_past.py +1 -1
  74. clearskies/validators/required.py +0 -1
  75. clearskies/validators/timedelta.py +2 -2
  76. clearskies/validators/unique.py +0 -1
  77. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/LICENSE +0 -0
  78. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/WHEEL +0 -0
clearskies/query/query.py CHANGED
@@ -99,13 +99,13 @@ class Query:
99
99
  """Return the properties of this query as a dictionary so it can be used as kwargs when creating another one."""
100
100
  return {
101
101
  "model_class": self.model_class,
102
- "conditions": self.conditions,
103
- "joins": self.joins,
104
- "sorts": self.sorts,
102
+ "conditions": [*self.conditions],
103
+ "joins": [*self.joins],
104
+ "sorts": [*self.sorts],
105
105
  "limit": self.limit,
106
106
  "group_by": self.group_by,
107
107
  "pagination": self.pagination,
108
- "selects": self.selects,
108
+ "selects": [*self.selects],
109
109
  "select_all": self.select_all,
110
110
  }
111
111
 
@@ -2,6 +2,13 @@ from clearskies.configurable import Configurable
2
2
 
3
3
 
4
4
  class SecurityHeader(Configurable):
5
+ """
6
+ Attach all the various security headers to endpoints.
7
+
8
+ The security header classes can be attached directly to both endpoints and endpoint groups and
9
+ are used to set all the various security headers.
10
+ """
11
+
5
12
  is_cors = False
6
13
 
7
14
  def set_headers_for_input_output(self, input_output):
@@ -1,5 +1,5 @@
1
1
  import clearskies.configs
2
- import clearskies.parameters_to_properties
2
+ import clearskies.decorators
3
3
  from clearskies.security_header import SecurityHeader
4
4
 
5
5
 
@@ -32,7 +32,7 @@ class CacheControl(SecurityHeader):
32
32
  "public",
33
33
  ]
34
34
 
35
- @clearskies.parameters_to_properties.parameters_to_properties
35
+ @clearskies.decorators.parameters_to_properties
36
36
  def __init__(
37
37
  self,
38
38
  max_age: int | None = None,
@@ -1,5 +1,5 @@
1
1
  import clearskies.configs
2
- import clearskies.parameters_to_properties
2
+ import clearskies.decorators
3
3
  from clearskies.security_header import SecurityHeader
4
4
 
5
5
 
@@ -12,7 +12,7 @@ class Cors(SecurityHeader):
12
12
  expose_headers = clearskies.configs.StringList(default=[])
13
13
  is_cors = True
14
14
 
15
- @clearskies.parameters_to_properties.parameters_to_properties
15
+ @clearskies.decorators.parameters_to_properties
16
16
  def __init__(
17
17
  self,
18
18
  credentials: bool = False,
@@ -1,5 +1,5 @@
1
1
  import clearskies.configs
2
- import clearskies.parameters_to_properties
2
+ import clearskies.decorators
3
3
  from clearskies.security_header import SecurityHeader
4
4
 
5
5
 
@@ -51,7 +51,7 @@ class Csp(SecurityHeader):
51
51
  "navigate_to",
52
52
  ]
53
53
 
54
- @clearskies.parameters_to_properties.parameters_to_properties
54
+ @clearskies.decorators.parameters_to_properties
55
55
  def __init__(
56
56
  self,
57
57
  default_src: str = "",
@@ -1,5 +1,5 @@
1
1
  import clearskies.configs
2
- import clearskies.parameters_to_properties
2
+ import clearskies.decorators
3
3
  from clearskies.security_header import SecurityHeader
4
4
 
5
5
 
@@ -7,7 +7,7 @@ class Hsts(SecurityHeader):
7
7
  max_age = clearskies.configs.Integer(default=31536000)
8
8
  include_sub_domains = clearskies.configs.Boolean()
9
9
 
10
- @clearskies.parameters_to_properties.parameters_to_properties
10
+ @clearskies.decorators.parameters_to_properties
11
11
  def __init__(
12
12
  self,
13
13
  max_age: int = 31536000,
clearskies/validator.py CHANGED
@@ -11,6 +11,18 @@ if TYPE_CHECKING:
11
11
 
12
12
 
13
13
  class Validator(ABC, configurable.Configurable):
14
+ """
15
+ Attach input validation rules to columns!
16
+
17
+ The validators provide a way to attach input validation logic to columns. The columns themselves already
18
+ provide basic validation (making sure strings are strings, integers are integers, etc...) but these classes
19
+ allow for more detailed rules.
20
+
21
+ It's important to understand that validators only apply to client input, which means that input validation
22
+ is only enforced by appropriate endpoints. If you inject a model into a function of your own and execute
23
+ a save operation with it, validators will **NOT** be checked.
24
+ """
25
+
14
26
  is_unique = False
15
27
  is_required = False
16
28
 
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Any
6
6
  import dateparser
7
7
 
8
8
  import clearskies.configs
9
- import clearskies.parameters_to_properties
9
+ import clearskies.decorators
10
10
  from clearskies.validator import Validator
11
11
 
12
12
  if TYPE_CHECKING:
@@ -23,7 +23,7 @@ class AfterColumn(Validator):
23
23
  """
24
24
  allow_equal = clearskies.configs.Boolean(default=False)
25
25
 
26
- @clearskies.parameters_to_properties.parameters_to_properties
26
+ @clearskies.decorators.parameters_to_properties
27
27
  def __init__(self, other_column_name: str, allow_equal: bool = False):
28
28
  self.other_column_name = other_column_name
29
29
  self.allow_equal = allow_equal
@@ -7,8 +7,8 @@ from typing import TYPE_CHECKING, Any
7
7
  import dateparser
8
8
 
9
9
  import clearskies.configs
10
+ import clearskies.decorators
10
11
  import clearskies.di
11
- import clearskies.parameters_to_properties
12
12
  from clearskies.validator import Validator
13
13
 
14
14
  if TYPE_CHECKING:
@@ -7,8 +7,8 @@ from typing import TYPE_CHECKING, Any
7
7
  import dateparser
8
8
 
9
9
  import clearskies.configs
10
+ import clearskies.decorators
10
11
  import clearskies.di
11
- import clearskies.parameters_to_properties
12
12
  from clearskies.validator import Validator
13
13
 
14
14
  if TYPE_CHECKING:
@@ -4,7 +4,6 @@ import datetime
4
4
  from typing import TYPE_CHECKING, Any
5
5
 
6
6
  import clearskies.configs
7
- from clearskies import parameters_to_properties
8
7
  from clearskies.validator import Validator
9
8
 
10
9
  if TYPE_CHECKING:
@@ -7,8 +7,8 @@ from typing import TYPE_CHECKING, Any
7
7
  import dateparser
8
8
 
9
9
  import clearskies.configs
10
+ import clearskies.decorators
10
11
  import clearskies.di
11
- import clearskies.parameters_to_properties
12
12
  from clearskies.validator import Validator
13
13
 
14
14
  if TYPE_CHECKING:
@@ -20,7 +20,7 @@ class Timedelta(Validator, clearskies.di.InjectableProperties):
20
20
 
21
21
  utcnow = clearskies.di.inject.Utcnow()
22
22
 
23
- @clearskies.parameters_to_properties.parameters_to_properties
23
+ @clearskies.decorators.parameters_to_properties
24
24
  def __init__(self, timedelta: datetime.timedelta):
25
25
  self.finalize_and_validate_configuration()
26
26
 
@@ -4,7 +4,6 @@ import datetime
4
4
  from typing import TYPE_CHECKING, Any
5
5
 
6
6
  import clearskies.configs
7
- from clearskies import parameters_to_properties
8
7
  from clearskies.validator import Validator
9
8
 
10
9
  if TYPE_CHECKING: