Skip to content

Commit fb64aba

Browse files
committed
Made SystemStates a "sub-property" of System
1 parent 5bea259 commit fb64aba

3 files changed

Lines changed: 38 additions & 40 deletions

File tree

simplipy/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
"""Define a version constant."""
2-
__version__ = '3.0.3'
2+
__version__ = '3.0.4'

simplipy/system.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,21 @@
99
_LOGGER = logging.getLogger(__name__)
1010

1111

12-
class SystemStates(Enum):
13-
"""Define states that the system can be in."""
14-
15-
away = 1
16-
away_count = 2
17-
entry_delay = 3
18-
exit_delay = 4
19-
home = 5
20-
home_count = 5
21-
off = 6
22-
unknown = 99
23-
24-
2512
class System:
2613
"""Define a system."""
2714

15+
class SystemStates(Enum):
16+
"""Define states that the system can be in."""
17+
18+
away = 1
19+
away_count = 2
20+
entry_delay = 3
21+
exit_delay = 4
22+
home = 5
23+
home_count = 5
24+
off = 6
25+
unknown = 99
26+
2827
def __init__(self, account, location_info: dict) -> None:
2928
"""Initialize."""
3029
self._location_info = location_info
@@ -33,10 +32,10 @@ def __init__(self, account, location_info: dict) -> None:
3332

3433
try:
3534
raw_state = location_info['system']['alarmState']
36-
self._state = SystemStates[convert_to_underscore(raw_state)]
35+
self._state = self.SystemStates[convert_to_underscore(raw_state)]
3736
except KeyError:
3837
_LOGGER.error('Unknown alarm state: %s', raw_state)
39-
self._state = SystemStates.unknown
38+
self._state = self.SystemStates.unknown
4039

4140
@property
4241
def alarm_going_off(self) -> bool:
@@ -49,7 +48,7 @@ def serial(self) -> str:
4948
return self._location_info['system']['serial']
5049

5150
@property
52-
def state(self) -> SystemStates:
51+
def state(self) -> Enum:
5352
"""Return the current state of the system."""
5453
return self._state
5554

@@ -76,8 +75,7 @@ async def _update_location_info(self) -> None:
7675
"""Update information on the system."""
7776
subscription_resp = await self.account.get_subscription_data()
7877
[location_info] = [
79-
system['location']
80-
for system in subscription_resp['subscriptions']
78+
system['location'] for system in subscription_resp['subscriptions']
8179
if system['sid'] == self.system_id
8280
]
8381
self._location_info = location_info
@@ -100,15 +98,15 @@ async def get_events(
10098

10199
async def set_away(self) -> None:
102100
"""Set the system in "Away" mode."""
103-
await self._set_state(SystemStates.away)
101+
await self._set_state(self.SystemStates.away)
104102

105103
async def set_home(self) -> None:
106104
"""Set the system in "Home" mode."""
107-
await self._set_state(SystemStates.home)
105+
await self._set_state(self.SystemStates.home)
108106

109107
async def set_off(self) -> None:
110108
"""Set the system in "Off" mode."""
111-
await self._set_state(SystemStates.off)
109+
await self._set_state(self.SystemStates.off)
112110

113111
async def update(
114112
self, refresh_location: bool = True, cached: bool = True) -> None:
@@ -119,7 +117,7 @@ async def update(
119117
class SystemV2(System):
120118
"""Define a V2 (original) system."""
121119

122-
async def _set_state(self, value: SystemStates) -> None:
120+
async def _set_state(self, value: Enum) -> None:
123121
"""Set the state of the system."""
124122
if self._state == value:
125123
return
@@ -130,7 +128,7 @@ async def _set_state(self, value: SystemStates) -> None:
130128
params={'state': value.name})
131129

132130
if resp['success']:
133-
self._state = SystemStates[resp['requestedState']]
131+
self._state = self.SystemStates[resp['requestedState']]
134132

135133
async def update(
136134
self, refresh_location: bool = True, cached: bool = True) -> None:
@@ -160,7 +158,7 @@ async def update(
160158
class SystemV3(System):
161159
"""Define a V3 (new) system."""
162160

163-
async def _set_state(self, value: SystemStates) -> None:
161+
async def _set_state(self, value: Enum) -> None:
164162
"""Set the state of the system."""
165163
if self._state == value:
166164
return
@@ -169,7 +167,7 @@ async def _set_state(self, value: SystemStates) -> None:
169167
'post', 'ss3/subscriptions/{0}/state/{1}'.format(
170168
self.system_id, value.name))
171169

172-
self._state = SystemStates[convert_to_underscore(resp['state'])]
170+
self._state = self.SystemStates[convert_to_underscore(resp['state'])]
173171

174172
async def update(
175173
self, refresh_location: bool = True, cached: bool = True) -> None:

tests/test_system.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from simplipy import get_systems
1010
from simplipy.account import SimpliSafe
1111
from simplipy.errors import RequestError, TokenExpiredError
12-
from simplipy.system import System, SystemStates
12+
from simplipy.system import System
1313

1414
from .const import (
1515
TEST_ACCESS_TOKEN, TEST_EMAIL, TEST_PASSWORD, TEST_REFRESH_TOKEN,
@@ -104,7 +104,7 @@ async def test_properties_base(event_loop, v2_server):
104104
[system] = await get_systems(TEST_EMAIL, TEST_PASSWORD, websession)
105105
assert not system.alarm_going_off
106106
assert system.serial == TEST_SYSTEM_SERIAL_NO
107-
assert system.state == SystemStates.off
107+
assert system.state == system.SystemStates.off
108108
assert system.system_id == TEST_SYSTEM_ID
109109
assert system.temperature == 67
110110
assert system.version == 2
@@ -168,16 +168,16 @@ async def test_set_states_v2(
168168
[system] = await get_systems(TEST_EMAIL, TEST_PASSWORD, websession)
169169

170170
await system.set_away()
171-
assert system.state == SystemStates.away
171+
assert system.state == system.SystemStates.away
172172

173173
await system.set_home()
174-
assert system.state == SystemStates.home
174+
assert system.state == system.SystemStates.home
175175

176176
await system.set_off()
177-
assert system.state == SystemStates.off
177+
assert system.state == system.SystemStates.off
178178

179179
await system.set_off()
180-
assert system.state == SystemStates.off
180+
assert system.state == system.SystemStates.off
181181

182182

183183
@pytest.mark.asyncio
@@ -191,39 +191,39 @@ async def test_set_states_v3(
191191
# routes:
192192
v3_server.add(
193193
'api.simplisafe.com', '/v1/ss3/subscriptions/{0}/state/{1}'.format(
194-
TEST_SUBSCRIPTION_ID, SystemStates.away.name), 'post',
194+
TEST_SUBSCRIPTION_ID, 'away'), 'post',
195195
aresponses.Response(
196196
text=json.dumps(v3_state_away_json), status=200))
197197
v3_server.add(
198198
'api.simplisafe.com', '/v1/ss3/subscriptions/{0}/state/{1}'.format(
199-
TEST_SUBSCRIPTION_ID, SystemStates.home.name), 'post',
199+
TEST_SUBSCRIPTION_ID, 'home'), 'post',
200200
aresponses.Response(
201201
text=json.dumps(v3_state_home_json), status=200))
202202
v3_server.add(
203203
'api.simplisafe.com', '/v1/ss3/subscriptions/{0}/state/{1}'.format(
204-
TEST_SUBSCRIPTION_ID, SystemStates.off.name), 'post',
204+
TEST_SUBSCRIPTION_ID, 'off'), 'post',
205205
aresponses.Response(
206206
text=json.dumps(v3_state_off_json), status=200))
207207
v3_server.add(
208208
'api.simplisafe.com', '/v1/ss3/subscriptions/{0}/state/{1}'.format(
209-
TEST_SUBSCRIPTION_ID, SystemStates.off.name), 'post',
209+
TEST_SUBSCRIPTION_ID, 'off'), 'post',
210210
aresponses.Response(
211211
text=json.dumps(v3_state_off_json), status=200))
212212

213213
async with aiohttp.ClientSession(loop=event_loop) as websession:
214214
[system] = await get_systems(TEST_EMAIL, TEST_PASSWORD, websession)
215215

216216
await system.set_away()
217-
assert system.state == SystemStates.away
217+
assert system.state == system.SystemStates.away
218218

219219
await system.set_home()
220-
assert system.state == SystemStates.home
220+
assert system.state == system.SystemStates.home
221221

222222
await system.set_off()
223-
assert system.state == SystemStates.off
223+
assert system.state == system.SystemStates.off
224224

225225
await system.set_off()
226-
assert system.state == SystemStates.off
226+
assert system.state == system.SystemStates.off
227227

228228

229229
@pytest.mark.asyncio

0 commit comments

Comments
 (0)