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.
Files changed (64) hide show
  1. {crudadmin-0.3.3 → crudadmin-0.3.4}/PKG-INFO +1 -1
  2. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/crud_admin.py +27 -0
  3. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/model_view.py +17 -4
  4. {crudadmin-0.3.3 → crudadmin-0.3.4}/pyproject.toml +1 -1
  5. {crudadmin-0.3.3 → crudadmin-0.3.4}/.gitignore +0 -0
  6. {crudadmin-0.3.3 → crudadmin-0.3.4}/LICENSE +0 -0
  7. {crudadmin-0.3.3 → crudadmin-0.3.4}/README.md +0 -0
  8. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/__init__.py +0 -0
  9. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/__init__.py +0 -0
  10. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/admin_site.py +0 -0
  11. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/auth.py +0 -0
  12. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/helper.py +0 -0
  13. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/__init__.py +0 -0
  14. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/auth.py +0 -0
  15. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/https.py +0 -0
  16. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/middleware/ip_restriction.py +0 -0
  17. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_interface/typing.py +0 -0
  18. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/__init__.py +0 -0
  19. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/models.py +0 -0
  20. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/schemas.py +0 -0
  21. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/admin_user/service.py +0 -0
  22. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/__init__.py +0 -0
  23. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/auth.py +0 -0
  24. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/db.py +0 -0
  25. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/exceptions.py +0 -0
  26. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/rate_limiter.py +0 -0
  27. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/schemas/__init__.py +0 -0
  28. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/core/schemas/timestamp.py +0 -0
  29. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/__init__.py +0 -0
  30. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/decorators.py +0 -0
  31. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/integration.py +0 -0
  32. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/models.py +0 -0
  33. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/schemas.py +0 -0
  34. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/event/service.py +0 -0
  35. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/py.typed +0 -0
  36. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/__init__.py +0 -0
  37. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/__init__.py +0 -0
  38. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/database.py +0 -0
  39. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/hybrid.py +0 -0
  40. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/memcached.py +0 -0
  41. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/memory.py +0 -0
  42. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/backends/redis.py +0 -0
  43. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/manager.py +0 -0
  44. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/models.py +0 -0
  45. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/schemas.py +0 -0
  46. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/storage.py +0 -0
  47. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/session/user_agents_types.py +0 -0
  48. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/static/favicon.png +0 -0
  49. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/static/htmx.min.js +0 -0
  50. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/dashboard/dashboard.html +0 -0
  51. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/dashboard/dashboard_content.html +0 -0
  52. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/events.html +0 -0
  53. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/events_content.html +0 -0
  54. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/health.html +0 -0
  55. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/management/health_content.html +0 -0
  56. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/list_content.html +0 -0
  57. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/pagination.html +0 -0
  58. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/components/table_content.html +0 -0
  59. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/create.html +0 -0
  60. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/list.html +0 -0
  61. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/admin/model/update.html +0 -0
  62. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/auth/login.html +0 -0
  63. {crudadmin-0.3.3 → crudadmin-0.3.4}/crudadmin/templates/base/base.html +0 -0
  64. {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
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, limit=len(valid_ids), **cast(Any, filter_criteria)
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(db=db, id=id)
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(db=db, id=id)
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, offset=offset, limit=limit, **cast(Any, filter_criteria)
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] = {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "crudadmin"
3
- version = "0.3.3"
3
+ version = "0.3.4"
4
4
  description = "FastAPI-based admin interface with authentication, event logging and CRUD operations"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9.2"
File without changes
File without changes
File without changes
File without changes