fastadmin 0.2.13__tar.gz → 0.2.15__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.
- {fastadmin-0.2.13 → fastadmin-0.2.15}/PKG-INFO +2 -1
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/service.py +1 -1
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/base.py +23 -4
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/helpers.py +6 -6
- fastadmin-0.2.15/fastadmin/static/assets/worker-D3TWcJOI.js +13 -0
- fastadmin-0.2.15/fastadmin/static/index.min.js +864 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/pyproject.toml +1 -1
- fastadmin-0.2.13/fastadmin/static/index.min.js +0 -755
- {fastadmin-0.2.13 → fastadmin-0.2.15}/LICENSE +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/README.md +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/exceptions.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/django/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/django/app/api.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/django/app/urls.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/django/app/views.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/fastapi/api.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/fastapi/app.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/fastapi/views.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/flask/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/flask/api.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/flask/app.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/frameworks/flask/views.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/helpers.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/api/schemas.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/decorators.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/orms/__init__.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/orms/django.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/orms/ponyorm.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/orms/sqlalchemy.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/orms/tortoise.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/models/schemas.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/settings.py +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/static/images/favicon.png +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/static/images/header-logo.svg +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/static/images/sign-in-logo.svg +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/static/index.html +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/static/index.min.css +0 -0
- {fastadmin-0.2.13 → fastadmin-0.2.15}/fastadmin/templates/index.html +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fastadmin
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.15
|
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
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
21
22
|
Classifier: Topic :: Software Development :: Documentation
|
22
23
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
23
24
|
Classifier: Topic :: Software Development :: Widget Sets
|
@@ -465,7 +465,7 @@ class ApiService:
|
|
465
465
|
)
|
466
466
|
|
467
467
|
admin_models = cast(dict[Any, ModelAdmin | InlineModelAdmin], get_admin_models())
|
468
|
-
models = cast(Sequence[ModelSchema], generate_models_schema(admin_models, user_id=current_user_id))
|
468
|
+
models = cast(Sequence[ModelSchema], await generate_models_schema(admin_models, user_id=current_user_id))
|
469
469
|
dashboard_widgets = generate_dashboard_widgets_schema()
|
470
470
|
return ConfigurationSchema(
|
471
471
|
site_name=settings.ADMIN_SITE_NAME,
|
@@ -524,7 +524,7 @@ class BaseModelAdmin:
|
|
524
524
|
case _:
|
525
525
|
return None
|
526
526
|
|
527
|
-
def has_add_permission(self, user_id: UUID | int | None = None) -> bool:
|
527
|
+
async def has_add_permission(self, user_id: UUID | int | None = None) -> bool:
|
528
528
|
"""This method is used to check if user has permission to add new model instance.
|
529
529
|
|
530
530
|
:param user_id: The user id.
|
@@ -532,7 +532,7 @@ class BaseModelAdmin:
|
|
532
532
|
"""
|
533
533
|
return True
|
534
534
|
|
535
|
-
def has_change_permission(self, user_id: UUID | int | None = None) -> bool:
|
535
|
+
async def has_change_permission(self, user_id: UUID | int | None = None) -> bool:
|
536
536
|
"""This method is used to check if user has permission to change model instance.
|
537
537
|
|
538
538
|
:param user_id: The user id.
|
@@ -540,7 +540,7 @@ class BaseModelAdmin:
|
|
540
540
|
"""
|
541
541
|
return True
|
542
542
|
|
543
|
-
def has_delete_permission(self, user_id: UUID | int | None = None) -> bool:
|
543
|
+
async def has_delete_permission(self, user_id: UUID | int | None = None) -> bool:
|
544
544
|
"""This method is used to check if user has permission to delete model instance.
|
545
545
|
|
546
546
|
:param user_id: The user id.
|
@@ -548,7 +548,7 @@ class BaseModelAdmin:
|
|
548
548
|
"""
|
549
549
|
return True
|
550
550
|
|
551
|
-
def has_export_permission(self, user_id: UUID | int | None = None) -> bool:
|
551
|
+
async def has_export_permission(self, user_id: UUID | int | None = None) -> bool:
|
552
552
|
"""This method is used to check if user has permission to export model instance.
|
553
553
|
|
554
554
|
:param user_id: The user id.
|
@@ -621,6 +621,25 @@ class ModelAdmin(BaseModelAdmin):
|
|
621
621
|
"""
|
622
622
|
raise NotImplementedError
|
623
623
|
|
624
|
+
async def save_model(self, id: UUID | int | None, payload: dict) -> dict | None:
|
625
|
+
"""This method is used to save orm/db model object.
|
626
|
+
|
627
|
+
:params id: an id of object.
|
628
|
+
:params payload: a payload from request.
|
629
|
+
:return: A saved object or None.
|
630
|
+
"""
|
631
|
+
obj = await super().save_model(id, payload)
|
632
|
+
fields = self.get_model_fields_with_widget_types(with_m2m=False, with_upload=False)
|
633
|
+
password_fields = [field.name for field in fields if field.form_widget_type == WidgetType.PasswordInput]
|
634
|
+
if obj and id is None and password_fields:
|
635
|
+
# save hashed password for create
|
636
|
+
pk_name = self.get_model_pk_name(self.model_cls)
|
637
|
+
pk = obj[pk_name]
|
638
|
+
password_values = [payload[field] for field in password_fields if field in payload]
|
639
|
+
if password_values:
|
640
|
+
await self.change_password(pk, password_values[0])
|
641
|
+
return obj
|
642
|
+
|
624
643
|
|
625
644
|
class DashboardWidgetAdmin:
|
626
645
|
title: str
|
@@ -98,7 +98,7 @@ def get_admin_or_admin_inline_model(orm_model_cls: str) -> ModelAdmin | InlineMo
|
|
98
98
|
return None
|
99
99
|
|
100
100
|
|
101
|
-
def generate_models_schema(
|
101
|
+
async def generate_models_schema(
|
102
102
|
admin_models: dict[Any, ModelAdmin | InlineModelAdmin],
|
103
103
|
user_id: UUID | int | None = None,
|
104
104
|
inline_parent_admin_modal: ModelAdmin | None = None,
|
@@ -207,13 +207,13 @@ def generate_models_schema(
|
|
207
207
|
)
|
208
208
|
|
209
209
|
permissions = []
|
210
|
-
if admin_model_obj.has_add_permission(user_id=user_id):
|
210
|
+
if await admin_model_obj.has_add_permission(user_id=user_id):
|
211
211
|
permissions.append(ModelPermission.Add)
|
212
|
-
if admin_model_obj.has_change_permission(user_id=user_id):
|
212
|
+
if await admin_model_obj.has_change_permission(user_id=user_id):
|
213
213
|
permissions.append(ModelPermission.Change)
|
214
|
-
if admin_model_obj.has_delete_permission(user_id=user_id):
|
214
|
+
if await admin_model_obj.has_delete_permission(user_id=user_id):
|
215
215
|
permissions.append(ModelPermission.Delete)
|
216
|
-
if admin_model_obj.has_export_permission(user_id=user_id):
|
216
|
+
if await admin_model_obj.has_export_permission(user_id=user_id):
|
217
217
|
permissions.append(ModelPermission.Export)
|
218
218
|
|
219
219
|
actions = []
|
@@ -257,7 +257,7 @@ def generate_models_schema(
|
|
257
257
|
save_as=admin_model_obj.save_as,
|
258
258
|
save_as_continue=admin_model_obj.save_as_continue,
|
259
259
|
view_on_site=admin_model_obj.view_on_site,
|
260
|
-
inlines=generate_models_schema(
|
260
|
+
inlines=await generate_models_schema(
|
261
261
|
{inline.model: inline(inline.model) for inline in admin_model_obj.inlines},
|
262
262
|
inline_parent_admin_modal=admin_model_obj,
|
263
263
|
user_id=user_id,
|