endpoints.base.Resource._prepare_url()   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nop 3
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
import json
2
import requests
3
from enum import Enum
4
5
6
# =======================================================
7
# Parameter enums
8
# =======================================================
9
class BasicOptions(Enum):
10
    TRUE  = "true"
11
    FALSE = "false"
12
    ANY   = "any"
13
14
15
class AssignedUserOptions(Enum):
16
    ME   = "me"
17
    ANY  = "any"
18
    NONE = "none"
19
20
21
class AssignedTeamOptions(Enum):
22
    MINE = "mine"
23
    NONE = "none"
24
25
26
class SortByOptions(Enum):
27
    LAST_ACTIVITY = "last_activity"
28
    CREATION_TIME = "creation_time"
29
30
31
class UserRoles(Enum):
32
    ADMIN        = ("admin",        20)
33
    AGENT        = ("agent",        10)
34
    COLLABORATOR = ("collaborator", 9)
35
    CUSTOMER     = ("customer",     None)
36
37
38
class DataPointType(Enum):
39
    AVG_FIRST_RESPONSE_TIME = "avg_first_response_time"
40
    TICKETS_COUNT = "tickets_count"
41
    REPLIES_COUNT = "replies_count"
42
43
44
# =======================================================
45
# Resource - Base class with default requests
46
# =======================================================
47
class Resource:
48
    def __init__(self, api):
49
        self.api = api
50
        self.default_headers = {
51
            "Content-Type": "application/json",
52
            "Accept": "application/json"
53
        }
54
55
    def _prepare_url(self, endpoint, **kwargs):
56
        url = self.api.BASE_URL.format(url=endpoint)
57
        for key, value in kwargs.items():
58
            if value is not None:
59
                url += "&" + key + "=" + str(value)
60
        return url
61
62
    def _get(self, endpoint, **kwargs):
63
        url = self._prepare_url(endpoint, **kwargs)
64
        return requests.get(url, headers=self.default_headers).json()
65
66
    def _post(self, endpoint, data=None, files=None, **kwargs):
67
        url = self._prepare_url(endpoint, **kwargs)
68
        headers = self.default_headers
69
        if files is not None:
70
            headers.pop("Content-Type")
71
        response = requests.post(url, headers=headers, json=data, files=files)
72
        try:
73
            return response.json()
74
        except json.decoder.JSONDecodeError:
75
            return response.text
76
77
    def _put(self, endpoint, data=None, **kwargs):
78
        url = self._prepare_url(endpoint, **kwargs)
79
        return requests.put(url, headers=self.default_headers, json=data).json()
80
81
    def _delete(self, endpoint, **kwargs):
82
        url = self._prepare_url(endpoint, **kwargs)
83
        return requests.delete(url, headers=self.default_headers).json()
84