From 2feab82396d960cd412e273dc364f1b1cb881b77 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Tue, 2 Oct 2018 00:21:02 -0700 Subject: [PATCH 1/4] Use Protractor loop in Windows (#17061) * Use Protractor loop in Windows * Add import sys --- homeassistant/util/async_.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/homeassistant/util/async_.py b/homeassistant/util/async_.py index 04456b8cb2f..61fbb60a24f 100644 --- a/homeassistant/util/async_.py +++ b/homeassistant/util/async_.py @@ -2,6 +2,7 @@ import concurrent.futures import threading import logging +import sys from asyncio import coroutines from asyncio.events import AbstractEventLoop from asyncio.futures import Future @@ -22,7 +23,10 @@ except AttributeError: def asyncio_run(main: Awaitable[_T], *, debug: bool = False) -> _T: """Minimal re-implementation of asyncio.run (since 3.7).""" - loop = asyncio.new_event_loop() + if sys.platform == 'win32': + loop = asyncio.ProactorEventLoop() + else: + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.set_debug(debug) try: From 3f5018459f507353ba2c01fca871e2df0d8ac0a1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 09:55:37 +0200 Subject: [PATCH 2/4] Proactor policy fix (#17066) * Proactor policy fix * Backport Proactor policy for None: """Attempt to use uvloop.""" import asyncio + from asyncio.events import BaseDefaultEventLoopPolicy + + policy = None if sys.platform == 'win32': - asyncio.set_event_loop(asyncio.ProactorEventLoop()) + if hasattr(asyncio, 'WindowsProactorEventLoopPolicy'): + policy = asyncio.WindowsProactorEventLoopPolicy() + else: + class ProactorPolicy(BaseDefaultEventLoopPolicy): + """Event loop policy to create proactor loops.""" + + _loop_factory = asyncio.ProactorEventLoop + + policy = ProactorPolicy() else: try: import uvloop except ImportError: pass else: - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + policy = uvloop.EventLoopPolicy() + + if policy is not None: + asyncio.set_event_loop_policy(policy) def validate_python() -> None: diff --git a/homeassistant/util/async_.py b/homeassistant/util/async_.py index 61fbb60a24f..04456b8cb2f 100644 --- a/homeassistant/util/async_.py +++ b/homeassistant/util/async_.py @@ -2,7 +2,6 @@ import concurrent.futures import threading import logging -import sys from asyncio import coroutines from asyncio.events import AbstractEventLoop from asyncio.futures import Future @@ -23,10 +22,7 @@ except AttributeError: def asyncio_run(main: Awaitable[_T], *, debug: bool = False) -> _T: """Minimal re-implementation of asyncio.run (since 3.7).""" - if sys.platform == 'win32': - loop = asyncio.ProactorEventLoop() - else: - loop = asyncio.new_event_loop() + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.set_debug(debug) try: From e07b6dfe0b1403e53445bde5ada445d7bf19b14f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 09:57:01 +0200 Subject: [PATCH 3/4] Bumped version to 0.79.3 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 6ae08af5047..59d19d2b29a 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '2' +PATCH_VERSION = '3' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 03845ef4903de37db2b48e98a0bf14b0d05f1407 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 10:35:00 +0200 Subject: [PATCH 4/4] Lint --- homeassistant/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py index 973080c2e61..a424716f0aa 100644 --- a/homeassistant/__main__.py +++ b/homeassistant/__main__.py @@ -28,6 +28,7 @@ def set_loop() -> None: if sys.platform == 'win32': if hasattr(asyncio, 'WindowsProactorEventLoopPolicy'): + # pylint: disable=no-member policy = asyncio.WindowsProactorEventLoopPolicy() else: class ProactorPolicy(BaseDefaultEventLoopPolicy):