Use types.SimpleNamespace when parsing JSon reply.
This commit is contained in:
parent
fc9141d168
commit
3718cb64d1
12
enums.py
12
enums.py
|
@ -20,3 +20,15 @@ class ScheduleFormat(str, enum.Enum):
|
||||||
ONE = "24HOURSFIXED"
|
ONE = "24HOURSFIXED"
|
||||||
TWO = "5DAY/2DAY"
|
TWO = "5DAY/2DAY"
|
||||||
SEVEN = "7DAY"
|
SEVEN = "7DAY"
|
||||||
|
|
||||||
|
def schedule_format_int_to_enum(int_format):
|
||||||
|
if int_format == 0:
|
||||||
|
return ScheduleFormat.ZERO
|
||||||
|
elif int_format == 1:
|
||||||
|
return ScheduleFormat.ONE
|
||||||
|
elif int_format == 2:
|
||||||
|
return ScheduleFormat.TWO
|
||||||
|
elif int_format == 4:
|
||||||
|
return ScheduleFormat.SEVEN
|
||||||
|
else:
|
||||||
|
raise ValueError('Unrecognized ScheduleFormat')
|
||||||
|
|
46
holiday.py
46
holiday.py
|
@ -1,46 +0,0 @@
|
||||||
#!/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
|
|
20
neohub.py
20
neohub.py
|
@ -5,9 +5,10 @@ import asyncio
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from enums import ScheduleFormat
|
from enums import ScheduleFormat
|
||||||
from system import System
|
from enums import schedule_format_int_to_enum
|
||||||
from holiday import Holiday
|
from holiday import Holiday
|
||||||
from neostat import NeoStat
|
from neostat import NeoStat
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ class NeoHub:
|
||||||
await writer.wait_closed()
|
await writer.wait_closed()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
reply = json.loads(json_string)
|
reply = json.loads(json_string, object_hook=lambda d: SimpleNamespace(**d))
|
||||||
except json.decoder.JSONDecodeError as e:
|
except json.decoder.JSONDecodeError as e:
|
||||||
if expected_reply is None:
|
if expected_reply is None:
|
||||||
raise(e)
|
raise(e)
|
||||||
|
@ -67,14 +68,13 @@ class NeoHub:
|
||||||
async def get_system(self):
|
async def get_system(self):
|
||||||
"""
|
"""
|
||||||
Get system wide variables
|
Get system wide variables
|
||||||
|
|
||||||
Returns System object
|
|
||||||
"""
|
"""
|
||||||
message = {"GET_SYSTEM": 0}
|
message = {"GET_SYSTEM": 0}
|
||||||
|
|
||||||
data = await self._send(message)
|
data = await self._send(message)
|
||||||
system_data = System(data)
|
data.FORMAT = schedule_format_int_to_enum(data.FORMAT)
|
||||||
return system_data
|
data.ALT_TIMER_FORMAT = schedule_format_int_to_enum(data.ALT_TIMER_FORMAT)
|
||||||
|
return data
|
||||||
|
|
||||||
async def reset(self):
|
async def reset(self):
|
||||||
"""
|
"""
|
||||||
|
@ -164,12 +164,14 @@ class NeoHub:
|
||||||
"""
|
"""
|
||||||
Get list of holidays
|
Get list of holidays
|
||||||
|
|
||||||
Returns Holiday object
|
start end end times are converted to datetimes
|
||||||
"""
|
"""
|
||||||
message = {"GET_HOLIDAY": 0}
|
message = {"GET_HOLIDAY": 0}
|
||||||
|
|
||||||
result = await self._send(message)
|
result = await self._send(message)
|
||||||
return Holiday(result)
|
result.start = datetime.datetime.strptime(result.start.strip(), "%a %b %d %H:%M:%S %Y") if result.start else None
|
||||||
|
result.end = datetime.datetime.strptime(result.end.strip(), "%a %b %d %H:%M:%S %Y") if result.end else None
|
||||||
|
return result
|
||||||
|
|
||||||
async def cancel_holiday(self):
|
async def cancel_holiday(self):
|
||||||
"""
|
"""
|
||||||
|
@ -193,7 +195,7 @@ class NeoHub:
|
||||||
|
|
||||||
zones = await self._send(message)
|
zones = await self._send(message)
|
||||||
result = []
|
result = []
|
||||||
for name, zone_id in zones.items():
|
for name, zone_id in zones.__dict__.items():
|
||||||
result.append(NeoStat(self, name, zone_id))
|
result.append(NeoStat(self, name, zone_id))
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
35
system.py
35
system.py
|
@ -1,35 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2020 Andrius Štikonas <andrius@stikonas.eu>
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
||||||
|
|
||||||
from enums import ScheduleFormat
|
|
||||||
|
|
||||||
|
|
||||||
def schedule_format(int_format):
|
|
||||||
if int_format == 0:
|
|
||||||
return ScheduleFormat.ZERO
|
|
||||||
elif int_format == 1:
|
|
||||||
return ScheduleFormat.ONE
|
|
||||||
elif int_format == 2:
|
|
||||||
return ScheduleFormat.TWO
|
|
||||||
elif int_format == 4:
|
|
||||||
return ScheduleFormat.SEVEN
|
|
||||||
else:
|
|
||||||
raise ValueError('Unrecognized ScheduleFormat')
|
|
||||||
|
|
||||||
|
|
||||||
class System:
|
|
||||||
def __init__(self, system_info):
|
|
||||||
self.dst_auto = system_info['DST_AUTO']
|
|
||||||
self.dst_on = system_info['DST_ON']
|
|
||||||
self.timer_format = schedule_format(system_info['FORMAT'])
|
|
||||||
# If system timer format is set to non programmable, then any time clock remain
|
|
||||||
# in the previous setting which is stored in ALT_TIMER_FORMAT.
|
|
||||||
self.alt_timer_format = schedule_format(system_info['ALT_TIMER_FORMAT'])
|
|
||||||
self.ntp = system_info['NTP_ON'] == "Running"
|
|
||||||
self.hub_type = system_info['HUB_TYPE']
|
|
||||||
self.hub_version = system_info['HUB_VERSION']
|
|
||||||
self.temperature_unit = system_info["CORF"]
|
|
||||||
self.timezone = system_info['TIME_ZONE']
|
|
||||||
self.time = system_info['UTC']
|
|
Loading…
Reference in New Issue