fastadmin 0.4.7__tar.gz → 0.4.8__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 (49) hide show
  1. {fastadmin-0.4.7 → fastadmin-0.4.8}/PKG-INFO +1 -1
  2. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/base.py +1 -1
  3. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/orms/django.py +1 -1
  4. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/orms/ponyorm.py +12 -2
  5. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/orms/sqlalchemy.py +1 -1
  6. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/orms/tortoise.py +1 -1
  7. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/schemas.py +1 -1
  8. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/index.min.js +180 -180
  9. {fastadmin-0.4.7 → fastadmin-0.4.8}/pyproject.toml +1 -1
  10. {fastadmin-0.4.7 → fastadmin-0.4.8}/LICENSE +0 -0
  11. {fastadmin-0.4.7 → fastadmin-0.4.8}/README.md +0 -0
  12. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/__init__.py +0 -0
  13. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/__init__.py +0 -0
  14. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/exceptions.py +0 -0
  15. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/__init__.py +0 -0
  16. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/django/__init__.py +0 -0
  17. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
  18. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/django/app/api.py +0 -0
  19. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/django/app/urls.py +0 -0
  20. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/django/app/views.py +0 -0
  21. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
  22. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/fastapi/api.py +0 -0
  23. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/fastapi/app.py +0 -0
  24. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/fastapi/views.py +0 -0
  25. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/flask/__init__.py +0 -0
  26. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/flask/api.py +0 -0
  27. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/flask/app.py +0 -0
  28. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/frameworks/flask/views.py +0 -0
  29. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/helpers.py +0 -0
  30. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/schemas.py +0 -0
  31. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/api/service.py +0 -0
  32. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/__init__.py +0 -0
  33. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/decorators.py +0 -0
  34. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/helpers.py +0 -0
  35. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/models/orms/__init__.py +0 -0
  36. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/settings.py +0 -0
  37. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-6Z7niv9l.js +0 -0
  38. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-C151k0-L.js +0 -0
  39. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-C9KPOOKD.js +0 -0
  40. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-D1fCgYB7.js +0 -0
  41. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-D3TWcJOI.js +0 -0
  42. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-DRNcaZ-V.js +0 -0
  43. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/assets/worker-MF2p-l5_.js +0 -0
  44. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/images/favicon.png +0 -0
  45. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/images/header-logo.svg +0 -0
  46. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/images/sign-in-logo.svg +0 -0
  47. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/index.html +0 -0
  48. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/static/index.min.css +0 -0
  49. {fastadmin-0.4.7 → fastadmin-0.4.8}/fastadmin/templates/index.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastadmin
3
- Version: 0.4.7
3
+ Version: 0.4.8
4
4
  Summary: FastAdmin is an easy-to-use Admin Dashboard App for FastAPI/Flask/Django inspired by Django Admin.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -313,7 +313,7 @@ class BaseModelAdmin:
313
313
  """
314
314
  raise NotImplementedError
315
315
 
316
- async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | UUID]) -> None:
316
+ async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) -> None:
317
317
  """This method is used to get m2m ids.
318
318
 
319
319
  :params obj: an object.
@@ -331,7 +331,7 @@ class DjangoORMMixin:
331
331
  return list(m2m_rel.all().values_list(self.get_model_pk_name(remote_model), flat=True))
332
332
 
333
333
  @sync_to_async
334
- def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | UUID]) -> None:
334
+ def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) -> None:
335
335
  """This method is used to get m2m ids.
336
336
 
337
337
  :params obj: an object.
@@ -408,7 +408,7 @@ class PonyORMMixin:
408
408
 
409
409
  @sync_to_async
410
410
  @db_session
411
- def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | UUID]) -> None:
411
+ def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) -> None:
412
412
  """This method is used to get m2m ids.
413
413
 
414
414
  :params obj: an object.
@@ -425,7 +425,17 @@ class PonyORMMixin:
425
425
  if ids:
426
426
  rel_model_cls = getattr(self.model_cls, field).py_type
427
427
  rel_key_id = self.get_model_pk_name(rel_model_cls)
428
- rel_objs = list(rel_model_cls.select(lambda o: getattr(o, rel_key_id) in ids))
428
+ rel_id_type = getattr(getattr(rel_model_cls, "_pk_", None), "py_type", None)
429
+ normalized_ids = []
430
+ for rel_id in ids:
431
+ normalized_id = rel_id
432
+ if rel_id_type:
433
+ try:
434
+ normalized_id = rel_id_type(rel_id)
435
+ except (ValueError, TypeError) as e:
436
+ raise ValueError(f"Invalid id {rel_id!r} for relation {field}.") from e
437
+ normalized_ids.append(normalized_id)
438
+ rel_objs = list(rel_model_cls.select(lambda o: getattr(o, rel_key_id) in normalized_ids))
429
439
  getattr(obj, field).add(rel_objs)
430
440
  flush()
431
441
  commit()
@@ -467,7 +467,7 @@ class SqlAlchemyMixin:
467
467
  rel_pk_name = self.get_model_pk_name(related_class)
468
468
  return [getattr(related_obj, rel_pk_name) for related_obj in getattr(loaded, field, [])]
469
469
 
470
- async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | UUID]) -> None:
470
+ async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) -> None:
471
471
  """This method is used to get m2m ids.
472
472
 
473
473
  :params obj: an object.
@@ -338,7 +338,7 @@ class TortoiseMixin:
338
338
  remote_model = m2m_rel.remote_model
339
339
  return await m2m_rel.all().values_list(self.get_model_pk_name(remote_model), flat=True)
340
340
 
341
- async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | UUID]) -> None:
341
+ async def orm_save_m2m_ids(self, obj: Any, field: str, ids: list[int | str | UUID]) -> None:
342
342
  """This method is used to get m2m ids.
343
343
 
344
344
  :params obj: an object.
@@ -256,7 +256,7 @@ class ModelFieldWidgetSchema:
256
256
  class ActionInputSchema:
257
257
  """Action input schema"""
258
258
 
259
- ids: list[int | UUID]
259
+ ids: list[int | str | UUID]
260
260
 
261
261
 
262
262
  @dataclass