forked from M-Labs/thermostat
Simplify on_connect_btn_clicked
Raise if OSError
This commit is contained in:
parent
af53926b01
commit
05dd0afe03
@ -63,6 +63,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
self.info_box = InfoBox()
|
self.info_box = InfoBox()
|
||||||
|
|
||||||
self.thermostat = Thermostat(self, self.report_refresh_spin.value())
|
self.thermostat = Thermostat(self, self.report_refresh_spin.value())
|
||||||
|
self._connecting_task = None
|
||||||
|
|
||||||
def handle_connection_error():
|
def handle_connection_error():
|
||||||
self.info_box.display_info_box(
|
self.info_box.display_info_box(
|
||||||
@ -231,38 +232,37 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
@asyncSlot()
|
@asyncSlot()
|
||||||
async def on_connect_btn_clicked(self):
|
async def on_connect_btn_clicked(self):
|
||||||
host, port = (
|
if (self._connecting_task is None) and (not self.thermostat.connected()):
|
||||||
self.conn_menu.host_set_line.text(),
|
self.status_lbl.setText("Connecting...")
|
||||||
self.conn_menu.port_set_spin.value(),
|
self.connect_btn.setText("Stop")
|
||||||
)
|
self.conn_menu.host_set_line.setEnabled(False)
|
||||||
|
self.conn_menu.port_set_spin.setEnabled(False)
|
||||||
|
|
||||||
self._connecting_task = None
|
self._connecting_task = asyncio.create_task(
|
||||||
try:
|
asyncio.wait_for(
|
||||||
if (self._connecting_task is None) or (not self.thermostat.connected()):
|
self.thermostat.start_session(
|
||||||
self.status_lbl.setText("Connecting...")
|
host=self.conn_menu.host_set_line.text(),
|
||||||
self.connect_btn.setText("Stop")
|
port=self.conn_menu.port_set_spin.value(),
|
||||||
self.conn_menu.host_set_line.setEnabled(False)
|
),
|
||||||
self.conn_menu.port_set_spin.setEnabled(False)
|
timeout=5,
|
||||||
|
)
|
||||||
try:
|
)
|
||||||
self._connecting_task = asyncio.wait_for(
|
|
||||||
self.thermostat.start_session(host=host, port=port), timeout=5
|
|
||||||
)
|
|
||||||
await self._connecting_task
|
|
||||||
except asyncio.TimeoutError:
|
|
||||||
return
|
|
||||||
await self._on_connection_changed(True)
|
|
||||||
else:
|
|
||||||
if self._connecting_task is not None:
|
|
||||||
self._connecting_task.cancel()
|
|
||||||
await self.bail()
|
|
||||||
|
|
||||||
# TODO: Remove asyncio.TimeoutError in Python 3.11
|
|
||||||
except (OSError, asyncio.TimeoutError):
|
|
||||||
try:
|
try:
|
||||||
|
await self._connecting_task
|
||||||
|
except (OSError, asyncio.TimeoutError, asyncio.CancelledError) as exc:
|
||||||
await self.bail()
|
await self.bail()
|
||||||
except ConnectionResetError:
|
if isinstance(exc, asyncio.CancelledError):
|
||||||
pass
|
return
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
await self._on_connection_changed(True)
|
||||||
|
finally:
|
||||||
|
self._connecting_task = None
|
||||||
|
|
||||||
|
elif self._connecting_task is not None:
|
||||||
|
self._connecting_task.cancel()
|
||||||
|
else:
|
||||||
|
await self.bail()
|
||||||
|
|
||||||
@asyncSlot()
|
@asyncSlot()
|
||||||
async def bail(self):
|
async def bail(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user