Cache zoneinfo for smart devices (#1156)

This commit is contained in:
Steven B.
2024-10-08 12:21:01 +01:00
committed by GitHub
parent 9641edcbc0
commit 7c1686d3ae
3 changed files with 45 additions and 32 deletions

28
kasa/cachedzoneinfo.py Normal file
View File

@@ -0,0 +1,28 @@
"""Module for caching ZoneInfos."""
from __future__ import annotations
import asyncio
from zoneinfo import ZoneInfo
class CachedZoneInfo(ZoneInfo):
"""Cache ZoneInfo objects."""
_cache: dict[str, ZoneInfo] = {}
@classmethod
async def get_cached_zone_info(cls, time_zone_str: str) -> ZoneInfo:
"""Get a cached zone info object."""
if cached := cls._cache.get(time_zone_str):
return cached
loop = asyncio.get_running_loop()
zinfo = await loop.run_in_executor(None, _get_zone_info, time_zone_str)
cls._cache[time_zone_str] = zinfo
return zinfo
def _get_zone_info(time_zone_str: str) -> ZoneInfo:
"""Get a time zone object for the given time zone string."""
return ZoneInfo(time_zone_str)