From 601a99b82635ee9f075dd497465074175030388a Mon Sep 17 00:00:00 2001 From: Phil Salant Date: Wed, 2 Nov 2022 10:02:18 -0600 Subject: [PATCH 1/2] Revert "Remove `__set_event_loop()`" This reverts commit fb90bdd12c0bb477adb0e2ebe52c598776d026da. --- fideslog/sdk/python/client.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/fideslog/sdk/python/client.py b/fideslog/sdk/python/client.py index e1cfd54..e9723cd 100644 --- a/fideslog/sdk/python/client.py +++ b/fideslog/sdk/python/client.py @@ -1,6 +1,7 @@ # pylint: disable=import-outside-toplevel, too-many-arguments from asyncio import run +from sys import platform, version_info from typing import Dict, Optional, Union from aiohttp import ( @@ -23,6 +24,25 @@ REQUIRED_HEADERS = {"X-Fideslog-Version": __version__} +def __set_event_loop() -> None: + """ + Helps to work around a bug in the default Windows event loop for Python 3.8+ + by changing the default event loop in Windows processes. + """ + + if ( + version_info[0] == 3 + and version_info[1] >= 8 + and platform.lower().startswith("win") + ): + from asyncio import ( # type: ignore[attr-defined] + WindowsSelectorEventLoopPolicy, + set_event_loop_policy, + ) + + set_event_loop_policy(WindowsSelectorEventLoopPolicy()) + + class AnalyticsClient: """ An instance of a fides tool that wishes to send @@ -71,6 +91,7 @@ def register(self, registration: Registration) -> None: Register a new user. """ + __set_event_loop() run(self.send_async(registration)) async def register_async(self, registration: Registration) -> None: @@ -85,6 +106,7 @@ def send(self, event: AnalyticsEvent) -> None: Record a new analytics event. """ + __set_event_loop() run(self.send_async(event)) async def send_async( From 0de610a3d3ad08154b020e39647cba915e95cd75 Mon Sep 17 00:00:00 2001 From: Phil Salant Date: Wed, 2 Nov 2022 10:10:04 -0600 Subject: [PATCH 2/2] Move `__set_event_loop()` to the `AnalyticsClient` class --- fideslog/sdk/python/client.py | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/fideslog/sdk/python/client.py b/fideslog/sdk/python/client.py index e9723cd..5807fb2 100644 --- a/fideslog/sdk/python/client.py +++ b/fideslog/sdk/python/client.py @@ -24,25 +24,6 @@ REQUIRED_HEADERS = {"X-Fideslog-Version": __version__} -def __set_event_loop() -> None: - """ - Helps to work around a bug in the default Windows event loop for Python 3.8+ - by changing the default event loop in Windows processes. - """ - - if ( - version_info[0] == 3 - and version_info[1] >= 8 - and platform.lower().startswith("win") - ): - from asyncio import ( # type: ignore[attr-defined] - WindowsSelectorEventLoopPolicy, - set_event_loop_policy, - ) - - set_event_loop_policy(WindowsSelectorEventLoopPolicy()) - - class AnalyticsClient: """ An instance of a fides tool that wishes to send @@ -91,7 +72,7 @@ def register(self, registration: Registration) -> None: Register a new user. """ - __set_event_loop() + self.__set_event_loop() run(self.send_async(registration)) async def register_async(self, registration: Registration) -> None: @@ -106,7 +87,7 @@ def send(self, event: AnalyticsEvent) -> None: Record a new analytics event. """ - __set_event_loop() + self.__set_event_loop() run(self.send_async(event)) async def send_async( @@ -191,3 +172,22 @@ def __get_analytics_payload(self, event: AnalyticsEvent) -> Dict: payload[extra] = event_dict[extra] return payload + + @staticmethod + def __set_event_loop() -> None: + """ + Helps to work around a bug in the default Windows event loop for Python 3.8+ + by changing the default event loop in Windows processes. + """ + + if ( + version_info[0] == 3 + and version_info[1] >= 8 + and platform.lower().startswith("win") + ): + from asyncio import ( # type: ignore[attr-defined] + WindowsSelectorEventLoopPolicy, + set_event_loop_policy, + ) + + set_event_loop_policy(WindowsSelectorEventLoopPolicy())