mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-05-04 13:41:16 +00:00
Remove code to detect event loop change (#526)
The code should always be called from the same thread that created the object or we have a thread safety problem.
This commit is contained in:
parent
9930311b54
commit
528f5e9e07
@ -45,19 +45,10 @@ class TPLinkSmartHomeProtocol:
|
||||
self.port = port or TPLinkSmartHomeProtocol.DEFAULT_PORT
|
||||
self.reader: Optional[asyncio.StreamReader] = None
|
||||
self.writer: Optional[asyncio.StreamWriter] = None
|
||||
self.query_lock: Optional[asyncio.Lock] = None
|
||||
self.query_lock = asyncio.Lock()
|
||||
self.loop: Optional[asyncio.AbstractEventLoop] = None
|
||||
self.timeout = timeout or TPLinkSmartHomeProtocol.DEFAULT_TIMEOUT
|
||||
|
||||
def _detect_event_loop_change(self) -> None:
|
||||
"""Check if this object has been reused betwen event loops."""
|
||||
loop = asyncio.get_running_loop()
|
||||
if not self.loop:
|
||||
self.loop = loop
|
||||
elif self.loop != loop:
|
||||
_LOGGER.warning("Detected protocol reuse between different event loop")
|
||||
self._reset()
|
||||
|
||||
async def query(self, request: Union[str, Dict], retry_count: int = 3) -> Dict:
|
||||
"""Request information from a TP-Link SmartHome Device.
|
||||
|
||||
@ -67,11 +58,6 @@ class TPLinkSmartHomeProtocol:
|
||||
:param retry_count: how many retries to do in case of failure
|
||||
:return: response dict
|
||||
"""
|
||||
self._detect_event_loop_change()
|
||||
|
||||
if not self.query_lock:
|
||||
self.query_lock = asyncio.Lock()
|
||||
|
||||
if isinstance(request, dict):
|
||||
request = json_dumps(request)
|
||||
assert isinstance(request, str)
|
||||
@ -122,7 +108,7 @@ class TPLinkSmartHomeProtocol:
|
||||
|
||||
def _reset(self) -> None:
|
||||
"""Clear any varibles that should not survive between loops."""
|
||||
self.reader = self.writer = self.loop = self.query_lock = None
|
||||
self.reader = self.writer = None
|
||||
|
||||
async def _query(self, request: str, retry_count: int, timeout: int) -> Dict:
|
||||
"""Try to query a device."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user