GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

remove_permission_logic()   C
last analyzed

Complexity

Conditions 7

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 7
c 2
b 0
f 0
dl 0
loc 41
rs 5.5
1
# coding=utf-8
2
"""
3
Permission logic utilities
4
"""
5
from __future__ import unicode_literals
6
from permission.logics import PermissionLogic
7
8
9
def add_permission_logic(model, permission_logic):
10
    """
11
    Add permission logic to the model
12
13
    Parameters
14
    ----------
15
    model : django model class
16
        A django model class which will be treated by the specified permission
17
        logic
18
    permission_logic : permission logic instance
19
        A permission logic instance which will be used to determine permission
20
        of the model
21
22
    Examples
23
    --------
24
    >>> from django.db import models
25
    >>> from permission.logics import PermissionLogic
26
    >>> class Mock(models.Model):
27
    ...     name = models.CharField('name', max_length=120)
28
    >>> add_permission_logic(Mock, PermissionLogic())
29
    """
30
    if not isinstance(permission_logic, PermissionLogic):
31
        raise AttributeError(
32
        '`permission_logic` must be an instance of PermissionLogic')
33
    if not hasattr(model, '_permission_logics'):
34
        model._permission_logics = set()
35
    if not hasattr(model, '_permission_handler'):
36
        from permission.utils.handlers import registry
37
        # register default permission handler
38
        registry.register(model, handler=None)
39
    model._permission_logics.add(permission_logic)
40
    # store target model to the permission_logic instance
41
    permission_logic.model = model
42
43
44
def remove_permission_logic(model, permission_logic, fail_silently=True):
45
    """
46
    Remove permission logic to the model
47
48
    Parameters
49
    ----------
50
    model : django model class
51
        A django model class which will be treated by the specified permission
52
        logic
53
    permission_logic : permission logic class or instance
54
        A permission logic class or instance which will be used to determine
55
        permission of the model
56
    fail_silently : boolean
57
        If `True` then do not raise KeyError even the specified permission logic
58
        have not registered.
59
60
    Examples
61
    --------
62
    >>> from django.db import models
63
    >>> from permission.logics import PermissionLogic
64
    >>> class Mock(models.Model):
65
    ...     name = models.CharField('name', max_length=120)
66
    >>> logic = PermissionLogic()
67
    >>> add_permission_logic(Mock, logic)
68
    >>> remove_permission_logic(Mock, logic)
69
    """
70
    if not hasattr(model, '_permission_logics'):
71
        model._permission_logics = set()
72
    if not isinstance(permission_logic, PermissionLogic):
73
        # remove all permission logic of related
74
        remove_set = set()
75
        for _permission_logic in model._permission_logics:
76
            if _permission_logic.__class__ == permission_logic:
77
                remove_set.add(_permission_logic)
78
        # difference
79
        model._permission_logics = model._permission_logics.difference(remove_set)
80
    else:
81
        if fail_silently and permission_logic not in model._permission_logics:
82
            pass
83
        else:
84
            model._permission_logics.remove(permission_logic)
85
86