Try an explicit close on init failure

This commit is contained in:
Dave Jones
2017-06-25 21:48:48 +01:00
parent 53a8200507
commit 1ce80a8151

View File

@@ -315,6 +315,7 @@ class CompositeDevice(Device):
self._named = frozendict({})
self._namedtuple = None
self._order = kwargs.pop('_order', None)
try:
if self._order is None:
self._order = sorted(kwargs.keys())
else:
@@ -329,6 +330,11 @@ class CompositeDevice(Device):
self._named = frozendict(kwargs)
self._namedtuple = namedtuple('%sValue' % self.__class__.__name__, chain(
('device_%d' % i for i in range(len(args))), self._order))
except:
for dev in chain(args, kwargs.values()):
if isinstance(dev, Device):
dev.close()
raise
self._all = args + tuple(kwargs[v] for v in self._order)
super(CompositeDevice, self).__init__()
@@ -376,6 +382,7 @@ class CompositeDevice(Device):
if self._all:
for device in self._all:
device.close()
self._all = ()
@property
def closed(self):