Skip to content
This repository has been archived by the owner on May 30, 2020. It is now read-only.

Commit

Permalink
More helper functions and tests on Device and DeviceList
Browse files Browse the repository at this point in the history
  • Loading branch information
ercpe committed Dec 27, 2015
1 parent c0a78d6 commit f63272d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
20 changes: 8 additions & 12 deletions src/pymax/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,15 @@ def __contains__(self, item):
return False

def get(self, **kwargs):
if not kwargs:
return None

for item in self:
for k, v in kwargs.items():
if getattr(item, k) != v:
break
return item
if all((item.get(k, None) == v for k, v in kwargs.items())):
return item

def update(self, **kwargs):
instance = None
for attr in ('rf_address', 'serial', 'name'):
value = kwargs.get(attr, None)
if value:
instance = self.get(**kwargs)
if instance:
break
instance = self.get(**dict(((k, v) for k, v in kwargs.items() if k in ('rf_address', 'serial', 'name'))))

if instance:
for k, v in kwargs.items():
Expand All @@ -103,7 +98,8 @@ class Device(dict):
def __getattr__(self, item):
if item in self:
return self[item]
return super(Device, self).__getattr__(item)
raise AttributeError("%s has no attribute %s" % (self.__class__.__name__, item))
#return super(Device, self).__getattr__(item)

def __eq__(self, other):
if isinstance(other, dict) or isinstance(other, Device):
Expand Down
13 changes: 13 additions & 0 deletions tests/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ def test_update_add(self):
Device(rf_address=RFAddr('122b65'), serial='123', name='foobar')
])

def test_update(self):
for k, v in (
('rf_address', '122b65'),
('name', 'foobar'),
Expand All @@ -74,6 +75,18 @@ def test_update_add(self):
Device(rf_address=RFAddr('122b65'), serial='123', name='foobar', room_id=1)
])

def test_get(self):
dev = Device(rf_address=RFAddr('122b65'), serial='123', name='foobar')
dl = DeviceList([dev])

self.assertIsNone(dl.get())

self.assertEqual(dl.get(rf_address='122b65'), dev)
self.assertEqual(dl.get(rf_address='122b65', serial='123'), dev)
self.assertEqual(dl.get(rf_address='122b65', serial='123', name='foobar'), dev)
self.assertIsNone(dl.get(rf_address='122b65', serial='123', name='foobar', blah='blubb'))
self.assertIsNone(dl.get(rf_address='foo'))


class RFAddrTest(unittest.TestCase):

Expand Down

0 comments on commit f63272d

Please sign in to comment.