diff --git a/Adafruit_IO/model.py b/Adafruit_IO/model.py index 51d5633..74ef33e 100644 --- a/Adafruit_IO/model.py +++ b/Adafruit_IO/model.py @@ -41,6 +41,10 @@ DATA_FIELDS = [ 'created_epoch', 'lon', 'ele'] +# List of fields/properties for GroupFeedData object +GROUPFEEDDATA_FIELDS = [ 'value', + 'key'] + FEED_FIELDS = [ 'name', 'key', 'id', @@ -95,12 +99,14 @@ Group = namedtuple('Group', GROUP_FIELDS) Dashboard = namedtuple('Dashboard', DASHBOARD_FIELDS) Block = namedtuple('Block', BLOCK_FIELDS) Layout = namedtuple('Layout', LAYOUT_FIELDS) +GroupFeedData = namedtuple('GroupFeedData', GROUPFEEDDATA_FIELDS) # Magic incantation to make all parameters to the initializers optional with a # default value of None. Group.__new__.__defaults__ = tuple(None for x in GROUP_FIELDS) Data.__new__.__defaults__ = tuple(None for x in DATA_FIELDS) Layout.__new__.__defaults__ = tuple(None for x in LAYOUT_FIELDS) +GroupFeedData.__new__.__defaults__ = tuple(None for x in GROUPFEEDDATA_FIELDS) # explicitly set dashboard values so that 'color_mode' is 'dark' Dashboard.__new__.__defaults__ = (None, None, None, False, "dark", True, None, None) @@ -147,3 +153,4 @@ Group.from_dict = classmethod(_group_from_dict) Dashboard.from_dict = classmethod(_dashboard_from_dict) Block.from_dict = classmethod(_from_dict) Layout.from_dict = classmethod(_from_dict) +GroupFeedData.from_dict = classmethod(_from_dict) diff --git a/tests/test_model.py b/tests/test_model.py index 02b105e..ade1c01 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from Adafruit_IO import Data, Feed, Group, Dashboard, Block, Layout +from Adafruit_IO import Data, Feed, Group, Dashboard, Block, Layout, GroupFeedData import base @@ -59,7 +59,7 @@ class TestData(base.IOTestCase): self.assertIsNone(feed.license) self.assertIsNone(feed.status_notify) self.assertIsNone(feed.status_timeout) - + def test_group_properties_are_optional(self): group = Group(name="foo") self.assertEqual(group.name, 'foo') @@ -116,3 +116,19 @@ class TestData(base.IOTestCase): self.assertIsNone(data.expiration) self.assertIsNone(data.position) self.assertIsNone(data.id) + + +class TestGroupFeedData(base.IOTestCase): + + def test_groupfeeddata_properties_are_optional(self): + """GroupFeedData fields have optional properties + """ + data = GroupFeedData(value='foo', key='test_key') + self.assertEqual(data.value, 'foo') + self.assertEqual(data.key, 'test_key') + + def test_groupfeeddata_from_dict_ignores_unknown_items(self): + data = GroupFeedData.from_dict({'value': 'foo', 'key': 'test_key', 'unknown_param': 42}) + self.assertEqual(data.value, 'foo') + self.assertEqual(data.key, 'test_key') + self.assertFalse(data.has_key('unknown_param'))