IOT: fix attribute addition when updating thing groups (#5318)
This commit is contained in:
parent
f47d9eefef
commit
7681fe8706
@ -1301,14 +1301,17 @@ class IoTBackend(BaseBackend):
|
|||||||
if attribute_payload is not None and "attributes" in attribute_payload:
|
if attribute_payload is not None and "attributes" in attribute_payload:
|
||||||
do_merge = attribute_payload.get("merge", False)
|
do_merge = attribute_payload.get("merge", False)
|
||||||
attributes = attribute_payload["attributes"]
|
attributes = attribute_payload["attributes"]
|
||||||
if not do_merge:
|
if attributes:
|
||||||
thing_group.thing_group_properties["attributePayload"][
|
# might not exist yet, for example when the thing group was created without attributes
|
||||||
"attributes"
|
current_attribute_payload = (
|
||||||
] = attributes
|
thing_group.thing_group_properties.setdefault(
|
||||||
else:
|
"attributePayload", {"attributes": {}}
|
||||||
thing_group.thing_group_properties["attributePayload"][
|
)
|
||||||
"attributes"
|
)
|
||||||
].update(attributes)
|
if not do_merge:
|
||||||
|
current_attribute_payload["attributes"] = attributes
|
||||||
|
else:
|
||||||
|
current_attribute_payload["attributes"].update(attributes)
|
||||||
elif attribute_payload is not None and "attributes" not in attribute_payload:
|
elif attribute_payload is not None and "attributes" not in attribute_payload:
|
||||||
thing_group.attributes = {}
|
thing_group.attributes = {}
|
||||||
if "thingGroupDescription" in thing_group_properties:
|
if "thingGroupDescription" in thing_group_properties:
|
||||||
|
@ -615,3 +615,73 @@ def test_thing_group_updates_description():
|
|||||||
thing_group.should.have.key("thingGroupProperties").which.should.have.key(
|
thing_group.should.have.key("thingGroupProperties").which.should.have.key(
|
||||||
"thingGroupDescription"
|
"thingGroupDescription"
|
||||||
).which.should.equal(new_description)
|
).which.should.equal(new_description)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_iot
|
||||||
|
def test_thing_group_update_with_no_previous_attributes_no_merge():
|
||||||
|
client = boto3.client("iot", region_name="ap-northeast-1")
|
||||||
|
name = "my-group-name"
|
||||||
|
client.create_thing_group(thingGroupName=name)
|
||||||
|
|
||||||
|
client.update_thing_group(
|
||||||
|
thingGroupName=name,
|
||||||
|
thingGroupProperties={
|
||||||
|
"attributePayload": {
|
||||||
|
"attributes": {
|
||||||
|
"key1": "val01",
|
||||||
|
},
|
||||||
|
"merge": False,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
updated_thing_group = client.describe_thing_group(thingGroupName=name)
|
||||||
|
updated_thing_group.should.have.key("thingGroupProperties").which.should.have.key(
|
||||||
|
"attributePayload"
|
||||||
|
).which.should.have.key("attributes").which.should.equal({"key1": "val01"})
|
||||||
|
|
||||||
|
|
||||||
|
@mock_iot
|
||||||
|
def test_thing_group_update_with_no_previous_attributes_with_merge():
|
||||||
|
client = boto3.client("iot", region_name="ap-northeast-1")
|
||||||
|
name = "my-group-name"
|
||||||
|
client.create_thing_group(thingGroupName=name)
|
||||||
|
|
||||||
|
client.update_thing_group(
|
||||||
|
thingGroupName=name,
|
||||||
|
thingGroupProperties={
|
||||||
|
"attributePayload": {
|
||||||
|
"attributes": {
|
||||||
|
"key1": "val01",
|
||||||
|
},
|
||||||
|
"merge": True,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
updated_thing_group = client.describe_thing_group(thingGroupName=name)
|
||||||
|
updated_thing_group.should.have.key("thingGroupProperties").which.should.have.key(
|
||||||
|
"attributePayload"
|
||||||
|
).which.should.have.key("attributes").which.should.equal({"key1": "val01"})
|
||||||
|
|
||||||
|
|
||||||
|
@mock_iot
|
||||||
|
def test_thing_group_updated_with_empty_attributes_no_merge_no_attributes_added():
|
||||||
|
client = boto3.client("iot", region_name="ap-northeast-1")
|
||||||
|
name = "my-group-name"
|
||||||
|
client.create_thing_group(thingGroupName=name)
|
||||||
|
|
||||||
|
client.update_thing_group(
|
||||||
|
thingGroupName=name,
|
||||||
|
thingGroupProperties={
|
||||||
|
"attributePayload": {
|
||||||
|
"attributes": {},
|
||||||
|
"merge": False,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
updated_thing_group = client.describe_thing_group(thingGroupName=name)
|
||||||
|
updated_thing_group.should.have.key(
|
||||||
|
"thingGroupProperties"
|
||||||
|
).which.should_not.have.key("attributePayload")
|
||||||
|
Loading…
Reference in New Issue
Block a user