Skip to content

Commit c71a6b8

Browse files
authored
fix: Only call _set_basket_txn as a transaction if it is not already running inside one. (#147)
1 parent ae96cac commit c71a6b8

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/viur/shop/modules/cart.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,21 @@ def _ensure_current_session_cart(self) -> db.Key:
9494
current.session.get().markChanged()
9595
# Store basket at the user skel, it will be shared over multiple sessions / devices
9696
if user := current.user.get():
97-
db.RunInTransaction(self._set_basket_txn, user_key=user["key"], basket_key=root_node["key"])
97+
self._set_basket_txn(user_key=user["key"], basket_key=root_node["key"])
9898
return self.session["session_cart_key"]
9999

100100
def detach_session_cart(self) -> db.Key:
101101
key = self.session["session_cart_key"]
102102
self.session["session_cart_key"] = None
103103
current.session.get().markChanged()
104104
if user := current.user.get():
105-
db.RunInTransaction(self._set_basket_txn, user_key=user["key"], basket_key=None)
105+
self._set_basket_txn(user_key=user["key"], basket_key=None)
106106
return key
107107

108108
@staticmethod
109109
def _set_basket_txn(user_key: db.Key, basket_key: db.Key | None) -> SkeletonInstance:
110+
if not db.IsInTransaction():
111+
return db.RunInTransaction(Cart._set_basket_txn, user_key=user_key, basket_key=basket_key)
110112
user_skel = conf.main_app.vi.user.editSkel()
111113
user_skel.read(user_key)
112114
user_skel.setBoneValue("basket", basket_key)

0 commit comments

Comments
 (0)