Passed
Branch test (567fee)
by Alexis
01:21
created

customer_groups.CustomerGroups.update()   B

Complexity

Conditions 8

Size

Total Lines 29
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 25
nop 8
dl 0
loc 29
rs 7.3333
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
from base import *
2
3
# =======================================================
4
# Customer Groups
5
# =======================================================
6
class CustomerGroups(Resource):
7
    def fetch(self,
8
              with_invited: bool = False,
9
              with_roles:   list = (UserRoles.ADMIN, UserRoles.AGENT, UserRoles.COLLABORATOR)):
10
        roles = ",".join([role[0] for role in with_roles])
11
        return self._get("/users", with_invited=with_invited, with_roles=roles, type="customer_group")
12
13
    def create(self,
14
               name:                             str,
15
               role:                             UserRoles = None,
16
               team_ids:                         list      = None,
17
               can_members_access_group_tickets: bool      = None,
18
               email_domains:                    list      = None):
19
        customer_group = {
20
            "name": name,
21
            "type": "customer_group"
22
        }
23
        if role is not None:
24
            customer_group["role"] = role[1]
25
        if team_ids is not None:
26
            customer_group["team_ids"] = ",".join(team_ids)
27
        if can_members_access_group_tickets is not None:
28
            customer_group["can_members_access_group_tickets"] = can_members_access_group_tickets
29
        if email_domains is not None:
30
            customer_group["email_domains"] = ",".join(email_domains)
31
        return self._post("/users", data={"user": customer_group})
32
33
    def update(self,
34
               group_id:                         int,
35
               first_name:                       str       = None,
36
               last_name:                        str       = None,
37
               role:                             UserRoles = None,
38
               team_ids:                         list      = None,
39
               can_members_access_group_tickets: bool      = None,
40
               email_domains:                    list      = None):
41
        customer_group = {
42
            "type": "customer_group"
43
        }
44
45
        if first_name is not None:
46
            customer_group["first_name"] = first_name
47
        if last_name is not None:
48
            customer_group["last_name"] = last_name
49
        if role is not None:
50
            customer_group["role"] = role[1]
51
        if team_ids is not None:
52
            customer_group["team_ids"] = ",".join(team_ids)
53
        if can_members_access_group_tickets is not None:
54
            customer_group["can_members_access_group_tickets"] = can_members_access_group_tickets
55
        if email_domains is not None:
56
            customer_group["email_domains"] = ",".join(email_domains)
57
58
        if len(customer_group.keys()) == 1:
59
            return  # No update called
60
61
        return self._post("/users/{user_id}".format(user_id=group_id), data={"user": customer_group})
62
63
    def fetchMembers(self,
64
                     group_id: int):
65
        return self._get("/users/{group_id}/members".format(group_id=group_id))
66
67
    def addMember(self,
68
                  group_id: int,
69
                  member_id: int):
70
        member = {
71
            "id": member_id
72
        }
73
        return self._post("/users/{group_id}/members".format(group_id=group_id), data={"member": member})
74