Skip to content

Commit fc2f9b0

Browse files
authored
changes to iotshadow.py json None handling (#297)
* changes to iotshadow.py json None handling via builder
1 parent 1fb16b8 commit fc2f9b0

File tree

3 files changed

+50
-10
lines changed

3 files changed

+50
-10
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ docs/.buildinfo
22
docs/.doctrees/
33
__pycache__/
44
*.egg-info
5+
build/*

awsiot/iotshadow.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,16 +1327,14 @@ def __init__(self, *args, **kwargs):
13271327
def from_payload(cls, payload):
13281328
# type: (typing.Dict[str, typing.Any]) -> ShadowState
13291329
new = cls()
1330-
val = payload.get('desired')
1331-
if val is not None:
1332-
new.desired = val
1333-
val = payload.get('reported')
1334-
if val is not None:
1335-
new.reported = val
1336-
if new.desired == None:
1337-
new.desired_is_nullable = True
1338-
if new.reported == None:
1339-
new.reported_is_nullable = True
1330+
if 'desired' in payload:
1331+
new.desired = payload['desired']
1332+
new.desired_is_nullable = new.desired is None
1333+
1334+
if 'reported' in payload:
1335+
new.reported = payload['reported']
1336+
new.reported_is_nullable = new.reported is None
1337+
13401338
return new
13411339

13421340
def to_payload(self):

test/test_shadow_state.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from pydoc import describe
2+
from unittest import TestCase
3+
4+
from awsiot.iotshadow import ShadowState
5+
6+
7+
class ShadowTest(TestCase):
8+
9+
def test_shadow_state_payload_filled(self):
10+
test_state = ShadowState.from_payload({
11+
"reported": {"Color": "Red"},
12+
"desired": {"Color": "Blue"}
13+
})
14+
compareState = ShadowState(
15+
reported={"Color": "Red"},
16+
desired={"Color": "Blue"}
17+
)
18+
self.assertTrue(test_state.to_payload() == compareState.to_payload())
19+
20+
def test_shadow_state_payload_partial_filled(self):
21+
test_state = ShadowState.from_payload({
22+
"reported": {"Color": "Red"}
23+
})
24+
self.assertEqual(test_state.to_payload(), {"reported": {"Color": "Red"}})
25+
26+
def test_shadow_state_payload_can_send_null(self):
27+
test_state = ShadowState(
28+
reported={"Color": "Red"},
29+
desired=None,
30+
desired_is_nullable=True
31+
)
32+
self.assertEqual(test_state.to_payload(), {"reported": {"Color": "Red"}, "desired": None})
33+
34+
def test_shadow_state_payload_with_none(self):
35+
test_state = ShadowState.from_payload({"reported": {"Color": "Red"}, "desired": None})
36+
self.assertTrue(test_state.desired_is_nullable)
37+
self.assertEqual(test_state.to_payload(), {"reported": {"Color": "Red"}, "desired": None})
38+
39+
def test_shadow_state_payload_without_none(self):
40+
test_state = ShadowState.from_payload({"reported": {"deviceAgent": {"rebootRequired": True}}})
41+
self.assertEqual(test_state.to_payload(), {"reported": {"deviceAgent": {"rebootRequired": True}}})

0 commit comments

Comments
 (0)