def test_property_fragment(): """Property fragment dictionaries can be represented and serialized.""" init = { "description": "Shows the current status of the lamp", "readOnly": True, "observable": False, "type": "string", "security": [{ "scheme": "nosec" }], "forms": [{ "href": "coaps://mylamp.example.com/status", "contentType": "application/json" }] } prop_fragment = PropertyFragmentDict(init) assert prop_fragment.read_only == init["readOnly"] assert prop_fragment.write_only is False assert prop_fragment.observable == init["observable"] assert isinstance(prop_fragment.data_schema, DataSchemaDict) assert prop_fragment.data_schema.type == init["type"] assert len(prop_fragment.forms) == len(init["forms"]) assert prop_fragment.forms[0].href == init["forms"][0]["href"] assert prop_fragment.security[0].scheme == init["security"][0]["scheme"] assert json.dumps(prop_fragment.to_dict()) with pytest.raises(Exception): PropertyFragmentDict({})
def add_property(self, name, property_init, value=None): """Adds a Property defined by the argument and updates the Thing Description. Takes an instance of ThingPropertyInit as argument.""" if isinstance(property_init, dict): property_init = PropertyFragmentDict(property_init) prop = Property(thing=self._thing, name=name, init_dict=property_init) self._thing.add_interaction(prop) self._set_property_value(prop, value) event_data = ThingDescriptionChangeEventInit( td_change_type=TDChangeType.PROPERTY, method=TDChangeMethod.ADD, name=name, data=property_init.to_dict(), description=ThingDescription.from_thing(self.thing).to_dict()) self._events_stream.on_next( ThingDescriptionChangeEmittedEvent(init=event_data))