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.
Files changed (44) hide show
  1. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/PKG-INFO +2 -2
  2. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/decorators/pagination.py +27 -14
  3. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/PKG-INFO +2 -2
  4. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/requires.txt +1 -1
  5. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/pyproject.toml +3 -3
  6. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/README.md +0 -0
  7. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/__init__.py +0 -0
  8. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/handlers/__init__.py +0 -0
  9. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/handlers/version.py +0 -0
  10. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/__init__.py +0 -0
  11. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/decorators/__init__.py +0 -0
  12. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/router.py +0 -0
  13. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/__init__.py +0 -0
  14. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/acl.py +0 -0
  15. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/__init__.py +0 -0
  16. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/__init__.py +0 -0
  17. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/__init__.py +0 -0
  18. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/__init__.py +0 -0
  19. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/expiration.py +0 -0
  20. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/recovery.py +0 -0
  21. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/jwt/providers/user.py +0 -0
  22. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authentication/session.py +0 -0
  23. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authorization/__init__.py +0 -0
  24. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/policies/authorization/user.py +0 -0
  25. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/__init__.py +0 -0
  26. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/base.py +0 -0
  27. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/security/session/user.py +0 -0
  28. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/signature.py +0 -0
  29. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/__init__.py +0 -0
  30. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/__init__.py +0 -0
  31. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/aggregation.py +0 -0
  32. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/pagination.py +0 -0
  33. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/query.py +0 -0
  34. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/request.py +0 -0
  35. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/lib/validation/schemas/version.py +0 -0
  36. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/__init__.py +0 -0
  37. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/context.py +0 -0
  38. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/filter.py +0 -0
  39. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/logging/middleware.py +0 -0
  40. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi/test.py +0 -0
  41. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/SOURCES.txt +0 -0
  42. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/dependency_links.txt +0 -0
  43. {coderfastapi-5.2.1 → coderfastapi-5.3.0}/coderfastapi.egg-info/top_level.txt +0 -0
  44. {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.2.1
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.3
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=getattr(item, id_attr),
120
- last_value=getattr(item, value_attr),
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.2.1
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.3
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,4 +1,4 @@
1
- codercore~=6.3
1
+ codercore~=6.5
2
2
  fastapi[all]~=0.89
3
3
  google-cloud-logging~=3.7
4
4
  orjson~=3.8
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "coderfastapi"
7
- version = "5.2.1"
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.3',
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.2.1"
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