Passed
Push — main ( 8785b1...fdb7a5 )
by Alexis
01:04
created

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