Merge pull request #273 from lurch/composite_device_check

Check that the sub-devices of CompositeDevice are actually Device instances
This commit is contained in:
Dave Jones
2016-04-10 15:50:53 +01:00
4 changed files with 12 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ from .exc import (
CompositeDeviceError,
CompositeDeviceBadName,
CompositeDeviceBadOrder,
CompositeDeviceBadDevice,
SPIError,
SPIBadArgs,
EnergenieSocketMissing,

View File

@@ -23,6 +23,7 @@ from .exc import (
DeviceClosed,
CompositeDeviceBadName,
CompositeDeviceBadOrder,
CompositeDeviceBadDevice,
GPIOPinMissing,
GPIOPinInUse,
GPIODeviceClosed,
@@ -274,6 +275,9 @@ class CompositeDevice(Device):
for name in set(self._order) & set(dir(self)):
raise CompositeDeviceBadName('%s is a reserved name' % name)
self._all = args + tuple(kwargs[v] for v in self._order)
for dev in self._all:
if not isinstance(dev, Device):
raise CompositeDeviceBadDevice("%s doesn't inherit from Device" % dev)
self._named = kwargs
self._tuple = namedtuple('%sValue' % self.__class__.__name__, chain(
(str(i) for i in range(len(args))), self._order),

View File

@@ -31,6 +31,9 @@ class CompositeDeviceBadName(CompositeDeviceError, ValueError):
class CompositeDeviceBadOrder(CompositeDeviceError, ValueError):
"Error raised when a composite device is constructed with an incomplete order"
class CompositeDeviceBadDevice(CompositeDeviceError, ValueError):
"Error raised when a composite device is constructed with an object that doesn't inherit from :class:`Device`"
class EnergenieSocketMissing(CompositeDeviceError, ValueError):
"Error raised when socket number is not specified"