mirror of
https://github.com/Mesteriis/hassio-addons-avm.git
synced 2026-01-10 15:31:02 +01:00
55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import asyncio
|
|
from datetime import datetime, timedelta
|
|
from backup.time import Time
|
|
from pytz import timezone
|
|
|
|
|
|
class FakeTime(Time):
|
|
def __init__(self, now: datetime = None):
|
|
super().__init__(local_tz=timezone('EST'))
|
|
if now:
|
|
self._now = now
|
|
else:
|
|
self._now = self.toUtc(
|
|
datetime(1985, 12, 6, 0, 0, 0, tzinfo=timezone('EST')))
|
|
self._start = self._now
|
|
self.sleeps = []
|
|
|
|
def setTimeZone(self, tz):
|
|
if isinstance(tz, str):
|
|
self.local_tz = timezone(tz)
|
|
else:
|
|
self.local_tz = tz
|
|
|
|
def monotonic(self):
|
|
return (self._now - self._start).total_seconds()
|
|
|
|
def setNow(self, now: datetime):
|
|
self._now = now
|
|
return self
|
|
|
|
def advanceDay(self, days=1):
|
|
return self.advance(days=1)
|
|
|
|
def advance(self, days=0, hours=0, minutes=0, seconds=0, duration=None):
|
|
self._now = self._now + \
|
|
timedelta(days=days, hours=hours, seconds=seconds, minutes=minutes)
|
|
if duration is not None:
|
|
self._now = self._now + duration
|
|
return self
|
|
|
|
def now(self) -> datetime:
|
|
return self._now
|
|
|
|
def nowLocal(self) -> datetime:
|
|
return self.toLocal(self._now)
|
|
|
|
async def sleepAsync(self, seconds: float, _exit_early: asyncio.Event = None):
|
|
self.sleeps.append(seconds)
|
|
self._now = self._now + timedelta(seconds=seconds)
|
|
# allow the task to be interrupted if such a thing is requested.
|
|
await asyncio.sleep(0)
|
|
|
|
def clearSleeps(self):
|
|
self.sleeps = []
|