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

divers.Labels.create()   A

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
from base import *
2
3
# =======================================================
4
# Attachment
5
# =======================================================
6
class Attachments(Resource):
7
    def create(self,
8
               filename: str,
9
               file: bytes):
10
        files = {
11
            "files[]": (filename, file, "multipart/form-data")
12
        }
13
        return self._post("/attachments", files=files)
14
15
16
# =======================================================
17
# Labels
18
# =======================================================
19
class Labels(Resource):
20
    def fetch(self):
21
        return self._get("/labels")
22
23
    def create(self,  # Not in doc
24
               name: str,
25
               color: str):
26
        label = {
27
            "name": name,
28
            "color": color
29
        }
30
        return self._post("/labels", data={"custom_label": label})
31
32
    def addLabel(self,
33
                 ticket_id: str,
34
                 label_name: str):
35
        return self._post("/tickets/{ticket_id}/labels/{label_name}".format(ticket_id=ticket_id, label_name=label_name))
36
37
    def removeLabel(self,
38
                    ticket_id: str,
39
                    label_name: str):
40
        return self._delete("/tickets/{ticket_id}/labels/{label_name}".format(ticket_id=ticket_id,
41
                                                                              label_name=label_name))
42
43
44
# =======================================================
45
# Emails
46
# =======================================================
47
class Emails(Resource):
48
    def fetch(self):
49
        return self._get("/emails")
50
51
    def create(self,
52
               email:          str,
53
               name:           str  = None,
54
               filter_spam:    bool = None,
55
               use_agent_name: str  = None):
56
        forwarding_address = {
57
            "email": email
58
        }
59
60
        if name is not None:
61
            forwarding_address["name"] = name
62
        if filter_spam is not None:
63
            forwarding_address["filter_spam"] = filter_spam
64
        if use_agent_name is not None:
65
            forwarding_address["use_agent_name"] = use_agent_name
66
67
        return self._post("/emails", data={"forwarding_address": forwarding_address})
68
69
70
# =======================================================
71
# Filters
72
# =======================================================
73
class Filters(Resource):
74
    def createRule(self,
75
                   requester_email: str = None,
76
                   delivered_to:    str = None,
77
                   subject:         str = None,
78
                   body:            str = None):
79
        rule = {}
80
81
        if requester_email is not None:
82
            rule["requester_email"] = requester_email
83
        if delivered_to is not None:
84
            rule["delivered_to"] = delivered_to
85
        if subject is not None:
86
            rule["subject"] = subject
87
        if body is not None:
88
            rule["body"] = body
89
90
        if len(rule.keys()) == 0:
91
            return
92
93
        return self._post("/rules", data={"rule": rule})
94
95
    def createConsequence(self,
96
                          archive:     str = None,
97
                          spam:        str = None,
98
                          trash:       str = None,
99
                          label:       str = None,
100
                          assign_user: int = None,
101
                          assign_team: int = None):
102
        consequence = {}
103
104
        if archive is not None:
105
            consequence["archive"] = archive
106
        if spam is not None:
107
            consequence["spam"] = spam
108
        if trash is not None:
109
            consequence["trash"] = trash
110
        if label is not None:
111
            consequence["label"] = label
112
        if assign_user is not None:
113
            consequence["assign_user"] = assign_user
114
        if assign_team is not None:
115
            consequence["assign_team"] = assign_team
116
117
        if len(consequence.keys()) == 0:
118
            return
119
120
        return self._post("/consequences", data={"consequence": consequence})
121
122
    def create(self,
123
               consequence_id: int,
124
               rule_id:        int):
125
        _filter = {
126
            "consequence_id": consequence_id,
127
            "rule_id": rule_id
128
        }
129
        return self._post("/filters", data={"filter": _filter})
130
131
132
# =======================================================
133
# Snippets
134
# =======================================================
135
class Snippets(Resource):
136
    def fetch(self):
137
        return self._get("/snippets")
138
139
    def create(self,
140
               name:            str,
141
               content:         str  = None,
142
               tags:            list = None,
143
               content_as_html: bool = False):
144
        snippet = {
145
            "name": name,
146
        }
147
148
        if content is not None:
149
            snippet["content"] = {
150
                "html" if content_as_html else "text": content,
151
            }
152
        if tags is not None:
153
            snippet["tags"] = ",".join(tags)
154
155
        return self._post("/snippets", data={"snippet": snippet})
156
157
    def update(self,
158
               snippet_id:      str,
159
               name:            str  = None,
160
               content:         str  = None,
161
               tags:            list = None,
162
               content_as_html: bool = False):
163
164
        snippet = {}
165
166
        if name is not None:
167
            snippet["name"] = name
168
        if content is not None:
169
            snippet["content"] = {
170
                "html" if content_as_html else "text": content,
171
            }
172
        if tags is not None:
173
            snippet["tags"] = ",".join(tags)
174
175
        if len(snippet.keys()) == 0:
176
            return
177
178
        return self._put("/snippets/{snippet_id}".format(snippet_id=snippet_id), data={"snippet": snippet})
179
180
    def delete(self,
181
               snippet_id: str):
182
        return self._delete("/snippets/{snippet_id}".format(snippet_id=snippet_id))
183
184
185
# =======================================================
186
# Reports
187
# =======================================================
188
class Reports(Resource):
189
    def get(self,
190
            data_points_type: DataPointType,
191
            user:             str           = None,
192
            team:             str           = None,
193
            label:            str           = None,
194
            since:            str           = None,
195
            until:            str           = None):
196
        return self._get("/reports/{data_points_type}".format(data_points_type=data_points_type),
197
                         user=user,
198
                         team=team,
199
                         label=label,
200
                         since=since,
201
                         until=until)
202