Add connection timeout

This commit is contained in:
Nicolas Duhamel 2021-01-05 11:29:34 +01:00
parent 4e43ed82fc
commit 79d9fa8a3e

View File

@ -3,6 +3,7 @@ import time
import json import json
import typer import typer
import requests
from pyamaha import Device, System, Zone from pyamaha import Device, System, Zone
@ -12,11 +13,14 @@ class Error(Exception):
"""Base class for exceptions in this module.""" """Base class for exceptions in this module."""
pass pass
class ApiError(Exception): class ApiError(Error):
def __init__(self, request_url, response_code): def __init__(self, request_url, response_code):
self.request = request_url self.request = request_url
self.response_code = response_code self.response_code = response_code
class ConnectionTimeout(Error):
pass
class Senario: class Senario:
activate = [] activate = []
deactivate = [] deactivate = []
@ -57,8 +61,9 @@ class Spotify(Senario):
class Yamaha: class Yamaha:
def __init__(self, device: Device, mqtt_client: Client, logger: logging.Logger=None): def __init__(self, ip: str, mqtt_client: Client, logger: logging.Logger=None, timeout=None):
self._device = device self.timeout = timeout if timeout else 10
self._device = Device(ip, self.timeout)
self._client = mqtt_client self._client = mqtt_client
self.logger = logger self.logger = logger
@ -85,7 +90,10 @@ class Yamaha:
self.request(action) self.request(action)
def request(self, request): def request(self, request):
r = self._device.request(request) try:
r = self._device.request(request)
except requests.exceptions.ReadTimeout:
raise ConnectionTimeout()
r_json = r.json() r_json = r.json()
if r_json['response_code'] != 0: if r_json['response_code'] != 0:
raise ApiResponse(r.url, r_json['response_code']) raise ApiResponse(r.url, r_json['response_code'])
@ -156,7 +164,7 @@ def main(\
client = Client() client = Client()
client.setup(mqtt_host, mqtt_port, mqtt_user, mqtt_pwd) client.setup(mqtt_host, mqtt_port, mqtt_user, mqtt_pwd)
yamaha = Yamaha(Device(yamaha_host), client) yamaha = Yamaha(yamaha_host, client)
client.loop_forever() client.loop_forever()