Add class to represent holidays.

This commit is contained in:
Andrius Štikonas 2020-11-21 10:48:09 +00:00
parent cf195e83ed
commit d44117d913
4 changed files with 83 additions and 4 deletions

View File

@ -9,12 +9,11 @@ import enum
class ScheduleFormat(str, enum.Enum): class ScheduleFormat(str, enum.Enum):
""" """
Enum to specify Schedule Format Enum to specify Schedule Format
ZERO - non programmable (time clocks cannot be non programmable) ZERO - non programmable (time clocks cannot be non programmable)
ONE - same format every day of the week ONE - same format every day of the week
TWO - 5 day / 2 day TWO - 5 day / 2 day
SEVEN - 7 day (every day different) SEVEN - 7 day (every day different)
""" """
ZERO = "NONPROGRAMMABLE" ZERO = "NONPROGRAMMABLE"

48
holiday.py Normal file
View File

@ -0,0 +1,48 @@
#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2020 Andrius Štikonas <andrius@stikonas.eu>
# SPDX-License-Identifier: LGPL-3.0-or-later
import datetime
import enum
class Holiday:
"""
Class representing Holidays
start, end: holiday datetime objects or None
ids
"""
def __init__(self, reply: str):
start = reply["start"]
if start:
self._start = datetime.datetime.strptime(start.strip(), "%a %b %d %H:%M:%S %Y")
else:
self._start = None
end = reply["end"]
if end:
self.end = datetime.datetime.strptime(end.strip(), "%a %b %d %H:%M:%S %Y")
else:
self._end = None
self._ids = reply["ids"]
@property
def start(self):
""" Beginning of holiday. """
return self._start
@property
def end(self):
""" End of holiday. """
return self._end
@property
def ids(self):
""" Devices that have holiday set up. """
return self._ids

View File

@ -2,11 +2,13 @@
# SPDX-License-Identifier: LGPL-3.0-or-later # SPDX-License-Identifier: LGPL-3.0-or-later
import asyncio import asyncio
import datetime
import json import json
import logging import logging
from enums import ScheduleFormat from enums import ScheduleFormat
from system import System from system import System
from holiday import Holiday
class NeoHub: class NeoHub:
@ -153,11 +155,38 @@ class NeoHub:
return result return result
async def holiday(self, start: datetime.datetime, end: datetime.datetime):
"""
Sets holiday mode.
start: beginning of holiday
end: end of holiday
"""
message = {"HOLIDAY": [start.strftime("%H%M%S%d%m%Y"), end.strftime("%H%M%S%d%m%Y")]}
result = await self._send(message)
return result
async def get_holiday(self): async def get_holiday(self):
""" """
Get list of holidays Get list of holidays
Returns Holiday object
""" """
message = {"GET_HOLIDAY": 0} message = {"GET_HOLIDAY": 0}
result = await self._send(message) result = await self._send(message)
return Holiday(result)
async def cancel_holiday(self):
"""
Cancels holidays and returns to normal schedule
"""
message = {"CANCEL_HOLIDAY": 0}
reply = {"result": "holiday cancelled"}
result = await self._send(message, reply)
return result return result

View File

@ -5,8 +5,9 @@
import asyncio import asyncio
import neohub import datetime
import logging import logging
import neohub
from enums import ScheduleFormat from enums import ScheduleFormat
@ -15,8 +16,10 @@ async def run():
await hub.connect() await hub.connect()
system = await hub.get_system() system = await hub.get_system()
print(vars(system)) print(vars(system))
result = await hub.get_holiday() result = await hub.cancel_holiday()
print(result) print(result)
result = await hub.get_holiday()
print(vars(result))
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)