crudadmin 0.3.3__tar.gz → 0.3.4__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.
- {crudadmin-0.3.3 → crudadmin-0.3.4}/PKG-INFO +1 -1
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/crud_admin.py +27 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/model_view.py +17 -4
- {crudadmin-0.3.3 → crudadmin-0.3.4}/pyproject.toml +1 -1
- {crudadmin-0.3.3 → crudadmin-0.3.4}/.gitignore +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/LICENSE +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/README.md +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/admin_site.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/auth.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/helper.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/auth.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/https.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/ip_restriction.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/typing.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/models.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/schemas.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/service.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/auth.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/db.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/exceptions.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/rate_limiter.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/schemas/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/schemas/timestamp.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/decorators.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/integration.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/models.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/schemas.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/service.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/py.typed +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/__init__.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/database.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/hybrid.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/memcached.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/memory.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/redis.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/manager.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/models.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/schemas.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/storage.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/user_agents_types.py +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/static/favicon.png +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/static/htmx.min.js +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/dashboard/dashboard.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/dashboard/dashboard_content.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/events.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/events_content.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/health.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/health_content.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/list_content.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/pagination.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/table_content.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/create.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/list.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/update.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/auth/login.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/base/base.html +0 -0
- {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/shared/utils/refresh.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crudadmin
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: FastAPI-based admin interface with authentication, event logging and CRUD operations
|
|
5
5
|
Project-URL: Homepage, https://github.com/benavlabs/crudadmin
|
|
6
6
|
Project-URL: Documentation, https://benavlabs.github.io/crudadmin
|
|
@@ -803,6 +803,7 @@ class CRUDAdmin:
|
|
|
803
803
|
update_schema: Type[BaseModel],
|
|
804
804
|
update_internal_schema: Optional[Type[BaseModel]] = None,
|
|
805
805
|
delete_schema: Optional[Type[BaseModel]] = None,
|
|
806
|
+
select_schema: Optional[Type[BaseModel]] = None,
|
|
806
807
|
include_in_models: bool = True,
|
|
807
808
|
allowed_actions: Optional[set[str]] = None,
|
|
808
809
|
password_transformer: Optional[Any] = None,
|
|
@@ -819,6 +820,7 @@ class CRUDAdmin:
|
|
|
819
820
|
update_schema: Pydantic schema for update operations
|
|
820
821
|
update_internal_schema: Internal schema for special update cases
|
|
821
822
|
delete_schema: Schema for delete operations
|
|
823
|
+
select_schema: Optional schema for read operations (excludes fields from queries)
|
|
822
824
|
include_in_models: Show in models list in admin UI
|
|
823
825
|
allowed_actions: **Set of allowed operations:**
|
|
824
826
|
- **"view"**: Allow viewing records
|
|
@@ -835,6 +837,7 @@ class CRUDAdmin:
|
|
|
835
837
|
Notes:
|
|
836
838
|
- Forms are auto-generated with field types determined from Pydantic schemas
|
|
837
839
|
- Actions controlled by allowed_actions parameter
|
|
840
|
+
- Use select_schema to exclude problematic fields (e.g., TSVector) from read operations
|
|
838
841
|
- Use password_transformer for models with password fields that need hashing
|
|
839
842
|
|
|
840
843
|
URL Routes:
|
|
@@ -872,6 +875,29 @@ class CRUDAdmin:
|
|
|
872
875
|
)
|
|
873
876
|
```
|
|
874
877
|
|
|
878
|
+
Excluding problematic fields (e.g., TSVector):
|
|
879
|
+
```python
|
|
880
|
+
class DocumentCreate(BaseModel):
|
|
881
|
+
title: str
|
|
882
|
+
content: str
|
|
883
|
+
# TSVector field excluded from this schema
|
|
884
|
+
|
|
885
|
+
class DocumentSelect(BaseModel):
|
|
886
|
+
id: int
|
|
887
|
+
title: str
|
|
888
|
+
content: str
|
|
889
|
+
created_at: datetime
|
|
890
|
+
# search_vector (TSVector) field excluded
|
|
891
|
+
|
|
892
|
+
admin.add_view(
|
|
893
|
+
model=Document,
|
|
894
|
+
create_schema=DocumentCreate,
|
|
895
|
+
update_schema=DocumentCreate,
|
|
896
|
+
select_schema=DocumentSelect, # TSVector field excluded from reads
|
|
897
|
+
allowed_actions={"view", "create", "update"}
|
|
898
|
+
)
|
|
899
|
+
```
|
|
900
|
+
|
|
875
901
|
User with password handling:
|
|
876
902
|
```python
|
|
877
903
|
from crudadmin.admin_interface.model_view import PasswordTransformer
|
|
@@ -1028,6 +1054,7 @@ class CRUDAdmin:
|
|
|
1028
1054
|
update_schema=update_schema,
|
|
1029
1055
|
update_internal_schema=update_internal_schema,
|
|
1030
1056
|
delete_schema=delete_schema,
|
|
1057
|
+
select_schema=select_schema,
|
|
1031
1058
|
admin_site=self.admin_site,
|
|
1032
1059
|
allowed_actions=allowed_actions,
|
|
1033
1060
|
event_integration=self.event_integration,
|
|
@@ -772,7 +772,10 @@ class ModelView:
|
|
|
772
772
|
f"{pk_name}__in": valid_ids
|
|
773
773
|
}
|
|
774
774
|
records_to_delete = await self.crud.get_multi(
|
|
775
|
-
db=db,
|
|
775
|
+
db=db,
|
|
776
|
+
limit=len(valid_ids),
|
|
777
|
+
schema_to_select=self.select_schema,
|
|
778
|
+
**cast(Any, filter_criteria),
|
|
776
779
|
)
|
|
777
780
|
|
|
778
781
|
request.state.deleted_records = records_to_delete.get("data", [])
|
|
@@ -804,6 +807,7 @@ class ModelView:
|
|
|
804
807
|
db=db,
|
|
805
808
|
offset=(adjusted_page - 1) * rows_per_page,
|
|
806
809
|
limit=rows_per_page,
|
|
810
|
+
schema_to_select=self.select_schema,
|
|
807
811
|
)
|
|
808
812
|
|
|
809
813
|
items: Dict[str, Any] = {
|
|
@@ -947,6 +951,7 @@ class ModelView:
|
|
|
947
951
|
limit=rows_per_page,
|
|
948
952
|
sort_columns=sort_columns,
|
|
949
953
|
sort_orders=sort_orders,
|
|
954
|
+
schema_to_select=self.select_schema,
|
|
950
955
|
**cast(Any, filter_criteria),
|
|
951
956
|
)
|
|
952
957
|
|
|
@@ -1053,7 +1058,9 @@ class ModelView:
|
|
|
1053
1058
|
db: AsyncSession = Depends(self.session),
|
|
1054
1059
|
) -> Response:
|
|
1055
1060
|
"""Show a form to update an existing record by `id`."""
|
|
1056
|
-
item = await self.crud.get(
|
|
1061
|
+
item = await self.crud.get(
|
|
1062
|
+
db=db, id=id, schema_to_select=self.select_schema
|
|
1063
|
+
)
|
|
1057
1064
|
if not item:
|
|
1058
1065
|
return JSONResponse(
|
|
1059
1066
|
status_code=404, content={"message": f"Item with id {id} not found"}
|
|
@@ -1112,7 +1119,9 @@ class ModelView:
|
|
|
1112
1119
|
status_code=422, content={"message": "No id parameter provided"}
|
|
1113
1120
|
)
|
|
1114
1121
|
|
|
1115
|
-
item = await self.crud.get(
|
|
1122
|
+
item = await self.crud.get(
|
|
1123
|
+
db=db, id=id, schema_to_select=self.select_schema
|
|
1124
|
+
)
|
|
1116
1125
|
if not item:
|
|
1117
1126
|
return JSONResponse(
|
|
1118
1127
|
status_code=404, content={"message": f"Item with id {id} not found"}
|
|
@@ -1283,7 +1292,11 @@ class ModelView:
|
|
|
1283
1292
|
filter_criteria[f"{search_column}__ilike"] = f"%{search_value}%"
|
|
1284
1293
|
|
|
1285
1294
|
items_result = await self.crud.get_multi(
|
|
1286
|
-
db=db,
|
|
1295
|
+
db=db,
|
|
1296
|
+
offset=offset,
|
|
1297
|
+
limit=limit,
|
|
1298
|
+
schema_to_select=self.select_schema,
|
|
1299
|
+
**cast(Any, filter_criteria),
|
|
1287
1300
|
)
|
|
1288
1301
|
|
|
1289
1302
|
items: Dict[str, Any] = {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/dashboard/dashboard_content.html
RENAMED
|
File without changes
|
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/events_content.html
RENAMED
|
File without changes
|
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/health_content.html
RENAMED
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/list_content.html
RENAMED
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/pagination.html
RENAMED
|
File without changes
|
{crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/table_content.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|