fastadmin 0.2.1__tar.gz → 0.2.2__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 (42) hide show
  1. {fastadmin-0.2.1 → fastadmin-0.2.2}/PKG-INFO +3 -2
  2. {fastadmin-0.2.1 → fastadmin-0.2.2}/README.md +2 -1
  3. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/django/app/api.py +2 -2
  4. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/flask/app.py +2 -2
  5. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/base.py +17 -1
  6. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/helpers.py +1 -1
  7. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/orms/ponyorm.py +0 -1
  8. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/index.html +2 -2
  9. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/index.min.js +71 -71
  10. {fastadmin-0.2.1 → fastadmin-0.2.2}/pyproject.toml +1 -1
  11. {fastadmin-0.2.1 → fastadmin-0.2.2}/LICENSE +0 -0
  12. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/__init__.py +0 -0
  13. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/__init__.py +0 -0
  14. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/exceptions.py +0 -0
  15. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/__init__.py +0 -0
  16. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/django/__init__.py +0 -0
  17. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
  18. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/django/app/urls.py +0 -0
  19. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/django/app/views.py +0 -0
  20. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
  21. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/fastapi/api.py +0 -0
  22. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/fastapi/app.py +0 -0
  23. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/fastapi/views.py +0 -0
  24. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/flask/__init__.py +0 -0
  25. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/flask/api.py +0 -0
  26. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/frameworks/flask/views.py +0 -0
  27. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/helpers.py +0 -0
  28. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/schemas.py +0 -0
  29. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/api/service.py +0 -0
  30. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/__init__.py +0 -0
  31. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/decorators.py +0 -0
  32. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/orms/__init__.py +0 -0
  33. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/orms/django.py +0 -0
  34. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/orms/sqlalchemy.py +0 -0
  35. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/orms/tortoise.py +0 -0
  36. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/models/schemas.py +0 -0
  37. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/settings.py +0 -0
  38. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/images/favicon.png +0 -0
  39. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/images/header-logo.svg +0 -0
  40. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/images/sign-in-logo.svg +0 -0
  41. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/static/index.min.css +0 -0
  42. {fastadmin-0.2.1 → fastadmin-0.2.2}/fastadmin/templates/index.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastadmin
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary:
5
5
  Home-page: https://github.com/vsdudakov/fastadmin
6
6
  License: MIT
@@ -43,11 +43,12 @@ Description-Content-Type: text/markdown
43
43
 
44
44
  ## Admin Dashboard App for FastAPI/Flask/Django
45
45
 
46
- [![Build Status](https://github.com/vsdudakov/fastadmin/workflows/CI/badge.svg?branch=main)](https://github.com/vsdudakov/fastadmin/workflows/CI/badge.svg?branch=main)
47
46
  [![codecov](https://codecov.io/gh/vsdudakov/fastadmin/branch/main/graph/badge.svg?token=RNGX5HOW3T)](https://codecov.io/gh/vsdudakov/fastadmin)
48
47
  [![License](https://img.shields.io/github/license/vsdudakov/fastadmin)](https://github.com/vsdudakov/fastadmin/blob/master/LICENSE)
49
48
  [![PyPi](https://badgen.net/pypi/v/fastadmin)](https://pypi.org/project/fastadmin/)
50
49
  [![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/)
50
+ [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3110/)
51
+ [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)
51
52
 
52
53
  ## Screenshots
53
54
 
@@ -1,10 +1,11 @@
1
1
  ## Admin Dashboard App for FastAPI/Flask/Django
2
2
 
3
- [![Build Status](https://github.com/vsdudakov/fastadmin/workflows/CI/badge.svg?branch=main)](https://github.com/vsdudakov/fastadmin/workflows/CI/badge.svg?branch=main)
4
3
  [![codecov](https://codecov.io/gh/vsdudakov/fastadmin/branch/main/graph/badge.svg?token=RNGX5HOW3T)](https://codecov.io/gh/vsdudakov/fastadmin)
5
4
  [![License](https://img.shields.io/github/license/vsdudakov/fastadmin)](https://github.com/vsdudakov/fastadmin/blob/master/LICENSE)
6
5
  [![PyPi](https://badgen.net/pypi/v/fastadmin)](https://pypi.org/project/fastadmin/)
7
6
  [![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/)
7
+ [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/downloads/release/python-3110/)
8
+ [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)
8
9
 
9
10
  ## Screenshots
10
11
 
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  from dataclasses import asdict
4
- from datetime import datetime
4
+ from datetime import datetime, time
5
5
  from functools import wraps
6
6
  from uuid import UUID
7
7
 
@@ -23,7 +23,7 @@ api_service = ApiService()
23
23
 
24
24
  class JsonEncoder(DjangoJSONEncoder):
25
25
  def default(self, o):
26
- if isinstance(o, datetime):
26
+ if isinstance(o, datetime | time):
27
27
  return o.isoformat()
28
28
  if isinstance(o, UUID):
29
29
  return str(o)
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from datetime import date
2
+ from datetime import date, time
3
3
 
4
4
  from flask import Blueprint
5
5
  from flask.json.provider import DefaultJSONProvider
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
14
14
 
15
15
  class JSONProvider(DefaultJSONProvider):
16
16
  def default(self, o):
17
- if isinstance(o, date):
17
+ if isinstance(o, date | time):
18
18
  return o.isoformat()
19
19
  return super().default(o)
20
20
 
@@ -1,4 +1,5 @@
1
1
  import csv
2
+ import datetime
2
3
  import inspect
3
4
  import json
4
5
  from collections.abc import Sequence
@@ -383,6 +384,17 @@ class BaseModelAdmin:
383
384
 
384
385
  return obj_dict
385
386
 
387
+ def deserialize_value(self, field: ModelFieldWidgetSchema, value: Any) -> Any:
388
+ if not value:
389
+ return value
390
+ match field.form_widget_type:
391
+ case WidgetType.TimePicker:
392
+ return datetime.datetime.fromisoformat(value).time()
393
+ case WidgetType.DatePicker | WidgetType.DateTimePicker:
394
+ return datetime.datetime.fromisoformat(value)
395
+ case _:
396
+ return value
397
+
386
398
  async def get_list(
387
399
  self,
388
400
  offset: int | None = None,
@@ -434,7 +446,11 @@ class BaseModelAdmin:
434
446
  m2m_fields = self.get_model_fields_with_widget_types(with_m2m=True)
435
447
  upload_fields = self.get_model_fields_with_widget_types(with_upload=True)
436
448
 
437
- fields_payload = {field.column_name: payload[field.name] for field in fields if field.name in payload}
449
+ fields_payload = {
450
+ field.column_name: self.deserialize_value(field, payload[field.name])
451
+ for field in fields
452
+ if field.name in payload
453
+ }
438
454
  obj = await self.orm_save_obj(id, fields_payload)
439
455
  if not obj:
440
456
  return None
@@ -62,7 +62,7 @@ def get_admin_model(orm_model_cls: str | Any) -> ModelAdmin | None:
62
62
  model_name_prefix = admin_model.model_name_prefix
63
63
  if model_name_prefix:
64
64
  model_name = f"{model_name_prefix}.{model_name}"
65
- if orm_model_cls in model_name:
65
+ if orm_model_cls == model_name:
66
66
  return admin_model
67
67
  return None
68
68
 
@@ -233,7 +233,6 @@ class PonyORMMixin:
233
233
  :return: A tuple of list of objects and total count.
234
234
  """
235
235
 
236
- # import pdb; pdb.set_trace()
237
236
  qs = select(m for m in self.model_cls)
238
237
  if filters:
239
238
  for field_with_condition, value in filters.items():
@@ -7,8 +7,8 @@
7
7
  <meta name="description" content="Fast Admin"/>
8
8
  <title>Fast Admin</title>
9
9
  <script>
10
- window.SERVER_DOMAIN = 'http://localhost:8080';
11
- window.SERVER_URL = 'http://localhost:8080/admin/api';
10
+ window.SERVER_DOMAIN = 'http://localhost:8000';
11
+ window.SERVER_URL = 'http://localhost:8000/admin/api';
12
12
  </script>
13
13
  <script type="module" crossorigin src="/index.min.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="/index.min.css">