Completed
Push — master ( 78de89...99647d )
by
unknown
02:14 queued 58s
created

_action_from_request()   B

Complexity

Conditions 5

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
c 1
b 0
f 0
dl 0
loc 11
rs 8.5454
1
# -*- coding: utf-8 -*-
2
import json
3
from jsonpublish import dumps
4
from datetime import datetime
5
from pytz import timezone
6
import hashlib
7
8
9
def _action_from_request(request):
10
    if request.method == 'POST':
11
        return 'aanmaken'
12
    elif request.method == 'PUT':
13
        return 'bewerken'
14
    elif request.method == 'DELETE':
15
        return 'verwijderen'
16
    elif request.method == 'GET':
17
        return 'opvragen'
18
    else:
19
        return 'onbekend'
20
21
22
def _get_versie_hash(wijziging):
23
    timestamp = datetime.now(tz=timezone('CET'))
24
    inputversie = "{0}{1}{2}".format(timestamp, wijziging.resource_object_id, wijziging.updated_by)
25
    versie = hashlib.sha256(bytearray(inputversie, "utf-8")).hexdigest()
26
    return versie
27
28
29
def audit(**kwargs):
30
    """
31
    use this decorator to audit an operation
32
    """
33
    def wrap(fn):
34
35
        def advice(parent_object, *args, **kw):
36
            request = parent_object.request
37
            wijziging = request.audit_manager.create_revision()
38
39
            result = fn(parent_object, *args, **kw)
40
41
            if hasattr(request, 'user') and 'actor' in request.user:
42
                actor = request.user['actor']
43
                wijziging.updated_by = actor.get('uri', None)
44
                wijziging.updated_by_omschrijving = actor.get('omschrijving', None)
45
            else:
46
                wijziging.updated_by = 'publiek'
47
                wijziging.updated_by_omschrijving = 'publiek'
48
49
            r_id = request.matchdict.get('id')
50
            wijziging.resource_object_id = r_id
51
            if result is not None:
52
                wijziging.resource_object_id = result.id if not r_id else int(r_id)
53
                try:
54
                    wijziging.resource_object_json = json.loads(dumps(result))
55
                except:
56
                    pass
57
58
            wijziging.versie = _get_versie_hash(wijziging)
59
            wijziging.actie = kwargs.get('actie') if kwargs.get('actie') else _action_from_request(request)
60
61
            request.audit_manager.save(wijziging)
62
63
            return result
64
65
        return advice
66
67
    return wrap
68