django-ninja-aio-crud 0.1.3__tar.gz → 0.1.4__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.
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/PKG-INFO +3 -3
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/README.md +2 -2
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/__init__.py +1 -1
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/models.py +19 -15
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/renders.py +6 -6
- django_ninja_aio_crud-0.1.3/ninja_aio/docs/images/bar-swagger.png +0 -0
- django_ninja_aio_crud-0.1.3/ninja_aio/docs/images/foo-swagger.png +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/auth.py +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/exceptions.py +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/parsers.py +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/schemas.py +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/ninja_aio/views.py +0 -0
- {django_ninja_aio_crud-0.1.3 → django_ninja_aio_crud-0.1.4}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-ninja-aio-crud
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Django Ninja AIO CRUD - Rest Framework
|
|
5
5
|
Author: Giuseppe Casillo
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -300,11 +300,11 @@ BarAPI().add_views_to_route()
|
|
|
300
300
|
|
|
301
301
|
- Foo Schemas
|
|
302
302
|
|
|
303
|
-

|
|
304
304
|
|
|
305
305
|
- Bar Schemas with reverse relation
|
|
306
306
|
|
|
307
|
-

|
|
308
308
|
|
|
309
309
|
## 🔒 Authentication
|
|
310
310
|
|
|
@@ -271,11 +271,11 @@ BarAPI().add_views_to_route()
|
|
|
271
271
|
|
|
272
272
|
- Foo Schemas
|
|
273
273
|
|
|
274
|
-

|
|
275
275
|
|
|
276
276
|
- Bar Schemas with reverse relation
|
|
277
277
|
|
|
278
|
-

|
|
279
279
|
|
|
280
280
|
## 🔒 Authentication
|
|
281
281
|
|
|
@@ -87,20 +87,24 @@ class ModelSerializer(models.Model):
|
|
|
87
87
|
for f in cls.ReadSerializer.fields:
|
|
88
88
|
field_obj = getattr(cls, f)
|
|
89
89
|
if isinstance(field_obj, ReverseManyToOneDescriptor):
|
|
90
|
-
reverse_rels.append(field_obj.field.
|
|
90
|
+
reverse_rels.append(field_obj.field._related_name)
|
|
91
91
|
if isinstance(field_obj, ReverseOneToOneDescriptor):
|
|
92
|
-
reverse_rels.append(
|
|
93
|
-
list(field_obj.__dict__.values())[0].__dict__.get("related_name")
|
|
94
|
-
)
|
|
92
|
+
reverse_rels.append(list(field_obj[0].related_name))
|
|
95
93
|
return reverse_rels
|
|
96
94
|
|
|
97
95
|
@classmethod
|
|
98
96
|
def get_reverse_relation_schema(
|
|
99
97
|
cls, obj: type["ModelSerializer"], rel_type: type[REL_TYPES], field: str
|
|
100
98
|
):
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
cls_f = []
|
|
100
|
+
for rel_f in obj.ReadSerializer.fields:
|
|
101
|
+
rel_f_obj = getattr(obj, rel_f).field
|
|
102
|
+
if (
|
|
103
|
+
isinstance(rel_f_obj, (models.ForeignKey, models.OneToOneField))
|
|
104
|
+
and rel_f_obj.related_model == cls
|
|
105
|
+
):
|
|
106
|
+
cls_f.append(rel_f)
|
|
107
|
+
obj.ReadSerializer.fields.remove(rel_f)
|
|
104
108
|
break
|
|
105
109
|
rel_schema = obj.generate_read_s(depth=0)
|
|
106
110
|
if rel_type == "many":
|
|
@@ -110,7 +114,8 @@ class ModelSerializer(models.Model):
|
|
|
110
114
|
rel_schema | None,
|
|
111
115
|
None,
|
|
112
116
|
)
|
|
113
|
-
|
|
117
|
+
if len(cls_f) > 0:
|
|
118
|
+
obj.ReadSerializer.fields.append(*cls_f)
|
|
114
119
|
return rel_data
|
|
115
120
|
|
|
116
121
|
@classmethod
|
|
@@ -120,14 +125,12 @@ class ModelSerializer(models.Model):
|
|
|
120
125
|
for f in cls.ReadSerializer.fields:
|
|
121
126
|
field_obj = getattr(cls, f)
|
|
122
127
|
if isinstance(field_obj, ReverseManyToOneDescriptor):
|
|
123
|
-
rel_obj: ModelSerializer = field_obj.field.
|
|
128
|
+
rel_obj: ModelSerializer = field_obj.field.model
|
|
124
129
|
rel_data = cls.get_reverse_relation_schema(rel_obj, "many", f)
|
|
125
130
|
reverse_rels.append(rel_data)
|
|
126
131
|
continue
|
|
127
132
|
if isinstance(field_obj, ReverseOneToOneDescriptor):
|
|
128
|
-
rel_obj: ModelSerializer = list(field_obj
|
|
129
|
-
0
|
|
130
|
-
].__dict__.get("related_model")
|
|
133
|
+
rel_obj: ModelSerializer = list(field_obj)[0].related_model
|
|
131
134
|
rel_data = cls.get_reverse_relation_schema(rel_obj, "one", f)
|
|
132
135
|
reverse_rels.append(rel_data)
|
|
133
136
|
continue
|
|
@@ -149,9 +152,10 @@ class ModelSerializer(models.Model):
|
|
|
149
152
|
continue
|
|
150
153
|
field_obj = getattr(cls, k).field
|
|
151
154
|
if isinstance(field_obj, models.BinaryField):
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
+
try:
|
|
156
|
+
payload |= {k: base64.b64decode(v)}
|
|
157
|
+
except Exception as exc:
|
|
158
|
+
raise SerializeError({k: ". ".join(exc.args)}, 400)
|
|
155
159
|
if isinstance(field_obj, models.ForeignKey):
|
|
156
160
|
try:
|
|
157
161
|
rel: ModelSerializer = await field_obj.related_model.get_object(
|
|
@@ -8,9 +8,11 @@ from ninja.renderers import BaseRenderer
|
|
|
8
8
|
class ORJSONRenderer(BaseRenderer):
|
|
9
9
|
media_type = "application/json"
|
|
10
10
|
|
|
11
|
-
def render(self, request: HttpRequest, data: dict
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
def render(self, request: HttpRequest, data: dict, *, response_status):
|
|
12
|
+
old_d = data
|
|
13
|
+
for k, v in old_d.items():
|
|
14
|
+
if isinstance(v, list):
|
|
15
|
+
data |= {k: self.render_list(v)}
|
|
14
16
|
return orjson.dumps(self.render_dict(data))
|
|
15
17
|
|
|
16
18
|
@classmethod
|
|
@@ -33,11 +35,9 @@ class ORJSONRenderer(BaseRenderer):
|
|
|
33
35
|
v |= {k_rel: base64.b64encode(v_rel).decode()}
|
|
34
36
|
data |= {k: v}
|
|
35
37
|
if isinstance(v, list):
|
|
36
|
-
index_rel
|
|
37
|
-
for f_rel in v:
|
|
38
|
+
for index_rel, f_rel in enumerate(v):
|
|
38
39
|
for k_rel, v_rel in f_rel.items():
|
|
39
40
|
if isinstance(v_rel, bytes):
|
|
40
41
|
v[index_rel] |= {k_rel: base64.b64encode(v_rel).decode()}
|
|
41
|
-
index_rel += 1
|
|
42
42
|
data |= {k: v}
|
|
43
43
|
return data
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|