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

tickets   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 158
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 129
dl 0
loc 158
rs 10
c 0
b 0
f 0
wmc 23

19 Methods

Rating   Name   Duplication   Size   Complexity  
A Tickets.unstar() 0 3 1
A Tickets.markAsUnanswered() 0 3 1
A Tickets.markAsSpam() 0 3 1
A Tickets.unarchive() 0 3 1
A Tickets.unassignUser() 0 3 1
A Tickets.markAsTrash() 0 3 1
A Tickets.untrash() 0 3 1
A Tickets.search() 0 12 1
A Tickets.fetch() 0 35 1
A Tickets.markAsAnswered() 0 3 1
A Tickets.unassignTeam() 0 3 1
B Tickets.create() 0 28 5
A Tickets.get() 0 3 1
A Tickets.assignUser() 0 8 1
A Tickets.star() 0 3 1
A Tickets.unspam() 0 3 1
A Tickets.assignTeam() 0 8 1
A Tickets.delete() 0 3 1
A Tickets.archive() 0 3 1
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