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

endpoints.tickets.Tickets.create()   B

Complexity

Conditions 5

Size

Total Lines 28
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 24
nop 10
dl 0
loc 28
rs 8.8373
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, BasicOptions, AssignedUserOptions, AssignedTeamOptions, SortByOptions
2
3
4
# =======================================================
5
# Tickets
6
# =======================================================
7
class Tickets(Resource):
8
    def fetch(self,
9
              per_page:         int                        = 100,
10
              page:             int                        = 1,
11
              archived:         BasicOptions               = None,  # Default = BasicOptions.FALSE,
12
              spam:             bool                       = None,  # Default = False,
13
              trash:            bool                       = None,  # Default = False,
14
              replies:          bool                       = None,
15
              max_replies:      int                        = None,
16
              assigned_user:    int or AssignedUserOptions = None,
17
              assigned_team:    int or AssignedTeamOptions = None,
18
              starred:          bool                       = None,
19
              label:            str                        = None,
20
              since:            str                        = None,
21
              until:            str                        = None,
22
              sort_by:          SortByOptions              = None,  # Default = SortByOptions.LAST_ACTIVITY,
23
              requester_emails: str                        = None,
24
              total_only:       bool                       = None   # Default = False
25
              ):
26
        return self._get("/tickets",
27
                         per_page=per_page,
28
                         page=page,
29
                         archived=archived,
30
                         spam=spam,
31
                         trash=trash,
32
                         replies=replies,
33
                         max_replies=max_replies,
34
                         assigned_user=assigned_user,
35
                         assigned_team=assigned_team,
36
                         starred=starred,
37
                         label=label,
38
                         since=since,
39
                         until=until,
40
                         sort_by=sort_by,
41
                         requester_emails=requester_emails,
42
                         total_only=total_only)
43
44
    def search(self,
45
               query:    str,
46
               per_page: int  = 100,
47
               page:     int  = 1,
48
               spam:     bool = False,
49
               trash:    bool = False):
50
        return self._get("/tickets/search",
51
                         query=query,
52
                         per_page=per_page,
53
                         page=page,
54
                         spam=spam,
55
                         trash=trash)
56
57
    def create(self,
58
               subject:          str,
59
               requester_name:   str,
60
               requester_email:  str,
61
               content:          str,
62
               cc:               str  = None,
63
               bcc:              str  = None,
64
               notify_requester: bool = False,
65
               attachment_ids:   list = None,
66
               content_as_html:  bool = False):
67
        ticket = {
68
            "subject": subject,
69
            "requester_name": requester_name,
70
            "requester_email": requester_email,
71
            "content": {
72
                "html" if content_as_html else "text": content,
73
            },
74
            "notify_requester": notify_requester
75
        }
76
77
        if cc is not None:
78
            ticket["cc"] = cc
79
        if bcc is not None:
80
            ticket["bcc"] = bcc
81
        if attachment_ids is not None:
82
            ticket["content"]["attachment_ids"] = ",".join(attachment_ids)
83
84
        return self._post("/tickets", data={"ticket": ticket})
85
86
    def get(self,
87
            ticket_id: int):
88
        return self._get("/tickets/{ticket_id}".format(ticket_id=ticket_id))
89
90
    def delete(self,
91
               ticket_id: int):
92
        return self._delete("/tickets/{ticket_id}".format(ticket_id=ticket_id))
93
94
    def archive(self,
95
                ticket_id: int):
96
        return self._post("/tickets/{ticket_id}/archive".format(ticket_id=ticket_id))
97
98
    def unarchive(self,
99
                  ticket_id: int):
100
        return self._delete("/tickets/{ticket_id}/archive".format(ticket_id=ticket_id))
101
102
    def markAsAnswered(self,
103
                       ticket_id: int):
104
        return self._post("/tickets/{ticket_id}/answered".format(ticket_id=ticket_id))
105
106
    def markAsUnanswered(self,
107
                         ticket_id: int):
108
        return self._delete("/tickets/{ticket_id}/answered".format(ticket_id=ticket_id))
109
110
    def assignUser(self,
111
                   ticket_id: int,
112
                   user_id: int):
113
        user_assignment = {
114
            "user_id": user_id
115
        }
116
        return self._post("/tickets/{ticket_id}/user_assignment".format(ticket_id=ticket_id),
117
                          data={"user_assignment": user_assignment})
118
119
    def unassignUser(self,
120
                     ticket_id: int):
121
        return self._delete("/tickets/{ticket_id}/user_assignment".format(ticket_id=ticket_id))
122
123
    def assignTeam(self,
124
                   ticket_id: int,
125
                   team_id: int):
126
        team_assignment = {
127
            "team_id": team_id
128
        }
129
        return self._post("/tickets/{ticket_id}/team_assignment".format(ticket_id=ticket_id),
130
                          data={"team_assignment": team_assignment})
131
132
    def unassignTeam(self,
133
                     ticket_id: int):
134
        return self._delete("/tickets/{ticket_id}/team_assignment".format(ticket_id=ticket_id))
135
136
    def star(self,
137
             ticket_id: int):
138
        return self._post("/tickets/{ticket_id}/star".format(ticket_id=ticket_id))
139
140
    def unstar(self,
141
               ticket_id: int):
142
        return self._delete("/tickets/{ticket_id}/star".format(ticket_id=ticket_id))
143
144
    def markAsSpam(self,
145
                   ticket_id: int):
146
        return self._post("/tickets/{ticket_id}/spam".format(ticket_id=ticket_id))
147
148
    def unspam(self,
149
               ticket_id: int):
150
        return self._delete("/tickets/{ticket_id}/spam".format(ticket_id=ticket_id))
151
152
    def markAsTrash(self,
153
                    ticket_id: int):
154
        return self._post("/tickets/{ticket_id}/trash".format(ticket_id=ticket_id))
155
156
    def untrash(self,
157
                ticket_id: int):
158
        return self._delete("/tickets/{ticket_id}/trash".format(ticket_id=ticket_id))
159