Completed
Push — master ( e847a5...5b0cc0 )
by Matěj
25s queued 10s
created

NextCloud.requester.Requester.get_full_url()   A

Complexity

Conditions 5

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 10
nop 2
dl 0
loc 22
rs 9.3333
c 0
b 0
f 0
1
import requests
2
3
4
class Requester(object):
5
    def __init__(self, endpoint, user, passwd, json_output=False):
6
        self.query_components = []
7
8
        self.json_output = json_output
9
10
        self.base_url = endpoint
11
        # GroupFolders.url = endpoint + "/ocs/v2.php/apps/groupfolders/folders"
12
13
        self.h_get = {"OCS-APIRequest": "true"}
14
        self.h_post = {"OCS-APIRequest": "true",
15
                       "Content-Type": "application/x-www-form-urlencoded"}
16
        self.auth_pk = (user, passwd)
17
        self.API_URL = None
18
19
    def rtn(self, resp):
20
        if self.json_output:
21
            return resp.json()
22
        else:
23
            return resp.content.decode("UTF-8")
24
25
    def get(self, url="", params=None):
26
        url = self.get_full_url(url)
27
        res = requests.get(url, auth=self.auth_pk, headers=self.h_get, params=params)
28
        return self.rtn(res)
29
30
    def post(self, url="", data=None):
31
        url = self.get_full_url(url)
32
        res = requests.post(url, auth=self.auth_pk, data=data, headers=self.h_post)
33
        return self.rtn(res)
34
35
    def put(self, url="", data=None):
36
        url = self.get_full_url(url)
37
        res = requests.put(url, auth=self.auth_pk, data=data, headers=self.h_post)
38
        return self.rtn(res)
39
40
    def delete(self, url="", data=None):
41
        url = self.get_full_url(url)
42
        res = requests.delete(url, auth=self.auth_pk, data=data, headers=self.h_post)
43
        return self.rtn(res)
44
45
    def get_full_url(self, additional_url=""):
46
        """
47
        Build full url for request to NextCloud api
48
49
        Construct url from self.base_url, self.API_URL, additional_url (if given), add format=json param if self.json
50
51
        :param additional_url: str
52
            add to url after api_url
53
        :return: str
54
        """
55
        if additional_url and not str(additional_url).startswith("/"):
56
            additional_url = "/{}".format(additional_url)
57
58
        if self.json_output:
59
            self.query_components.append("format=json")
60
61
        ret = "{base_url}{api_url}{additional_url}".format(
62
            base_url=self.base_url, api_url=self.API_URL, additional_url=additional_url)
63
64
        if self.json_output:
65
            ret += "?format=json"
66
        return ret
67