-
Notifications
You must be signed in to change notification settings - Fork 11
/
sessions.py
32 lines (23 loc) · 940 Bytes
/
sessions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from django.contrib.contenttypes.models import ContentType
from lock_tokens.models import LockableModel
def get_session_key(obj):
contenttype = ContentType.objects.get_for_model(obj)
return "_".join([contenttype.app_label, contenttype.model, str(obj.id)])
def lock_for_session(obj, session, force_new=False):
session_key = get_session_key(obj)
token = session.get(session_key)
if token and force_new:
del session[session_key]
token = None
lock_token = LockableModel.lock(obj, token)
session[session_key] = lock_token['token']
def unlock_for_session(obj, session):
session_key = get_session_key(obj)
token = session.get(session_key)
LockableModel.unlock(obj, token)
if token:
del session[session_key]
def check_for_session(obj, session):
session_key = get_session_key(obj)
token = session.get(session_key)
return LockableModel.check_lock_token(obj, token)