Passed
Pull Request — master (#69)
by
unknown
03:52
created

nextcloud.response.OCSResponse.__init__()   B

Complexity

Conditions 5

Size

Total Lines 22
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 22
rs 8.9332
c 0
b 0
f 0
cc 5
nop 4
1
# -*- coding: utf-8 -*-
2
try:
3
    from json import JSONDecodeError
4
except ImportError:
5
    JSONDecodeError = ValueError
6
7
8
class BaseResponse(object):
9
10
    def __init__(self, response, data=None, json_output=True,
11
                 status_code=None, success_code=None, **kwargs):
12
        self.raw = response
13
        print(self.raw.content)
14
        self.data = data or (
15
            response.json() if json_output else response.content.decode('UTF-8')
16
        )
17
        self.status_code = status_code or response.status_code
18
        for k in kwargs:
19
            setattr(self, k, kwargs[k])
20
        self._compute_is_ok(success_code)
21
22
    def _compute_is_ok(self, success_code):
23
        if isinstance(success_code, dict):
24
            method = self.raw.request.method
25
            success_codes = success_code.get(method, [])
26
        else:
27
            success_codes = (
28
                success_code if isinstance(success_code, list) else
29
                [success_code]
30
            )
31
32
        self.is_ok = self.status_code in success_codes
33
34
    def __repr__(self):
35
        is_ok_str = 'OK' if self.is_ok else 'Failed'
36
        return '<{}: Status: {}>'.format(self.__class__.__name__, is_ok_str)
37
38
39
class OCSResponse(BaseResponse):
40
    """ Response class for OCS api methods """
41
42
    def __init__(self, response, json_output=True, success_code=None):
43
        data = None
44
        full_data = None
45
        meta = None
46
47
        if (success_code or json_output):
48
            try:
49
                full_data = response.json()
50
                meta = full_data['ocs']['meta']
51
                status_code = meta['statuscode']
52
                if json_output:
53
                    data = full_data['ocs']['data']
54
            except JSONDecodeError:
55
                data = {'message': 'Unable to parse JSON response'}
56
                status_code = -1
57
58
        super(OCSResponse, self).__init__(response, data=data,
59
                                          json_output=json_output,
60
                                          full_data=full_data,
61
                                          status_code=status_code,
0 ignored issues
show
introduced by
The variable status_code does not seem to be defined in case success_code or json_output on line 47 is False. Are you sure this can never be the case?
Loading history...
62
                                          meta=meta,
63
                                          success_code=success_code)
64
65
66
class WebDAVResponse(BaseResponse):
67
    """ Response class for WebDAV api methods """
68
69
    def __init__(self, response, data=None, success_code=None, json_output=False):
70
        super(WebDAVResponse, self).__init__(response, data=data,
71
                                             json_output=json_output,
72
                                             success_code=success_code)
73