Skip to content

Commit bc2e6a0

Browse files
feat: Improve type safety and fix variable naming in CRUD repository and session context
1 parent 9d31839 commit bc2e6a0

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

py_spring_model/core/session_context_holder.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from contextvars import ContextVar
22
from enum import IntEnum
33
from functools import wraps
4-
from typing import Any, Callable, ClassVar, Optional
4+
from typing import Any, Callable, ClassVar, Optional, ParamSpec, TypeVar
55

66
from py_spring_model.core.model import PySpringModel
77
from py_spring_model.core.py_spring_session import PySpringSession
@@ -10,7 +10,11 @@ class TransactionalDepth(IntEnum):
1010
OUTERMOST = 1
1111
ON_EXIT = 0
1212

13-
def Transactional(func: Callable[..., Any]) -> Callable[..., Any]:
13+
14+
P = ParamSpec("P")
15+
RT = TypeVar("RT")
16+
17+
def Transactional(func: Callable[P, RT]) -> Callable[P, RT]:
1418
"""
1519
Decorator for managing database transactions in a nested-safe manner.
1620
@@ -48,7 +52,7 @@ def update_account():
4852
the whole transaction will be rolled back.
4953
"""
5054
@wraps(func)
51-
def wrapper(*args, **kwargs):
55+
def wrapper(*args: P.args, **kwargs: P.kwargs) -> RT:
5256
# Increment session depth and get session
5357
session_depth = SessionContextHolder.enter_session()
5458
session = SessionContextHolder.get_or_create_session()

py_spring_model/repository/crud_repository.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ def save_all(
135135
@Transactional
136136
def delete(self, entity: T) -> bool:
137137
session = SessionContextHolder.get_or_create_session()
138-
optional_intance = self._find_by_query(entity.model_dump())
139-
if optional_intance is None:
138+
optional_instance = self._find_by_query(entity.model_dump())
139+
if optional_instance is None:
140140
return False
141-
session.delete(optional_intance)
141+
session.delete(optional_instance)
142142
return True
143143

144144
@Transactional

tests/test_crud_repository.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,13 @@ def test_update_user(self, user_repository: UserRepository):
148148
assert updated_user is not None
149149
assert updated_user.name == "William Chen"
150150
assert updated_user.email == "william.chen@example.com"
151-
151+
152+
def test_delete_user_with_user_found(self, user_repository: UserRepository):
153+
self.create_test_user(user_repository)
154+
user = user_repository.find_by_id(1)
155+
assert user is not None
156+
assert user_repository.delete(user)
157+
assert user_repository.find_by_id(1) is None
158+
159+
def test_delete_user_with_user_not_found(self, user_repository: UserRepository):
160+
assert user_repository.delete(User(id=1, name="John Doe", email="john@example.com")) is False

0 commit comments

Comments
 (0)