fastadmin 0.2.16__tar.gz → 0.2.17__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 (46) hide show
  1. {fastadmin-0.2.16 → fastadmin-0.2.17}/PKG-INFO +1 -1
  2. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/orms/sqlalchemy.py +28 -8
  3. fastadmin-0.2.17/fastadmin/static/assets/worker-MF2p-l5_.js +13 -0
  4. fastadmin-0.2.17/fastadmin/static/index.min.js +865 -0
  5. {fastadmin-0.2.16 → fastadmin-0.2.17}/pyproject.toml +1 -1
  6. fastadmin-0.2.16/fastadmin/static/index.min.js +0 -865
  7. {fastadmin-0.2.16 → fastadmin-0.2.17}/LICENSE +0 -0
  8. {fastadmin-0.2.16 → fastadmin-0.2.17}/README.md +0 -0
  9. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/__init__.py +0 -0
  10. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/__init__.py +0 -0
  11. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/exceptions.py +0 -0
  12. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/__init__.py +0 -0
  13. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/django/__init__.py +0 -0
  14. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
  15. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/django/app/api.py +0 -0
  16. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/django/app/urls.py +0 -0
  17. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/django/app/views.py +0 -0
  18. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
  19. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/fastapi/api.py +0 -0
  20. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/fastapi/app.py +0 -0
  21. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/fastapi/views.py +0 -0
  22. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/flask/__init__.py +0 -0
  23. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/flask/api.py +0 -0
  24. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/flask/app.py +0 -0
  25. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/frameworks/flask/views.py +0 -0
  26. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/helpers.py +0 -0
  27. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/schemas.py +0 -0
  28. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/api/service.py +0 -0
  29. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/__init__.py +0 -0
  30. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/base.py +0 -0
  31. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/decorators.py +0 -0
  32. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/helpers.py +0 -0
  33. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/orms/__init__.py +0 -0
  34. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/orms/django.py +0 -0
  35. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/orms/ponyorm.py +0 -0
  36. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/orms/tortoise.py +0 -0
  37. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/models/schemas.py +0 -0
  38. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/settings.py +0 -0
  39. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/assets/worker-C151k0-L.js +0 -0
  40. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/assets/worker-D3TWcJOI.js +0 -0
  41. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/images/favicon.png +0 -0
  42. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/images/header-logo.svg +0 -0
  43. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/images/sign-in-logo.svg +0 -0
  44. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/index.html +0 -0
  45. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/static/index.min.css +0 -0
  46. {fastadmin-0.2.16 → fastadmin-0.2.17}/fastadmin/templates/index.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastadmin
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: FastAdmin is an easy-to-use Admin Dashboard App for FastAPI/Flask/Django inspired by Django Admin.
5
5
  Home-page: https://github.com/vsdudakov/fastadmin
6
6
  License: MIT
@@ -1,7 +1,8 @@
1
+ import contextlib
1
2
  from typing import Any
2
3
  from uuid import UUID
3
4
 
4
- from sqlalchemy import and_, func, inspect, or_, select, text
5
+ from sqlalchemy import BIGINT, Integer, and_, func, inspect, or_, select, text
5
6
  from sqlalchemy.orm import selectinload
6
7
 
7
8
  from fastadmin.models.base import InlineModelAdmin, ModelAdmin
@@ -261,21 +262,27 @@ class SqlAlchemyMixin:
261
262
  for field_with_condition, value in filters.items():
262
263
  field = field_with_condition[0]
263
264
  condition = field_with_condition[1]
265
+ model_field = getattr(self.model_cls, field)
266
+
267
+ if isinstance(model_field.expression.type, BIGINT | Integer):
268
+ with contextlib.suppress(ValueError):
269
+ value = int(value)
270
+
264
271
  match condition:
265
272
  case "lte":
266
- q.append(getattr(self.model_cls, field) >= value)
273
+ q.append(model_field >= value)
267
274
  case "gte":
268
- q.append(getattr(self.model_cls, field) <= value)
275
+ q.append(model_field <= value)
269
276
  case "lt":
270
- q.append(getattr(self.model_cls, field) > value)
277
+ q.append(model_field > value)
271
278
  case "gt":
272
- q.append(getattr(self.model_cls, field) < value)
279
+ q.append(model_field < value)
273
280
  case "exact":
274
- q.append(getattr(self.model_cls, field) == value)
281
+ q.append(model_field == value)
275
282
  case "contains":
276
- q.append(getattr(self.model_cls, field).like(f"%{value}%"))
283
+ q.append(model_field.like(f"%{value}%"))
277
284
  case "icontains":
278
- q.append(getattr(self.model_cls, field).ilike(f"%{value}%"))
285
+ q.append(model_field.ilike(f"%{value}%"))
279
286
  qs = qs.filter(and_(*q))
280
287
 
281
288
  if search and self.search_fields:
@@ -313,6 +320,13 @@ class SqlAlchemyMixin:
313
320
  async with sessionmaker() as session:
314
321
  return await session.get(self.model_cls, id)
315
322
 
323
+ def _get_foreign_key_fields(self) -> list[str]:
324
+ """Returns a list of foreign key fields for the model.
325
+
326
+ :return: List of foreign key field names.
327
+ """
328
+ return [column.name for column in self.model_cls.__table__.columns if column.foreign_keys]
329
+
316
330
  async def orm_save_obj(self, id: UUID | Any | None, payload: dict) -> Any:
317
331
  """This method is used to save orm/db model object.
318
332
 
@@ -320,6 +334,12 @@ class SqlAlchemyMixin:
320
334
  :params payload: a dict of payload.
321
335
  :return: An object.
322
336
  """
337
+ for fk_field_name in self._get_foreign_key_fields():
338
+ if fk_field_name in payload and isinstance(payload[fk_field_name], str):
339
+ with contextlib.suppress(ValueError):
340
+ # convert string to int for foreign key fields for postgresql alchemy
341
+ payload[fk_field_name] = int(payload[fk_field_name])
342
+
323
343
  sessionmaker = self.get_sessionmaker()
324
344
  async with sessionmaker() as session:
325
345
  if id: