django-ninja-aio-crud 0.7.4__py3-none-any.whl → 0.7.6__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-ninja-aio-crud
3
- Version: 0.7.4
3
+ Version: 0.7.6
4
4
  Summary: Django Ninja AIO CRUD - Rest Framework
5
5
  Author: Giuseppe Casillo
6
6
  Requires-Python: >=3.10
@@ -1,14 +1,14 @@
1
- ninja_aio/__init__.py,sha256=mOBOfTz2rTIcK2p5GfONfds9MeHL41sf2sHhoR1WYag,119
1
+ ninja_aio/__init__.py,sha256=NsZXUqBYKLpJvMoz7RCmF2V-wALIQeqim7MKQeGc8II,119
2
2
  ninja_aio/api.py,sha256=Fe6l3YCy7MW5TY4-Lbl80CFuK2NT2Y7tHfmqPk6Mqak,1735
3
3
  ninja_aio/auth.py,sha256=fKboioU4sezPukKJukIwiboxml_KV7irhCH3vGYt5pU,1008
4
4
  ninja_aio/exceptions.py,sha256=gPnZX1Do2GXudbU8wDYkwhO70Qj0ZNrIJJ2UXRs9vYk,2241
5
- ninja_aio/models.py,sha256=-Zh3UFmV3iIUIbMN93uN7v-VInoWp215Y_RXK3izuQI,17115
5
+ ninja_aio/models.py,sha256=S8ZK82zG3Khl1xXsqcUbRoX1CEEnyi-o-Hh0bxsOoYo,17389
6
6
  ninja_aio/parsers.py,sha256=e_4lGCPV7zs-HTqtdJTc8yQD2KPAn9njbL8nF_Mmgkc,153
7
7
  ninja_aio/renders.py,sha256=mHeKNJtmDhZmgFpS9B6SPn5uZFcyVXrsoMhr149LeW8,1555
8
8
  ninja_aio/schemas.py,sha256=EgRkfhnzZqwGvdBmqlZixMtMcoD1ZxV_qzJ3fmaAy20,113
9
9
  ninja_aio/types.py,sha256=TJSGlA7bt4g9fvPhJ7gzH5tKbLagPmZUzfgttEOp4xs,468
10
10
  ninja_aio/views.py,sha256=qROag0OsMeVUXcnUYKV7ZmWj4E0F-QH52PI2-56zVRs,9263
11
- django_ninja_aio_crud-0.7.4.dist-info/licenses/LICENSE,sha256=yrDAYcm0gRp_Qyzo3GQa4BjYjWRkAhGC8QRva__RYq0,1073
12
- django_ninja_aio_crud-0.7.4.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82
13
- django_ninja_aio_crud-0.7.4.dist-info/METADATA,sha256=ZjawRtUD5hMHi_u0klFeVtu8BXXzqgRph-5TELJ1_OQ,13759
14
- django_ninja_aio_crud-0.7.4.dist-info/RECORD,,
11
+ django_ninja_aio_crud-0.7.6.dist-info/licenses/LICENSE,sha256=yrDAYcm0gRp_Qyzo3GQa4BjYjWRkAhGC8QRva__RYq0,1073
12
+ django_ninja_aio_crud-0.7.6.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82
13
+ django_ninja_aio_crud-0.7.6.dist-info/METADATA,sha256=2C0WttgWk2lO7NibI7vdIc6N40RluK61NFhpnT7EmoU,13759
14
+ django_ninja_aio_crud-0.7.6.dist-info/RECORD,,
ninja_aio/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Django Ninja AIO CRUD - Rest Framework"""
2
2
 
3
- __version__ = "0.7.4"
3
+ __version__ = "0.7.6"
4
4
 
5
5
  from .api import NinjaAIO
6
6
 
ninja_aio/models.py CHANGED
@@ -7,6 +7,7 @@ from ninja.orm import create_schema
7
7
  from django.db import models
8
8
  from django.http import HttpRequest
9
9
  from django.core.exceptions import ObjectDoesNotExist
10
+ from asgiref.sync import sync_to_async
10
11
  from django.db.models.fields.related_descriptors import (
11
12
  ReverseManyToOneDescriptor,
12
13
  ReverseOneToOneDescriptor,
@@ -19,6 +20,10 @@ from .exceptions import SerializeError
19
20
  from .types import S_TYPES, F_TYPES, SCHEMA_TYPES, ModelSerializerMeta
20
21
 
21
22
 
23
+ async def agetattr(obj, name: str, default=None):
24
+ return await sync_to_async(getattr)(obj, name, default)
25
+
26
+
22
27
  class ModelUtil:
23
28
  def __init__(self, model: type["ModelSerializer"] | models.Model):
24
29
  self.model = model
@@ -103,7 +108,7 @@ class ModelUtil:
103
108
  continue
104
109
  if self.model.is_optional(k) and v is None:
105
110
  continue
106
- field_obj = getattr(self.model, k).field
111
+ field_obj = (await agetattr(self.model, k)).field
107
112
  if isinstance(field_obj, models.BinaryField):
108
113
  try:
109
114
  payload |= {k: base64.b64decode(v)}
@@ -125,10 +130,10 @@ class ModelUtil:
125
130
  payload = data.model_dump()
126
131
  for k, v in payload.items():
127
132
  try:
128
- field_obj = getattr(self.model, k).field
133
+ field_obj = (await agetattr(self.model, k)).field
129
134
  except AttributeError:
130
135
  try:
131
- field_obj = getattr(self.model, k).related
136
+ field_obj = (await agetattr(self.model, k)).related
132
137
  except AttributeError:
133
138
  pass
134
139
  if isinstance(v, dict) and (
@@ -141,7 +146,7 @@ class ModelUtil:
141
146
  )
142
147
  if isinstance(field_obj, models.ForeignKey):
143
148
  for rel_k, rel_v in v.items():
144
- field_rel_obj = getattr(rel, rel_k)
149
+ field_rel_obj = await agetattr(rel, rel_k)
145
150
  if isinstance(field_rel_obj, models.ForeignKey):
146
151
  olds_k.append({rel_k: rel_v})
147
152
  for obj in olds_k:
@@ -169,7 +174,9 @@ class ModelUtil:
169
174
  ):
170
175
  if obj_schema is None:
171
176
  raise SerializeError({"obj_schema": "must be provided"}, 400)
172
- return await self.parse_output_data(request, obj_schema.from_orm(obj))
177
+ return await self.parse_output_data(
178
+ request, await sync_to_async(obj_schema.from_orm)(obj)
179
+ )
173
180
 
174
181
  async def update_s(
175
182
  self, request: HttpRequest, data: Schema, pk: int | str, obj_schema: Schema
@@ -348,7 +355,10 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
348
355
  @classmethod
349
356
  def get_related_schema_data(cls):
350
357
  fields = cls.get_fields("read")
351
- custom_f = {name: (value, default) for name, value, default in cls.get_custom_fields("read")}
358
+ custom_f = {
359
+ name: (value, default)
360
+ for name, value, default in cls.get_custom_fields("read")
361
+ }
352
362
  _related_fields = []
353
363
  for f in fields + list(custom_f.keys()):
354
364
  field_obj = getattr(cls, f)
@@ -367,8 +377,9 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
367
377
  if not _related_fields:
368
378
  return None, None
369
379
 
370
-
371
- custom_related_fields = [(f, *custom_f[f]) for f in _related_fields if f in custom_f]
380
+ custom_related_fields = [
381
+ (f, *custom_f[f]) for f in _related_fields if f in custom_f
382
+ ]
372
383
  related_fields = [f for f in _related_fields if f not in custom_f]
373
384
  return related_fields, custom_related_fields
374
385