django-ninja-aio-crud 2.3.0__py3-none-any.whl → 2.3.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.
- {django_ninja_aio_crud-2.3.0.dist-info → django_ninja_aio_crud-2.3.2.dist-info}/METADATA +20 -11
- {django_ninja_aio_crud-2.3.0.dist-info → django_ninja_aio_crud-2.3.2.dist-info}/RECORD +6 -6
- ninja_aio/__init__.py +1 -1
- ninja_aio/renders.py +2 -1
- {django_ninja_aio_crud-2.3.0.dist-info → django_ninja_aio_crud-2.3.2.dist-info}/WHEEL +0 -0
- {django_ninja_aio_crud-2.3.0.dist-info → django_ninja_aio_crud-2.3.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-ninja-aio-crud
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.2
|
|
4
4
|
Summary: Django Ninja AIO CRUD - Rest Framework
|
|
5
5
|
Author: Giuseppe Casillo
|
|
6
|
-
Requires-Python: >=3.10,
|
|
6
|
+
Requires-Python: >=3.10, <3.15
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Classifier: Operating System :: OS Independent
|
|
9
9
|
Classifier: Topic :: Internet
|
|
@@ -25,7 +25,7 @@ Classifier: Framework :: AsyncIO
|
|
|
25
25
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
26
26
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: django-ninja >=1.3.0,
|
|
28
|
+
Requires-Dist: django-ninja >=1.3.0, <1.6
|
|
29
29
|
Requires-Dist: joserfc >=1.0.0, <= 1.4.1
|
|
30
30
|
Requires-Dist: orjson >= 3.10.7, <= 3.11.5
|
|
31
31
|
Requires-Dist: coverage ; extra == "test"
|
|
@@ -74,6 +74,7 @@ Add to your project’s dependencies and ensure Django Ninja is installed.
|
|
|
74
74
|
## 🚀 Quick Start
|
|
75
75
|
|
|
76
76
|
models.py
|
|
77
|
+
|
|
77
78
|
```python
|
|
78
79
|
from django.db import models
|
|
79
80
|
from ninja_aio.models import ModelSerializer
|
|
@@ -93,6 +94,7 @@ class Book(ModelSerializer):
|
|
|
93
94
|
```
|
|
94
95
|
|
|
95
96
|
views.py
|
|
97
|
+
|
|
96
98
|
```python
|
|
97
99
|
from ninja_aio import NinjaAIO
|
|
98
100
|
from ninja_aio.views import APIViewSet
|
|
@@ -126,6 +128,7 @@ class BookViewSet(APIViewSet):
|
|
|
126
128
|
```
|
|
127
129
|
|
|
128
130
|
Request:
|
|
131
|
+
|
|
129
132
|
```
|
|
130
133
|
GET /book/?published=true&title=python
|
|
131
134
|
```
|
|
@@ -168,6 +171,7 @@ class ArticleViewSet(APIViewSet):
|
|
|
168
171
|
```
|
|
169
172
|
|
|
170
173
|
Endpoints:
|
|
174
|
+
|
|
171
175
|
- `GET /article/{pk}/tag?name=dev`
|
|
172
176
|
- `POST /article/{pk}/tag/` body: `{"add":[1,2],"remove":[3]}`
|
|
173
177
|
|
|
@@ -202,6 +206,7 @@ class SecureBookViewSet(APIViewSet):
|
|
|
202
206
|
## 📑 Lifecycle Hooks (ModelSerializer)
|
|
203
207
|
|
|
204
208
|
Available on every save/delete:
|
|
209
|
+
|
|
205
210
|
- `on_create_before_save`
|
|
206
211
|
- `on_create_after_save`
|
|
207
212
|
- `before_save`
|
|
@@ -250,9 +255,8 @@ class LargePagination(PageNumberPagination):
|
|
|
250
255
|
page_size = 50
|
|
251
256
|
max_page_size = 200
|
|
252
257
|
|
|
258
|
+
@api.viewset(Book)
|
|
253
259
|
class BookViewSet(APIViewSet):
|
|
254
|
-
model = Book
|
|
255
|
-
api = api
|
|
256
260
|
pagination_class = LargePagination
|
|
257
261
|
```
|
|
258
262
|
|
|
@@ -261,6 +265,7 @@ class BookViewSet(APIViewSet):
|
|
|
261
265
|
## 🛠 Project Structure & Docs
|
|
262
266
|
|
|
263
267
|
Documentation (MkDocs + Material):
|
|
268
|
+
|
|
264
269
|
```
|
|
265
270
|
docs/
|
|
266
271
|
getting_started/
|
|
@@ -273,17 +278,19 @@ docs/
|
|
|
273
278
|
```
|
|
274
279
|
|
|
275
280
|
Browse full reference:
|
|
281
|
+
|
|
276
282
|
- APIViewSet: `docs/api/views/api_view_set.md`
|
|
277
283
|
- APIView: `docs/api/views/api_view.md`
|
|
278
284
|
- ModelSerializer: `docs/api/models/model_serializer.md`
|
|
279
285
|
- Authentication: `docs/api/authentication.md`
|
|
280
|
-
-
|
|
286
|
+
- Example repository: https://github.com/caspel26/ninja-aio-blog-example
|
|
281
287
|
|
|
282
288
|
---
|
|
283
289
|
|
|
284
290
|
## 🧪 Tests
|
|
285
291
|
|
|
286
292
|
Use Django test runner + async ORM patterns. Example async pattern:
|
|
293
|
+
|
|
287
294
|
```python
|
|
288
295
|
obj = await Book.objects.acreate(title="T1", published=True)
|
|
289
296
|
count = await Book.objects.acount()
|
|
@@ -323,6 +330,7 @@ class ReadOnlyBookViewSet(APIViewSet):
|
|
|
323
330
|
## ⭐ Support
|
|
324
331
|
|
|
325
332
|
Star the repo or donate:
|
|
333
|
+
|
|
326
334
|
- [Buy me a coffee](https://buymeacoffee.com/caspel26)
|
|
327
335
|
|
|
328
336
|
---
|
|
@@ -335,11 +343,12 @@ MIT License. See [LICENSE](LICENSE).
|
|
|
335
343
|
|
|
336
344
|
## 🔗 Quick Links
|
|
337
345
|
|
|
338
|
-
| Item
|
|
339
|
-
|
|
340
|
-
| PyPI
|
|
341
|
-
| Docs
|
|
342
|
-
| Issues
|
|
346
|
+
| Item | Link |
|
|
347
|
+
| ------- | -------------------------------------------------------- |
|
|
348
|
+
| PyPI | https://pypi.org/project/django-ninja-aio-crud/ |
|
|
349
|
+
| Docs | https://django-ninja-aio.com |
|
|
350
|
+
| Issues | https://github.com/caspel26/django-ninja-aio-crud/issues |
|
|
351
|
+
| Example | https://github.com/caspel26/ninja-aio-blog-example |
|
|
343
352
|
|
|
344
353
|
---
|
|
345
354
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
ninja_aio/__init__.py,sha256
|
|
1
|
+
ninja_aio/__init__.py,sha256=-7mYM97D7Pc3FeiDwYJwTvykYieIbjXNLz-H79OOnOQ,119
|
|
2
2
|
ninja_aio/api.py,sha256=tuC7vdvn7s1GkCnSFy9Kn1zv0glZfYptRQVvo8ZRtGQ,2429
|
|
3
3
|
ninja_aio/auth.py,sha256=4sWdFPjKiQgUL1d_CSGDblVjnY5ptP6LQha6XXdluJA,9157
|
|
4
4
|
ninja_aio/exceptions.py,sha256=_3xFqfFCOfrrMhSA0xbMqgXy8R0UQjhXaExrFvaDAjY,3891
|
|
5
5
|
ninja_aio/models.py,sha256=aJlo5a64O4o-fB8QESLMUJpoA5kcjRJxPBiAIMxg46k,47652
|
|
6
6
|
ninja_aio/parsers.py,sha256=e_4lGCPV7zs-HTqtdJTc8yQD2KPAn9njbL8nF_Mmgkc,153
|
|
7
|
-
ninja_aio/renders.py,sha256=
|
|
7
|
+
ninja_aio/renders.py,sha256=89g46NWUT8nmDG-rG0nxUYbAQWhuXcYKrPh7e1r_Fc4,1735
|
|
8
8
|
ninja_aio/types.py,sha256=nFqWEopm7eoEaHRzbi6EyA9WZ5Cneyd602ilFKypeQI,577
|
|
9
9
|
ninja_aio/decorators/__init__.py,sha256=cDDHD_9EI4CP7c5eL1m2mGNl9bR24i8FAkQsT3_RNGM,371
|
|
10
10
|
ninja_aio/decorators/operations.py,sha256=L9yt2ku5oo4CpOLixCADmkcFjLGsWAn-cg-sDcjFhMA,343
|
|
@@ -21,7 +21,7 @@ ninja_aio/schemas/helpers.py,sha256=W6IeHi5Tmbjh3FXwDYqjqlLBTVj5uTYq3_JVkNUWayo,
|
|
|
21
21
|
ninja_aio/views/__init__.py,sha256=DEzjWA6y3WF0V10nNF8eEurLNEodgxKzyFd09AqVp3s,148
|
|
22
22
|
ninja_aio/views/api.py,sha256=jJ0Awl9ynuvM6rWetgp9KHTKlnwREyjl2cxCobY4I_4,20158
|
|
23
23
|
ninja_aio/views/mixins.py,sha256=Jh6BG8Cs823nurVlODlzCquTxKrLH7Pmo5udPqUGZek,11378
|
|
24
|
-
django_ninja_aio_crud-2.3.
|
|
25
|
-
django_ninja_aio_crud-2.3.
|
|
26
|
-
django_ninja_aio_crud-2.3.
|
|
27
|
-
django_ninja_aio_crud-2.3.
|
|
24
|
+
django_ninja_aio_crud-2.3.2.dist-info/licenses/LICENSE,sha256=yrDAYcm0gRp_Qyzo3GQa4BjYjWRkAhGC8QRva__RYq0,1073
|
|
25
|
+
django_ninja_aio_crud-2.3.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
26
|
+
django_ninja_aio_crud-2.3.2.dist-info/METADATA,sha256=mUyyjycFjNldSl4UT1sIne1UvYXcH9deGOhqumkZP3g,9044
|
|
27
|
+
django_ninja_aio_crud-2.3.2.dist-info/RECORD,,
|
ninja_aio/__init__.py
CHANGED
ninja_aio/renders.py
CHANGED
|
@@ -6,6 +6,7 @@ import orjson
|
|
|
6
6
|
from django.http import HttpRequest
|
|
7
7
|
from django.conf import settings
|
|
8
8
|
from ninja.renderers import BaseRenderer
|
|
9
|
+
from pydantic import AnyUrl
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class ORJSONRenderer(BaseRenderer):
|
|
@@ -38,7 +39,7 @@ class ORJSONRenderer(BaseRenderer):
|
|
|
38
39
|
def transform(cls, value):
|
|
39
40
|
if isinstance(value, bytes):
|
|
40
41
|
return base64.b64encode(value).decode()
|
|
41
|
-
if isinstance(value, (IPv4Address, IPv6Address)):
|
|
42
|
+
if isinstance(value, (IPv4Address, IPv6Address, AnyUrl)):
|
|
42
43
|
return str(value)
|
|
43
44
|
if isinstance(value, dict):
|
|
44
45
|
return {k: cls.transform(v) for k, v in value.items()}
|
|
File without changes
|
{django_ninja_aio_crud-2.3.0.dist-info → django_ninja_aio_crud-2.3.2.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|