coderfastapi 5.2.1__tar.gz → 5.3.0__tar.gz
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.
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/PKG-INFO +2 -2
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/decorators/pagination.py +27 -14
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/PKG-INFO +2 -2
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/requires.txt +1 -1
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/pyproject.toml +3 -3
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/README.md +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/handlers/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/handlers/version.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/decorators/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/router.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/acl.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/expiration.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/recovery.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/user.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/session.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authorization/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authorization/user.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/base.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/user.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/signature.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/aggregation.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/pagination.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/query.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/request.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/version.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/__init__.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/context.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/filter.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/middleware.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/test.py +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/SOURCES.txt +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/dependency_links.txt +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/top_level.txt +0 -0
- {coderfastapi-5.2.1 → coderfastapi-5.3.0}/setup.cfg +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: coderfastapi
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
4
4
|
Summary: coderfastapi
|
|
5
5
|
Author-email: Code R <hello@coderstudio.dev>
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
7
|
-
Requires-Dist: codercore~=6.
|
|
7
|
+
Requires-Dist: codercore~=6.5
|
|
8
8
|
Requires-Dist: fastapi[all]~=0.89
|
|
9
9
|
Requires-Dist: google-cloud-logging~=3.7
|
|
10
10
|
Requires-Dist: orjson~=3.8
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
from inspect import Parameter, Signature, isclass, signature
|
|
2
|
-
from typing import Awaitable, Callable, Iterable, TypeVar
|
|
2
|
+
from typing import Any, Awaitable, Callable, Iterable, TypeVar
|
|
3
3
|
from urllib.parse import parse_qs, urlencode, urlsplit, urlunsplit
|
|
4
4
|
|
|
5
5
|
from codercore.lib.collection import Direction
|
|
6
|
+
from codercore.types import SequentialCollection
|
|
6
7
|
from fastapi import Request, Response
|
|
7
8
|
from fastapi.params import Depends
|
|
8
9
|
|
|
9
10
|
from coderfastapi.lib.signature import copy_parameters
|
|
10
11
|
from coderfastapi.lib.validation.schemas.pagination import DeserializableCursor
|
|
11
|
-
from coderfastapi.lib.validation.schemas.query import
|
|
12
|
-
OrderableQueryParameters,
|
|
13
|
-
QueryParameters,
|
|
14
|
-
)
|
|
12
|
+
from coderfastapi.lib.validation.schemas.query import QueryParameters
|
|
15
13
|
|
|
16
14
|
T = TypeVar("T")
|
|
17
15
|
S = TypeVar("S", bound=QueryParameters)
|
|
@@ -19,7 +17,7 @@ Entities = Iterable[T]
|
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
def paginate(
|
|
22
|
-
id_attr: str,
|
|
20
|
+
*id_attr: str,
|
|
23
21
|
) -> Callable[
|
|
24
22
|
[Callable[..., Awaitable[Entities]]],
|
|
25
23
|
Callable[[Request, Response, ...], Awaitable[Entities]],
|
|
@@ -82,16 +80,14 @@ def _is_injectable(parameter) -> bool:
|
|
|
82
80
|
|
|
83
81
|
|
|
84
82
|
def _build_links(
|
|
85
|
-
id_attr: str,
|
|
83
|
+
id_attr: SequentialCollection[str],
|
|
86
84
|
query_schema: S,
|
|
87
85
|
request: Request,
|
|
88
86
|
result: Entities,
|
|
89
87
|
) -> list[str]:
|
|
90
88
|
result_length = len(result)
|
|
91
89
|
links = []
|
|
92
|
-
value_attr = id_attr
|
|
93
|
-
if isinstance(query_schema, OrderableQueryParameters):
|
|
94
|
-
value_attr = query_schema.order_by
|
|
90
|
+
value_attr = getattr(query_schema, "order_by", id_attr)
|
|
95
91
|
|
|
96
92
|
if previous_cursor := query_schema.cursor:
|
|
97
93
|
previous_direction = previous_cursor.direction
|
|
@@ -111,17 +107,34 @@ def _build_links(
|
|
|
111
107
|
|
|
112
108
|
def _create_cursor(
|
|
113
109
|
direction: Direction,
|
|
114
|
-
id_attr: str,
|
|
115
|
-
value_attr: str,
|
|
110
|
+
id_attr: SequentialCollection[str],
|
|
111
|
+
value_attr: str | SequentialCollection[str],
|
|
116
112
|
item: T,
|
|
117
113
|
) -> DeserializableCursor:
|
|
118
114
|
return DeserializableCursor(
|
|
119
|
-
last_id=
|
|
120
|
-
last_value=
|
|
115
|
+
last_id=_get_last_id(item, id_attr),
|
|
116
|
+
last_value=_get_last_value(item, value_attr),
|
|
121
117
|
direction=direction,
|
|
122
118
|
)
|
|
123
119
|
|
|
124
120
|
|
|
121
|
+
def _get_last_id(item: T, id_attr: SequentialCollection[str]) -> Any:
|
|
122
|
+
if len(id_attr) > 1:
|
|
123
|
+
return [getattr(item, attr) for attr in id_attr]
|
|
124
|
+
else:
|
|
125
|
+
return getattr(item, id_attr[0])
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _get_last_value(item: T, value_attr: str | SequentialCollection[str]) -> Any:
|
|
129
|
+
if isinstance(value_attr, (list, tuple)):
|
|
130
|
+
if len(value_attr) > 1:
|
|
131
|
+
return [getattr(item, attr) for attr in value_attr]
|
|
132
|
+
else:
|
|
133
|
+
return getattr(item, value_attr[0])
|
|
134
|
+
else:
|
|
135
|
+
return getattr(item, value_attr)
|
|
136
|
+
|
|
137
|
+
|
|
125
138
|
def _construct_link(cursor: DeserializableCursor, rel: str, request: Request) -> str:
|
|
126
139
|
url = _construct_url_with_cursor(cursor, request)
|
|
127
140
|
return f'<{url}>; rel="{rel}"'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: coderfastapi
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
4
4
|
Summary: coderfastapi
|
|
5
5
|
Author-email: Code R <hello@coderstudio.dev>
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
7
|
-
Requires-Dist: codercore~=6.
|
|
7
|
+
Requires-Dist: codercore~=6.5
|
|
8
8
|
Requires-Dist: fastapi[all]~=0.89
|
|
9
9
|
Requires-Dist: google-cloud-logging~=3.7
|
|
10
10
|
Requires-Dist: orjson~=3.8
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "coderfastapi"
|
|
7
|
-
version = "5.
|
|
7
|
+
version = "5.3.0"
|
|
8
8
|
description = "coderfastapi"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Code R", email = "hello@coderstudio.dev" }]
|
|
11
11
|
dependencies = [
|
|
12
|
-
'codercore ~= 6.
|
|
12
|
+
'codercore ~= 6.5',
|
|
13
13
|
'fastapi[all] ~= 0.89',
|
|
14
14
|
'google-cloud-logging ~= 3.7',
|
|
15
15
|
'orjson ~= 3.8',
|
|
@@ -33,7 +33,7 @@ dev = [
|
|
|
33
33
|
]
|
|
34
34
|
|
|
35
35
|
[tool.bumpver]
|
|
36
|
-
current_version = "5.
|
|
36
|
+
current_version = "5.3.0"
|
|
37
37
|
version_pattern = "MAJOR.MINOR.PATCH"
|
|
38
38
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
39
39
|
commit = true
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authorization/user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/aggregation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|