mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-10-13 10:58:02 +00:00
Cache zoneinfo for smart devices (#1156)
This commit is contained in:
28
kasa/cachedzoneinfo.py
Normal file
28
kasa/cachedzoneinfo.py
Normal 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)
|
Reference in New Issue
Block a user