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

NextCloud.requester   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 42
dl 0
loc 67
rs 10
c 0
b 0
f 0
wmc 12

7 Methods

Rating   Name   Duplication   Size   Complexity  
A Requester.__init__() 0 13 1
A Requester.delete() 0 4 1
A Requester.rtn() 0 5 2
A Requester.put() 0 4 1
A Requester.get() 0 4 1
A Requester.post() 0 4 1
A Requester.get_full_url() 0 22 5
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