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.
Completed
Push — master ( 194382...d1a5fb )
by Lambda
01:38
created

src.permission.utils.remove_permission_logic()   C

Complexity

Conditions 7

Size

Total Lines 41

Duplication

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