Add model

This commit is contained in:
Tyeth Gundry 2025-05-22 17:25:29 +01:00
parent a3fd30ac80
commit f7f9d1ba5a
2 changed files with 25 additions and 2 deletions

View file

@ -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)

View file

@ -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'))