Skip to content

Commit dfb96d9

Browse files
authored
Merge pull request #55 from benavlabs/empty-fields-update-fix
Empty Update fields fix
2 parents 1c1eef3 + e7bd125 commit dfb96d9

File tree

6 files changed

+39
-17
lines changed

6 files changed

+39
-17
lines changed

.pre-commit-config.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ repos:
99
- repo: https://github.com/astral-sh/ruff-pre-commit
1010
rev: v0.12.1
1111
hooks:
12-
- id: ruff
13-
args: ["check", "crudadmin", "--fix"]
12+
- id: ruff-check
13+
args: ["crudadmin", "--fix"]
1414
- id: ruff-format
1515
args: ["crudadmin"]
1616

17-
- repo: https://github.com/pre-commit/mirrors-mypy
18-
rev: v1.16.1
17+
- repo: local
1918
hooks:
2019
- id: mypy
21-
args: ["crudadmin", "--strict"]
20+
name: mypy
21+
entry: uv run mypy crudadmin/
22+
language: system
23+
types: [python]
24+
pass_filenames: false
25+
args: [--config-file=pyproject.toml]

crudadmin/admin_interface/model_view.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,17 +1092,20 @@ async def get_model_update_page_inner(
10921092
)
10931093

10941094
form_fields = _get_form_fields_from_schema(self.update_schema)
1095+
field_values: Dict[str, Any] = {}
10951096
for field in form_fields:
10961097
field_name = field["name"]
10971098
if field_name in item:
10981099
field["value"] = item[field_name]
1100+
field_values[field_name] = item[field_name]
10991101

11001102
return self.templates.TemplateResponse(
11011103
template,
11021104
{
11031105
"request": request,
11041106
"model_name": self.model_key,
11051107
"form_fields": form_fields,
1108+
"field_values": field_values,
11061109
"url_prefix": self.get_url_prefix(),
11071110
"id": id,
11081111
},

crudadmin/session/backends/redis.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,15 @@ async def get_user_sessions(self, user_id: int) -> list[str]:
339339
user_sessions_key = self.get_user_sessions_key(user_id)
340340

341341
try:
342-
members = await self.client.smembers(user_sessions_key)
343-
return [m.decode("utf-8") if isinstance(m, bytes) else m for m in members]
342+
members = self.client.smembers(user_sessions_key)
343+
if not hasattr(members, "__await__"):
344+
raise TypeError(
345+
f"Expected awaitable from smembers, got {type(members)}"
346+
)
347+
members_await = await members
348+
return [
349+
m.decode("utf-8") if isinstance(m, bytes) else m for m in members_await
350+
]
344351
except self.RedisError as e:
345352
logger.error(f"Error getting user sessions: {e}")
346353
raise

pyproject.toml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,20 @@ ignore = [
152152
known-third-party = ["fastapi", "pydantic", "starlette"]
153153

154154
[tool.mypy]
155-
python_version = "3.8"
156-
strict = true
155+
python_version = "3.9"
157156
warn_return_any = true
158157
warn_unused_configs = true
159-
disallow_untyped_defs = true
160-
disallow_incomplete_defs = true
158+
disallow_untyped_defs = false
159+
disallow_incomplete_defs = false
160+
check_untyped_defs = true
161+
disallow_untyped_decorators = false
162+
no_implicit_optional = true
163+
strict_optional = true
164+
warn_redundant_casts = true
165+
warn_unused_ignores = true
166+
warn_no_return = true
167+
warn_unreachable = true
168+
161169

162170
[tool.coverage.run]
163171
source = ["crudadmin"]

tests/event/test_models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ def test_create_admin_event_log_repr_method(self):
5252
repr_str = repr(instance)
5353
assert "AdminEventLog" in repr_str
5454
assert "id=1" in repr_str
55-
assert any(s in repr_str for s in ("event_type=create", "event_type=EventType.CREATE"))
55+
assert any(
56+
s in repr_str for s in ("event_type=create", "event_type=EventType.CREATE")
57+
)
5658
assert "user_id=123" in repr_str
5759

5860
def test_create_admin_event_log_returns_existing_class(self):

tests/session/test_integration.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ class TestSessionManagerIntegration:
1717
@pytest.fixture
1818
def session_manager_with_mocks(self, mock_session_storage, mock_csrf_storage):
1919
"""Create a session manager with mock storage."""
20-
with (
21-
patch(
22-
"crudadmin.session.manager.get_session_storage",
23-
return_value=mock_session_storage,
24-
),
20+
with patch(
21+
"crudadmin.session.manager.get_session_storage",
22+
return_value=mock_session_storage,
2523
):
2624
manager = SessionManager(session_storage=mock_session_storage)
2725
manager.csrf_storage = mock_csrf_storage

0 commit comments

Comments
 (0)