File tree Expand file tree Collapse file tree 4 files changed +50
-33
lines changed
Expand file tree Collapse file tree 4 files changed +50
-33
lines changed Original file line number Diff line number Diff line change 1+ from __future__ import unicode_literals
2+ import threading
3+ from django .contrib .auth import get_user_model
4+
5+
6+ class CuserMiddleware :
7+ _thread_local = threading .local ()
8+
9+ def __init__ (self , get_response ):
10+ self .get_response = get_response
11+
12+ def __call__ (self , request ):
13+ try :
14+ self .__class__ .set_user (request .user )
15+ response = self .get_response (request )
16+ return response
17+ finally :
18+ self .__class__ .del_user ()
19+
20+ @classmethod
21+ def get_user (cls , default = None ):
22+ """
23+ Retrieve user info
24+ """
25+ return getattr (cls ._thread_local , 'user' , default )
26+
27+ @classmethod
28+ def set_user (cls , user ):
29+ """
30+ Store user info
31+ """
32+ if isinstance (user , str ):
33+ user_model = get_user_model ()
34+ user = user_model .objects .get (username = user )
35+ cls ._thread_local .user = user
36+
37+ @classmethod
38+ def del_user (cls ):
39+ """
40+ Delete user info
41+ """
42+ if hasattr (cls ._thread_local , 'user' ):
43+ del cls ._thread_local .user
Original file line number Diff line number Diff line change 4646 "django.middleware.common.CommonMiddleware" ,
4747 "django.middleware.csrf.CsrfViewMiddleware" ,
4848 "django.contrib.auth.middleware.AuthenticationMiddleware" ,
49+ "tracking_fields.middleware.cuser.CuserMiddleware" ,
4950 "django.contrib.messages.middleware.MessageMiddleware" ,
5051 "django.middleware.clickjacking.XFrameOptionsMiddleware" ,
5152)
Original file line number Diff line number Diff line change 44import datetime
55import json
66
7- from cuser .middleware import CuserMiddleware
7+ from tracking_fields .middleware . cuser import CuserMiddleware
88from django .contrib .auth .models import User
99from django .contrib .contenttypes .models import ContentType
1010from django .core .files import File
@@ -55,26 +55,6 @@ def test_create(self):
5555 assert human_event .user == self .user
5656 assert human_event .user_repr == self .user_repr
5757
58- def test_update_without_cuser (self ):
59- """
60- Test the CREATE event without the cuser module
61- """
62- from tracking_fields import tracking
63-
64- tracking .CUSER = False
65- self .human .age = 43
66- self .human .save ()
67- events = TrackingEvent .objects .order_by ("date" ).all ()
68- assert events .count () == 3
69- human_event = events .last ()
70- assert human_event .date is not None
71- assert human_event .action == UPDATE
72- assert human_event .object == self .human
73- assert human_event .object_repr == self .human_repr
74- assert human_event .user is None
75- assert human_event .user_repr == "None"
76- tracking .CUSER = True
77-
7858 def test_update (self ):
7959 """
8060 Test the UPDATE event
Original file line number Diff line number Diff line change 55import logging
66import uuid
77
8+ from tracking_fields .middleware .cuser import CuserMiddleware
89from django .contrib .contenttypes .models import ContentType
910from django .core .exceptions import ObjectDoesNotExist
1011from django .db .models import ManyToManyField , Model
1617except ImportError :
1718 StateWrapper = type ("StateWrapper" , (object ,), dict ())
1819
19- try :
20- from cuser .middleware import CuserMiddleware
21-
22- CUSER = True
23- except ImportError :
24- CUSER = False
25-
2620from tracking_fields .models import (
2721 CREATE ,
2822 DELETE ,
@@ -119,11 +113,10 @@ def _create_event(instance, action):
119113 """
120114 user = None
121115 user_repr = repr (user )
122- if CUSER :
123- user = CuserMiddleware .get_user ()
124- user_repr = repr (user )
125- if user is not None and user .is_anonymous :
126- user = None
116+ user = CuserMiddleware .get_user ()
117+ user_repr = repr (user )
118+ if user is not None and user .is_anonymous :
119+ user = None
127120 return TrackingEvent .objects .create (
128121 action = action ,
129122 object_content_type = ContentType .objects .get_for_model (instance ),
You can’t perform that action at this time.
0 commit comments