apexdevkit 1.15.7__tar.gz → 1.16.2__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 (47) hide show
  1. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/PKG-INFO +1 -1
  2. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/dependable.py +1 -1
  3. apexdevkit-1.16.2/apexdevkit/fastapi/name.py +37 -0
  4. apexdevkit-1.16.2/apexdevkit/fastapi/request.py +31 -0
  5. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/response.py +1 -3
  6. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/router.py +1 -1
  7. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/schema.py +1 -1
  8. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fluent.py +4 -1
  9. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/testing/__init__.py +1 -3
  10. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/testing/rest.py +41 -95
  11. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/pyproject.toml +1 -1
  12. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/LICENSE +0 -0
  13. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/README.md +0 -0
  14. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/__init__.py +0 -0
  15. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/annotation/__init__.py +0 -0
  16. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/annotation/deprecate.py +0 -0
  17. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/environment.py +0 -0
  18. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/error.py +0 -0
  19. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/__init__.py +0 -0
  20. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/builder.py +0 -0
  21. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/docs.py +0 -0
  22. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/resource.py +0 -0
  23. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/fastapi/service.py +0 -0
  24. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/formatter.py +0 -0
  25. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/__init__.py +0 -0
  26. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/fake.py +0 -0
  27. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/fluent.py +0 -0
  28. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/httpx.py +0 -0
  29. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/json.py +0 -0
  30. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/http/url.py +0 -0
  31. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/key_fn.py +0 -0
  32. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/py.typed +0 -0
  33. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/__init__.py +0 -0
  34. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/base.py +0 -0
  35. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/connector.py +0 -0
  36. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/database.py +0 -0
  37. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/decorator.py +0 -0
  38. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/in_memory.py +0 -0
  39. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/interface.py +0 -0
  40. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/mongo.py +0 -0
  41. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/mssql.py +0 -0
  42. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/repository/sqlite.py +0 -0
  43. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/server.py +0 -0
  44. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/synchronization.py +0 -0
  45. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/testing/database.py +0 -0
  46. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/testing/fake.py +0 -0
  47. {apexdevkit-1.15.7 → apexdevkit-1.16.2}/apexdevkit/value.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apexdevkit
3
- Version: 1.15.7
3
+ Version: 1.16.2
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -6,9 +6,9 @@ from fastapi.requests import Request
6
6
 
7
7
  from apexdevkit.error import ApiError, DoesNotExistError
8
8
  from apexdevkit.fastapi import RestfulServiceBuilder
9
+ from apexdevkit.fastapi.name import RestfulName
9
10
  from apexdevkit.fastapi.response import RestfulResponse
10
11
  from apexdevkit.fastapi.service import RestfulService
11
- from apexdevkit.testing import RestfulName
12
12
 
13
13
 
14
14
  def inject(dependency: str) -> Any: # pragma: no cover
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+ from apexdevkit.http import HttpUrl
6
+
7
+
8
+ @dataclass
9
+ class RestfulName:
10
+ singular: str
11
+
12
+ plural: str = ""
13
+
14
+ def __post_init__(self) -> None:
15
+ self.plural = self.plural or as_plural(self.singular)
16
+
17
+ def __add__(self, other: str) -> str:
18
+ return HttpUrl(self.plural) + other
19
+
20
+
21
+ def as_plural(singular: str) -> str:
22
+ suffixes = {
23
+ "y": "ies",
24
+ "ch": "ches",
25
+ "sh": "shes",
26
+ "s": "ses",
27
+ "z": "zes",
28
+ "x": "xes",
29
+ "fe": "ves",
30
+ "f": "ves",
31
+ }
32
+
33
+ for singular_suffix, plural_suffix in suffixes.items():
34
+ if singular.endswith(singular_suffix):
35
+ return singular.removesuffix(singular_suffix) + plural_suffix
36
+
37
+ return singular + "s"
@@ -0,0 +1,31 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+ from apexdevkit.http import Http, HttpMethod, JsonDict
7
+ from apexdevkit.http.fluent import HttpResponse
8
+
9
+
10
+ @dataclass
11
+ class HttpRequest:
12
+ method: HttpMethod
13
+ http: Http
14
+
15
+ def with_endpoint(self, value: Any) -> HttpRequest:
16
+ self.http = self.http.with_endpoint(str(value))
17
+
18
+ return self
19
+
20
+ def with_param(self, name: str, value: Any) -> HttpRequest:
21
+ self.http = self.http.with_param(name, value)
22
+
23
+ return self
24
+
25
+ def with_json(self, value: JsonDict) -> HttpRequest:
26
+ self.http = self.http.with_json(value)
27
+
28
+ return self
29
+
30
+ def __call__(self) -> HttpResponse:
31
+ return self.http.request(self.method)
@@ -1,10 +1,8 @@
1
- from __future__ import annotations
2
-
3
1
  from dataclasses import dataclass
4
2
  from typing import Any, Iterable
5
3
 
6
4
  from apexdevkit.error import DoesNotExistError, ExistsError, ForbiddenError
7
- from apexdevkit.testing import RestfulName
5
+ from apexdevkit.fastapi.name import RestfulName
8
6
 
9
7
 
10
8
  @dataclass(frozen=True)
@@ -6,11 +6,11 @@ from fastapi import APIRouter, Depends, Path
6
6
  from fastapi.responses import JSONResponse
7
7
 
8
8
  from apexdevkit.fastapi.builder import RestfulServiceBuilder
9
+ from apexdevkit.fastapi.name import RestfulName
9
10
  from apexdevkit.fastapi.resource import RestfulResource
10
11
  from apexdevkit.fastapi.response import RestfulResponse
11
12
  from apexdevkit.fastapi.schema import RestfulSchema, SchemaFields
12
13
  from apexdevkit.fastapi.service import RawCollection, RawItem, RestfulService
13
- from apexdevkit.testing import RestfulName
14
14
 
15
15
  _Response = JSONResponse | dict[str, Any]
16
16
 
@@ -5,8 +5,8 @@ from typing import Any, Callable, Iterable, List
5
5
 
6
6
  from pydantic import BaseModel, create_model
7
7
 
8
+ from apexdevkit.fastapi.name import RestfulName
8
9
  from apexdevkit.fluent import FluentDict
9
- from apexdevkit.testing import RestfulName
10
10
 
11
11
 
12
12
  class SchemaFields(ABC):
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Callable, Generic, TypeVar
4
+ from typing import Any, Callable, Generic, TypeVar
5
5
 
6
6
  ItemT = TypeVar("ItemT")
7
7
 
@@ -33,6 +33,9 @@ class FluentElement(Generic[ItemT]):
33
33
  def to(self, a_type: Callable[[ItemT], ConvertedT]) -> ConvertedT:
34
34
  return a_type(self.value)
35
35
 
36
+ def as_dict(self) -> dict[str, Any]:
37
+ return dict(self.value) # type: ignore
38
+
36
39
  def __str__(self) -> str:
37
40
  return str(self.value)
38
41
 
@@ -1,11 +1,9 @@
1
1
  from apexdevkit.testing.database import FakeConnector
2
2
  from apexdevkit.testing.fake import FakeValue
3
- from apexdevkit.testing.rest import RestCollection, RestfulName, RestResource
3
+ from apexdevkit.testing.rest import RestCollection
4
4
 
5
5
  __all__ = [
6
6
  "FakeConnector",
7
7
  "RestCollection",
8
- "RestfulName",
9
- "RestResource",
10
8
  "FakeValue",
11
9
  ]
@@ -4,17 +4,19 @@ from dataclasses import dataclass
4
4
  from functools import cached_property
5
5
  from typing import Any, Iterable, Self
6
6
 
7
- from apexdevkit.http import Http, HttpUrl, JsonDict
8
- from apexdevkit.http.fluent import HttpMethod, HttpResponse
7
+ from apexdevkit.fastapi.name import RestfulName
8
+ from apexdevkit.fastapi.request import HttpRequest
9
+ from apexdevkit.http import Http, HttpMethod, JsonDict
10
+ from apexdevkit.http.fluent import HttpResponse
9
11
 
10
12
 
11
13
  @dataclass(frozen=True)
12
- class RestResource:
14
+ class _RestResource:
13
15
  http: Http
14
16
  name: RestfulName
15
17
 
16
- def create_one(self) -> RestRequest:
17
- return RestRequest(
18
+ def create_one(self) -> _TestRequest:
19
+ return _TestRequest(
18
20
  self.name,
19
21
  HttpRequest(
20
22
  HttpMethod.post,
@@ -22,8 +24,8 @@ class RestResource:
22
24
  ),
23
25
  )
24
26
 
25
- def create_many(self) -> RestRequest:
26
- return RestRequest(
27
+ def create_many(self) -> _TestRequest:
28
+ return _TestRequest(
27
29
  self.name,
28
30
  HttpRequest(
29
31
  HttpMethod.post,
@@ -31,8 +33,8 @@ class RestResource:
31
33
  ),
32
34
  )
33
35
 
34
- def read_one(self) -> RestRequest:
35
- return RestRequest(
36
+ def read_one(self) -> _TestRequest:
37
+ return _TestRequest(
36
38
  self.name,
37
39
  HttpRequest(
38
40
  HttpMethod.get,
@@ -40,8 +42,8 @@ class RestResource:
40
42
  ),
41
43
  )
42
44
 
43
- def read_all(self) -> RestRequest:
44
- return RestRequest(
45
+ def read_all(self) -> _TestRequest:
46
+ return _TestRequest(
45
47
  self.name,
46
48
  HttpRequest(
47
49
  HttpMethod.get,
@@ -49,8 +51,8 @@ class RestResource:
49
51
  ),
50
52
  )
51
53
 
52
- def update_one(self) -> RestRequest:
53
- return RestRequest(
54
+ def update_one(self) -> _TestRequest:
55
+ return _TestRequest(
54
56
  self.name,
55
57
  HttpRequest(
56
58
  HttpMethod.patch,
@@ -58,8 +60,8 @@ class RestResource:
58
60
  ),
59
61
  )
60
62
 
61
- def update_many(self) -> RestRequest:
62
- return RestRequest(
63
+ def update_many(self) -> _TestRequest:
64
+ return _TestRequest(
63
65
  self.name,
64
66
  HttpRequest(
65
67
  HttpMethod.patch,
@@ -67,8 +69,8 @@ class RestResource:
67
69
  ),
68
70
  )
69
71
 
70
- def replace_one(self) -> RestRequest:
71
- return RestRequest(
72
+ def replace_one(self) -> _TestRequest:
73
+ return _TestRequest(
72
74
  self.name,
73
75
  HttpRequest(
74
76
  HttpMethod.put,
@@ -76,8 +78,8 @@ class RestResource:
76
78
  ),
77
79
  )
78
80
 
79
- def replace_many(self) -> RestRequest:
80
- return RestRequest(
81
+ def replace_many(self) -> _TestRequest:
82
+ return _TestRequest(
81
83
  self.name,
82
84
  HttpRequest(
83
85
  HttpMethod.put,
@@ -85,8 +87,8 @@ class RestResource:
85
87
  ),
86
88
  )
87
89
 
88
- def delete_one(self) -> RestRequest:
89
- return RestRequest(
90
+ def delete_one(self) -> _TestRequest:
91
+ return _TestRequest(
90
92
  self.name,
91
93
  HttpRequest(
92
94
  HttpMethod.delete,
@@ -95,76 +97,8 @@ class RestResource:
95
97
  )
96
98
 
97
99
 
98
- @dataclass(frozen=True)
99
- class RestCollection(RestResource):
100
- def sub_resource(self, name: str) -> RestItem:
101
- return RestItem(self.http.with_endpoint(self.name.plural), RestfulName(name))
102
-
103
-
104
- @dataclass(frozen=True)
105
- class RestItem(RestResource):
106
- def sub_resource(self, name: str) -> RestItem:
107
- return RestItem(self.http.with_endpoint(self.name.singular), RestfulName(name))
108
-
109
-
110
- @dataclass
111
- class RestfulName:
112
- singular: str
113
-
114
- plural: str = ""
115
-
116
- def __post_init__(self) -> None:
117
- self.plural = self.plural or as_plural(self.singular)
118
-
119
- def __add__(self, other: str) -> str:
120
- return HttpUrl(self.plural) + other
121
-
122
-
123
- def as_plural(singular: str) -> str:
124
- suffixes = {
125
- "y": "ies",
126
- "ch": "ches",
127
- "sh": "shes",
128
- "s": "ses",
129
- "z": "zes",
130
- "x": "xes",
131
- "fe": "ves",
132
- "f": "ves",
133
- }
134
-
135
- for singular_suffix, plural_suffix in suffixes.items():
136
- if singular.endswith(singular_suffix):
137
- return singular.removesuffix(singular_suffix) + plural_suffix
138
-
139
- return singular + "s"
140
-
141
-
142
- @dataclass
143
- class HttpRequest:
144
- method: HttpMethod
145
- http: Http
146
-
147
- def with_endpoint(self, value: Any) -> HttpRequest:
148
- self.http = self.http.with_endpoint(str(value))
149
-
150
- return self
151
-
152
- def with_param(self, name: str, value: Any) -> HttpRequest:
153
- self.http = self.http.with_param(name, value)
154
-
155
- return self
156
-
157
- def with_json(self, value: JsonDict) -> HttpRequest:
158
- self.http = self.http.with_json(value)
159
-
160
- return self
161
-
162
- def __call__(self) -> HttpResponse:
163
- return self.http.request(self.method)
164
-
165
-
166
100
  @dataclass
167
- class RestRequest:
101
+ class _TestRequest:
168
102
  resource: RestfulName
169
103
  request: HttpRequest
170
104
 
@@ -209,8 +143,8 @@ class RestRequest:
209
143
 
210
144
  return [JsonDict(item) for item in items]
211
145
 
212
- def ensure(self) -> RestResponse:
213
- return RestResponse(
146
+ def ensure(self) -> _Response:
147
+ return _Response(
214
148
  resource=self.resource,
215
149
  json=JsonDict(self.response.json()),
216
150
  http_code=self.response.code(),
@@ -218,7 +152,7 @@ class RestRequest:
218
152
 
219
153
 
220
154
  @dataclass
221
- class RestResponse:
155
+ class _Response:
222
156
  resource: RestfulName
223
157
  json: JsonDict
224
158
  http_code: int
@@ -252,7 +186,7 @@ class RestResponse:
252
186
  return self.with_message(value)
253
187
 
254
188
  def with_message(self, value: str) -> Self:
255
- assert self.json.value_of("error").to(dict) == {"message": value}, self.json
189
+ assert self.json.value_of("error").as_dict() == {"message": value}, self.json
256
190
 
257
191
  return self
258
192
 
@@ -275,6 +209,18 @@ class RestResponse:
275
209
  return self.with_data()
276
210
 
277
211
  def with_data(self, **kwargs: Any) -> Self:
278
- assert self.json.value_of("data").to(dict) == {**kwargs}, self.json
212
+ assert self.json.value_of("data").as_dict() == {**kwargs}, self.json
279
213
 
280
214
  return self
215
+
216
+
217
+ @dataclass(frozen=True)
218
+ class RestCollection(_RestResource):
219
+ def sub_resource(self, name: str) -> RestItem:
220
+ return RestItem(self.http.with_endpoint(self.name.plural), RestfulName(name))
221
+
222
+
223
+ @dataclass(frozen=True)
224
+ class RestItem(_RestResource):
225
+ def sub_resource(self, name: str) -> RestItem:
226
+ return RestItem(self.http.with_endpoint(self.name.singular), RestfulName(name))
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "apexdevkit"
3
- version = "1.15.7"
3
+ version = "1.16.2"
4
4
  description = "Apex Development Tools for python."
5
5
  authors = ["Apex Dev <dev@apex.ge>"]
6
6
  readme = "README.md"
File without changes
File without changes