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

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