1414from pathlib import Path
1515from typing import TYPE_CHECKING , Any , Literal , TypeVar , overload
1616
17- from appdaemon import dependency
17+ from appdaemon import dependency , utils
1818from appdaemon import exceptions as ade
19- from appdaemon import utils
2019from appdaemon .appdaemon import AppDaemon
2120from appdaemon .entity import Entity
2221from appdaemon .events import EventCallback
2524from appdaemon .parse import resolve_time_str
2625from appdaemon .state import StateCallbackType
2726
27+ from .version import __version__
28+
2829T = TypeVar ("T" )
2930
3031
@@ -777,18 +778,17 @@ def get_ad_version() -> str:
777778 >>> version = self.get_ad_version()
778779
779780 """
780- return utils . __version__
781+ return __version__
781782
782783 #
783784 # Entity
784785 #
785786
786- @utils .sync_decorator
787- async def add_entity (
787+ def add_entity (
788788 self ,
789789 entity_id : str ,
790790 state : Any ,
791- attributes : dict | None = None ,
791+ attributes : dict [ str , Any ] | None = None ,
792792 namespace : str | None = None ,
793793 ) -> None :
794794 """Adds a non-existent entity, by creating it within a namespaces.
@@ -817,11 +817,10 @@ async def add_entity(
817817 >>> self.add_entity('mqtt.living_room_temperature', namespace='mqtt')
818818
819819 """
820- namespace = namespace or self .namespace
821- return await self .AD .state .add_entity (namespace , entity_id , state , attributes )
820+ namespace = namespace if namespace is not None else self .namespace
821+ return self .AD .state .add_entity (namespace , entity_id , state , attributes )
822822
823- @utils .sync_decorator
824- async def entity_exists (self , entity_id : str , namespace : str | None = None ) -> bool :
823+ def entity_exists (self , entity_id : str , namespace : str | None = None ) -> bool :
825824 """Checks the existence of an entity in AD.
826825
827826 When working with multiple AD namespaces, it is possible to specify the
@@ -850,7 +849,7 @@ async def entity_exists(self, entity_id: str, namespace: str | None = None) -> b
850849 >>> if self.entity_exists("mqtt.security_settings", namespace = "mqtt"):
851850 >>> #do something
852851 """
853- namespace = namespace or self .namespace
852+ namespace = namespace if namespace is not None else self .namespace
854853 return self .AD .state .entity_exists (namespace , entity_id )
855854
856855 @utils .sync_decorator
@@ -1724,7 +1723,7 @@ async def get_state(
17241723 if kwargs :
17251724 self .logger .warning (f"Extra kwargs passed to get_state, will be ignored: { kwargs } " )
17261725
1727- return await self .AD .state .get_state (
1726+ return self .AD .state .get_state (
17281727 name = self .name ,
17291728 namespace = namespace or self .namespace ,
17301729 entity_id = entity_id ,
@@ -2364,14 +2363,14 @@ async def sun_up(self) -> bool:
23642363 """Determines if the sun is currently up.
23652364
23662365 Returns:
2367- bool: ``True`` if the sun is up, ``False`` otherwise.
2366+ bool: ``True`` if the sun is up, ``False`` otherwise.
23682367
23692368 Examples:
23702369 >>> if self.sun_up():
2371- >>> #do something
2370+ >>> # do something
23722371
23732372 """
2374- return await self .AD .sched .sun_up ()
2373+ return self .AD .sched .sun_up ()
23752374
23762375 @utils .sync_decorator
23772376 async def sun_down (self ) -> bool :
@@ -2382,10 +2381,10 @@ async def sun_down(self) -> bool:
23822381
23832382 Examples:
23842383 >>> if self.sun_down():
2385- >>> #do something
2384+ >>> # do something
23862385
23872386 """
2388- return await self .AD .sched .sun_down ()
2387+ return self .AD .sched .sun_down ()
23892388
23902389 @utils .sync_decorator
23912390 async def parse_time (
@@ -2442,7 +2441,7 @@ async def parse_time(
24422441 05:33:17
24432442
24442443 """
2445- return await self .AD .sched .parse_time (
2444+ return self .AD .sched .parse_time (
24462445 time_str = time_str ,
24472446 aware = aware ,
24482447 today = today ,
@@ -2506,7 +2505,7 @@ async def parse_datetime(
25062505 >>> self.parse_datetime("sunrise + 01:00:00")
25072506 2019-08-16 06:33:17
25082507 """
2509- return await self .AD .sched .parse_datetime (
2508+ return self .AD .sched .parse_datetime (
25102509 input_ = time_str ,
25112510 aware = aware ,
25122511 today = today ,
@@ -2522,8 +2521,7 @@ async def get_now(self, aware: bool = True) -> dt.datetime:
25222521 2019-08-16 21:17:41.098813-04:00
25232522
25242523 """
2525- now = await self .AD .sched .get_now ()
2526- return now .astimezone (self .AD .tz ) if aware else self .AD .sched .make_naive (now )
2524+ return self .AD .sched .get_now_sync (_tz = None if aware else False )
25272525
25282526 @utils .sync_decorator
25292527 async def get_now_ts (self , aware : bool = False ) -> float :
@@ -2578,7 +2576,7 @@ async def now_is_between(
25782576 >>> #do something
25792577
25802578 """
2581- return await self .AD .sched .now_is_between (start_time = start_time , end_time = end_time , now = now )
2579+ return self .AD .sched .now_is_between (start_time = start_time , end_time = end_time , now = now )
25822580
25832581 @utils .sync_decorator
25842582 async def sunrise (self , aware : bool = False , today : bool = False , days_offset : int = 0 ) -> dt .datetime :
@@ -2600,7 +2598,7 @@ async def sunrise(self, aware: bool = False, today: bool = False, days_offset: i
26002598 2023-02-01 07:12:20.272403
26012599
26022600 """
2603- return await self .AD .sched .sunrise (aware , today , days_offset )
2601+ return self .AD .sched .sunrise (aware , today , days_offset )
26042602
26052603 @utils .sync_decorator
26062604 async def sunset (self , aware : bool = False , today : bool = False , days_offset : int = 0 ) -> dt .datetime :
@@ -2622,7 +2620,7 @@ async def sunset(self, aware: bool = False, today: bool = False, days_offset: in
26222620 2023-02-02 18:09:46.252314
26232621
26242622 """
2625- return await self .AD .sched .sunset (aware , today , days_offset )
2623+ return self .AD .sched .sunset (aware , today , days_offset )
26262624
26272625 @utils .sync_decorator
26282626 async def datetime (self , aware : bool = False ) -> dt .datetime :
@@ -2639,7 +2637,7 @@ async def datetime(self, aware: bool = False) -> dt.datetime:
26392637 2019-08-15 20:15:55.549379
26402638
26412639 """
2642- return await self .get_now (aware = aware )
2640+ return self .get_now (aware = aware )
26432641
26442642 @utils .sync_decorator
26452643 async def time (self ) -> dt .time :
@@ -2653,7 +2651,7 @@ async def time(self) -> dt.time:
26532651 20:15:31.295751
26542652
26552653 """
2656- return ( await self .get_now (aware = True ) ).time ()
2654+ return self .get_now (aware = True ).time ()
26572655
26582656 @utils .sync_decorator
26592657 async def date (self ) -> dt .date :
@@ -2667,11 +2665,11 @@ async def date(self) -> dt.date:
26672665 2019-08-15
26682666
26692667 """
2670- return ( await self .get_now (aware = True ) ).date ()
2668+ return self .get_now (aware = True ).date ()
26712669
2672- def get_timezone (self ) -> str :
2670+ def get_timezone (self ) -> str | None :
26732671 """Returns the current time zone."""
2674- return self .AD .time_zone
2672+ return self .AD .time_zone . zone
26752673
26762674 #
26772675 # Scheduler
@@ -2967,7 +2965,7 @@ async def run_at(
29672965 _ , offset = resolve_time_str (start_str , now = now , location = self .AD .sched .location )
29682966 func = functools .partial (func , * args , repeat = True , offset = offset )
29692967 case _:
2970- start = await self .AD .sched .parse_datetime (start , aware = True )
2968+ start = self .AD .sched .parse_datetime (start , aware = True )
29712969 func = functools .partial (
29722970 self .AD .sched .insert_schedule ,
29732971 name = self .name ,
@@ -3371,7 +3369,7 @@ async def run_at_sunset(
33713369 >>> self.run_at_sunset(self.sun, random_start = -60*60, random_end = 30*60)
33723370
33733371 """
3374- sunset = await self .AD .sched .next_sunset ()
3372+ sunset = self .AD .sched .next_sunset ()
33753373 td = utils .parse_timedelta (offset )
33763374 self .logger .debug (f"Registering run_at_sunset at { sunset + td } with { args } , { kwargs } " )
33773375 return await self .AD .sched .insert_schedule (
@@ -3444,7 +3442,7 @@ async def run_at_sunrise(
34443442 >>> self.run_at_sunrise(self.sun, random_start = -60*60, random_end = 30*60)
34453443
34463444 """
3447- sunrise = await self .AD .sched .next_sunrise ()
3445+ sunrise = self .AD .sched .next_sunrise ()
34483446 td = utils .parse_timedelta (offset )
34493447 self .logger .debug (f"Registering run_at_sunrise at { sunrise + td } with { args } , { kwargs } " )
34503448 return await self .AD .sched .insert_schedule (
0 commit comments