summaryrefslogtreecommitdiff
path: root/src/home/soundsensor/server_client.py
blob: 7eef996291b1fea700e337c25eba6b4b74b30794 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import requests
import logging

from ..util import Addr
from ..api.errors import ApiResponseError


class SoundSensorServerGuardClient:
    def __init__(self, addr: Addr):
        self.endpoint = f'http://{addr[0]}:{addr[1]}'
        self.logger = logging.getLogger(self.__class__.__name__)

    def guard_enable(self):
        return self._call('guard/enable', is_post=True)

    def guard_disable(self):
        return self._call('guard/disable', is_post=True)

    def guard_status(self):
        return self._call('guard/status')

    def _call(self,
              method: str,
              is_post=False):

        url = f'{self.endpoint}/{method}'
        self.logger.debug(f'calling {url}')

        r = requests.get(url) if not is_post else requests.post(url)

        if r.status_code != 200:
            response = r.json()
            raise ApiResponseError(status_code=r.status_code,
                                   error_type=response['error'],
                                   error_message=response['message'] or None,
                                   error_stacktrace=response['stacktrace'] if 'stacktrace' in response else None)

        return r.json()['response']