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.
- {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/METADATA +2 -2
- {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/RECORD +78 -77
- clearskies/__init__.py +5 -8
- clearskies/authentication/authentication.py +4 -0
- clearskies/authentication/authorization.py +4 -0
- clearskies/authentication/jwks.py +8 -3
- clearskies/authentication/secret_bearer.py +3 -3
- clearskies/backends/api_backend.py +2 -2
- clearskies/backends/backend.py +13 -0
- clearskies/backends/secrets_backend.py +0 -1
- clearskies/column.py +9 -8
- clearskies/columns/audit.py +3 -2
- clearskies/columns/belongs_to_id.py +2 -2
- clearskies/columns/belongs_to_model.py +6 -2
- clearskies/columns/belongs_to_self.py +2 -2
- clearskies/columns/boolean.py +6 -2
- clearskies/columns/category_tree.py +2 -2
- clearskies/columns/category_tree_children.py +2 -2
- clearskies/columns/created.py +3 -2
- clearskies/columns/created_by_authorization_data.py +2 -2
- clearskies/columns/created_by_header.py +2 -2
- clearskies/columns/created_by_ip.py +2 -2
- clearskies/columns/created_by_routing_data.py +3 -2
- clearskies/columns/created_by_user_agent.py +2 -2
- clearskies/columns/date.py +6 -2
- clearskies/columns/datetime.py +6 -2
- clearskies/columns/float.py +6 -2
- clearskies/columns/has_many.py +2 -2
- clearskies/columns/has_many_self.py +2 -2
- clearskies/columns/integer.py +6 -2
- clearskies/columns/json.py +6 -2
- clearskies/columns/many_to_many_ids.py +6 -2
- clearskies/columns/many_to_many_ids_with_data.py +6 -2
- clearskies/columns/many_to_many_models.py +6 -2
- clearskies/columns/many_to_many_pivots.py +3 -2
- clearskies/columns/phone.py +3 -2
- clearskies/columns/select.py +3 -2
- clearskies/columns/string.py +4 -0
- clearskies/columns/timestamp.py +6 -2
- clearskies/columns/updated.py +2 -2
- clearskies/columns/uuid.py +2 -2
- clearskies/configs/__init__.py +4 -1
- clearskies/configs/config.py +4 -1
- clearskies/configs/endpoint_list.py +28 -0
- clearskies/contexts/cli.py +4 -0
- clearskies/contexts/context.py +13 -0
- clearskies/contexts/wsgi.py +4 -0
- clearskies/contexts/wsgi_ref.py +4 -0
- clearskies/{parameters_to_properties.py → decorators.py} +2 -0
- clearskies/di/di.py +2 -2
- clearskies/di/injectable_properties.py +2 -2
- clearskies/endpoint.py +7 -6
- clearskies/endpoint_group.py +14 -1
- clearskies/endpoints/callable.py +5 -4
- clearskies/endpoints/create.py +1 -1
- clearskies/endpoints/delete.py +1 -1
- clearskies/endpoints/get.py +1 -1
- clearskies/endpoints/health_check.py +1 -1
- clearskies/endpoints/list.py +1 -1
- clearskies/endpoints/restful_api.py +2 -2
- clearskies/endpoints/simple_search.py +1 -1
- clearskies/endpoints/update.py +1 -1
- clearskies/model.py +1214 -64
- clearskies/query/query.py +4 -4
- clearskies/security_header.py +7 -0
- clearskies/security_headers/cache_control.py +2 -2
- clearskies/security_headers/cors.py +2 -2
- clearskies/security_headers/csp.py +2 -2
- clearskies/security_headers/hsts.py +2 -2
- clearskies/validator.py +12 -0
- clearskies/validators/after_column.py +2 -2
- clearskies/validators/in_the_future.py +1 -1
- clearskies/validators/in_the_past.py +1 -1
- clearskies/validators/required.py +0 -1
- clearskies/validators/timedelta.py +2 -2
- clearskies/validators/unique.py +0 -1
- {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/LICENSE +0 -0
- {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
|
|
clearskies/security_header.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
@@ -20,7 +20,7 @@ class Timedelta(Validator, clearskies.di.InjectableProperties):
|
|
|
20
20
|
|
|
21
21
|
utcnow = clearskies.di.inject.Utcnow()
|
|
22
22
|
|
|
23
|
-
@clearskies.
|
|
23
|
+
@clearskies.decorators.parameters_to_properties
|
|
24
24
|
def __init__(self, timedelta: datetime.timedelta):
|
|
25
25
|
self.finalize_and_validate_configuration()
|
|
26
26
|
|
clearskies/validators/unique.py
CHANGED
|
File without changes
|
|
File without changes
|