fastadmin 0.4.3__tar.gz → 0.4.5__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.3 → fastadmin-0.4.5}/PKG-INFO +1 -1
  2. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/__init__.py +2 -0
  3. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/base.py +6 -0
  4. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/decorators.py +39 -15
  5. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/helpers.py +3 -0
  6. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/schemas.py +12 -0
  7. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/index.min.js +184 -184
  8. {fastadmin-0.4.3 → fastadmin-0.4.5}/pyproject.toml +1 -1
  9. {fastadmin-0.4.3 → fastadmin-0.4.5}/LICENSE +0 -0
  10. {fastadmin-0.4.3 → fastadmin-0.4.5}/README.md +0 -0
  11. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/__init__.py +0 -0
  12. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/exceptions.py +0 -0
  13. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/__init__.py +0 -0
  14. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/django/__init__.py +0 -0
  15. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
  16. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/django/app/api.py +0 -0
  17. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/django/app/urls.py +0 -0
  18. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/django/app/views.py +0 -0
  19. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
  20. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/fastapi/api.py +0 -0
  21. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/fastapi/app.py +0 -0
  22. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/fastapi/views.py +0 -0
  23. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/flask/__init__.py +0 -0
  24. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/flask/api.py +0 -0
  25. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/flask/app.py +0 -0
  26. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/frameworks/flask/views.py +0 -0
  27. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/helpers.py +0 -0
  28. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/schemas.py +0 -0
  29. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/api/service.py +0 -0
  30. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/__init__.py +0 -0
  31. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/orms/__init__.py +0 -0
  32. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/orms/django.py +0 -0
  33. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/orms/ponyorm.py +0 -0
  34. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/orms/sqlalchemy.py +0 -0
  35. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/models/orms/tortoise.py +0 -0
  36. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/settings.py +0 -0
  37. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-6Z7niv9l.js +0 -0
  38. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-C151k0-L.js +0 -0
  39. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-C9KPOOKD.js +0 -0
  40. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-D1fCgYB7.js +0 -0
  41. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-D3TWcJOI.js +0 -0
  42. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-DRNcaZ-V.js +0 -0
  43. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/assets/worker-MF2p-l5_.js +0 -0
  44. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/images/favicon.png +0 -0
  45. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/images/header-logo.svg +0 -0
  46. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/images/sign-in-logo.svg +0 -0
  47. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/index.html +0 -0
  48. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/static/index.min.css +0 -0
  49. {fastadmin-0.4.3 → fastadmin-0.4.5}/fastadmin/templates/index.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastadmin
3
- Version: 0.4.3
3
+ Version: 0.4.5
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
@@ -43,10 +43,12 @@ from fastadmin.models.schemas import ( # noqa: F401
43
43
  ActionInputSchema,
44
44
  ActionResponseSchema,
45
45
  ActionResponseType,
46
+ ModelWidgetAction,
46
47
  WidgetActionArgumentProps,
47
48
  WidgetActionChartProps,
48
49
  WidgetActionFilter,
49
50
  WidgetActionInputSchema,
51
+ WidgetActionParentArgumentProps,
50
52
  WidgetActionProps,
51
53
  WidgetActionQuerySchema,
52
54
  WidgetActionResponseSchema,
@@ -243,6 +243,12 @@ class BaseModelAdmin:
243
243
  """
244
244
  raise NotImplementedError
245
245
 
246
+ async def pre_generate_models_schema(self) -> None:
247
+ """This method is used to pre-generate models schema.
248
+
249
+ :return: None.
250
+ """
251
+
246
252
  async def orm_get_list(
247
253
  self,
248
254
  offset: int | None = None,
@@ -1,4 +1,6 @@
1
1
  import typing as tp
2
+ from functools import wraps
3
+ from inspect import iscoroutinefunction
2
4
 
3
5
  from fastadmin.models.schemas import (
4
6
  WidgetActionChartProps,
@@ -8,6 +10,22 @@ from fastadmin.models.schemas import (
8
10
  )
9
11
 
10
12
 
13
+ def _wrap_callable(func):
14
+ if iscoroutinefunction(func):
15
+
16
+ @wraps(func)
17
+ async def wrapped(*args, **kwargs):
18
+ return await func(*args, **kwargs)
19
+
20
+ else:
21
+
22
+ @wraps(func)
23
+ def wrapped(*args, **kwargs):
24
+ return func(*args, **kwargs)
25
+
26
+ return wrapped
27
+
28
+
11
29
  def action(
12
30
  function=None,
13
31
  *,
@@ -27,10 +45,12 @@ def action(
27
45
  """
28
46
 
29
47
  def decorator(func):
30
- func.is_action = True
48
+ wrapped = _wrap_callable(func)
49
+
50
+ wrapped.is_action = True
31
51
  if description is not None:
32
- func.short_description = description
33
- return func
52
+ wrapped.short_description = description
53
+ return wrapped
34
54
 
35
55
  if function is None:
36
56
  return decorator
@@ -103,16 +123,18 @@ def widget_action(
103
123
  """
104
124
 
105
125
  def decorator(func):
106
- func.is_widget_action = True
107
- func.widget_action_type = widget_action_type
108
- func.widget_action_props = widget_action_props
109
- func.widget_action_filters = widget_action_filters
110
- func.tab = tab
111
- func.title = title
112
- func.width = width
126
+ wrapped = _wrap_callable(func)
127
+
128
+ wrapped.is_widget_action = True
129
+ wrapped.widget_action_type = widget_action_type
130
+ wrapped.widget_action_props = widget_action_props
131
+ wrapped.widget_action_filters = widget_action_filters
132
+ wrapped.tab = tab
133
+ wrapped.title = title
134
+ wrapped.width = width
113
135
  if description is not None:
114
- func.short_description = description
115
- return func
136
+ wrapped.short_description = description
137
+ return wrapped
116
138
 
117
139
  if function is None:
118
140
  return decorator
@@ -137,9 +159,11 @@ def display(function=None, *, sorter: bool | str = False):
137
159
  """
138
160
 
139
161
  def decorator(func):
140
- func.is_display = True
141
- func.sorter = sorter
142
- return func
162
+ wrapped = _wrap_callable(func)
163
+
164
+ wrapped.is_display = True
165
+ wrapped.sorter = sorter
166
+ return wrapped
143
167
 
144
168
  if function is None:
145
169
  return decorator
@@ -115,6 +115,9 @@ async def generate_models_schema(
115
115
  for orm_model_cls, admin_model_obj in admin_models.items():
116
116
  if hasattr(admin_model_obj, "set_context"):
117
117
  admin_model_obj.set_context(request=request, user=user)
118
+ pre_generate_models_schema = getattr(admin_model_obj, "pre_generate_models_schema", None)
119
+ if callable(pre_generate_models_schema):
120
+ await pre_generate_models_schema()
118
121
  orm_model_fields = admin_model_obj.get_model_fields_with_widget_types()
119
122
  orm_model_fields_for_serialize = admin_model_obj.get_fields_for_serialize()
120
123
 
@@ -70,6 +70,14 @@ class WidgetActionChartProps:
70
70
  series_color: list[str] | dict[str, str] | None = None
71
71
 
72
72
 
73
+ @dataclass
74
+ class WidgetActionParentArgumentProps:
75
+ """Widget action parent argument props"""
76
+
77
+ name: str
78
+ value: tp.Any
79
+
80
+
73
81
  @dataclass
74
82
  class WidgetActionArgumentProps:
75
83
  """Widget action chart props"""
@@ -78,6 +86,10 @@ class WidgetActionArgumentProps:
78
86
  widget_type: WidgetType
79
87
  widget_props: dict | None = None
80
88
 
89
+ # if None, show always
90
+ # if not None, show only if parent selected/input value is equal to the parent_argument.value
91
+ parent_argument: WidgetActionParentArgumentProps | None = None
92
+
81
93
 
82
94
  @dataclass
83
95
  class WidgetActionProps: