| author | ymh <ymh.work@gmail.com> |
| Tue, 05 Jul 2016 13:19:38 +0200 | |
| changeset 77 | 06f627e804b6 |
| child 78 | 8e1440b83f0c |
| permissions | -rw-r--r-- |
|
77
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
1 |
import logging |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
2 |
import uuid |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
3 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
from django.db.models.signals import pre_delete, post_save |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
from django.utils.functional import curry |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
from renkanmanager.models import Renkan, Revision |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
8 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
9 |
from . import send_delete_renkan, send_create_renkan, send_update_renkan |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
11 |
logger = logging.getLogger(__name__) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
12 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
class TrackingMiddleware(object): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
14 |
def process_request(self, request): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
15 |
if not request.method in ('GET', 'HEAD', 'OPTIONS', 'TRACE'): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
16 |
if hasattr(request, 'user') and request.user.is_authenticated(): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
17 |
user = request.user.external_id |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
18 |
else: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
19 |
user = None |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
20 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
21 |
request.renkan_request_id = uuid.uuid4() |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
22 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
23 |
pre_delete.connect(curry(self.renkan_delete, user), sender=Renkan, dispatch_uid = (self.__class__, request.renkan_request_id,), weak=False) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
post_save.connect(curry(self.revision_save, user), sender=Revision, dispatch_uid = (self.__class__, request.renkan_request_id,), weak=False) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
26 |
def process_response(self, request, response): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
27 |
if hasattr(request, 'renkan_request_id'): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
28 |
pre_delete.disconnect(dispatch_uid = (self.__class__, request.renkan_request_id,)) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
post_save.disconnect(dispatch_uid = (self.__class__, request.renkan_request_id,)) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
30 |
return response |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
31 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
32 |
def process_exception(self, request, exception): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
33 |
if hasattr(request, 'renkan_request_id'): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
34 |
pre_delete.disconnect(dispatch_uid = (self.__class__, request.renkan_request_id,)) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
35 |
post_save.disconnect(dispatch_uid = (self.__class__, request.renkan_request_id,)) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
return None |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
37 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
38 |
def process_view(self, request, view_func, view_args, view_kwargs): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
39 |
if view_func.__name__ == 'RenkanDetail' and view_func.__module__ == 'renkanmanager.api.views' and request.method == 'PUT' and 'renkan_guid' in view_kwargs: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
40 |
if hasattr(request, 'user') and request.user.is_authenticated(): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
41 |
user = request.user.external_id |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
else: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
user = None |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
44 |
send_update_renkan(None, user, request.body.decode('utf-8')) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
45 |
return None |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
46 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
47 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
48 |
def renkan_delete(self, user, sender, **kwargs): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
49 |
renkan = kwargs.get('instance', None) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
if not renkan: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
return |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
send_delete_renkan(renkan, user) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
|
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
def revision_save(self, user, sender, **kwargs): |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
revision = kwargs.get('instance', None) |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
56 |
if not revision: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
57 |
return |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
58 |
if kwargs.get('created', False) and revision.parent_renkan.revision_count <= 1: |
|
06f627e804b6
add tracking of renkan create, delete and update
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
59 |
send_create_renkan(revision.parent_renkan, user) |