settings: store None in persister for non-persisting settings
This commit is contained in:
parent
055c8776cc
commit
fb74e3b657
|
@ -255,10 +255,10 @@ class Setting:
|
||||||
# maybe we have something in the configuration.
|
# maybe we have something in the configuration.
|
||||||
self._value = self._device.persister.get(self.name)
|
self._value = self._device.persister.get(self.name)
|
||||||
if cached and self._value is not None:
|
if cached and self._value is not None:
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
# If this is a new device (or a new setting for an old device),
|
# If this is a new device (or a new setting for an old device),
|
||||||
# make sure to save its current value for the next time.
|
# make sure to save its current value for the next time.
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
|
|
||||||
def read(self, cached=True):
|
def read(self, cached=True):
|
||||||
assert hasattr(self, '_value')
|
assert hasattr(self, '_value')
|
||||||
|
@ -275,18 +275,18 @@ class Setting:
|
||||||
reply = self._rw.read(self._device)
|
reply = self._rw.read(self._device)
|
||||||
if reply:
|
if reply:
|
||||||
self._value = self._validator.validate_read(reply)
|
self._value = self._validator.validate_read(reply)
|
||||||
if self.persist and self._device.persister and self.name not in self._device.persister:
|
if self._device.persister and self.name not in self._device.persister:
|
||||||
# Don't update the persister if it already has a value,
|
# Don't update the persister if it already has a value,
|
||||||
# otherwise the first read might overwrite the value we wanted.
|
# otherwise the first read might overwrite the value we wanted.
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
def _pre_write(self, save=True):
|
def _pre_write(self, save=True):
|
||||||
# Remember the value we're trying to set, even if the write fails.
|
# Remember the value we're trying to set, even if the write fails.
|
||||||
# This way even if the device is offline or some other error occurs,
|
# This way even if the device is offline or some other error occurs,
|
||||||
# the last value we've tried to write is remembered in the configuration.
|
# the last value we've tried to write is remembered in the configuration.
|
||||||
if self.persist and self._device.persister and save:
|
if self._device.persister and save:
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
|
|
||||||
def write(self, value, save=True):
|
def write(self, value, save=True):
|
||||||
assert hasattr(self, '_value')
|
assert hasattr(self, '_value')
|
||||||
|
@ -371,10 +371,10 @@ class Settings(Setting):
|
||||||
if reply:
|
if reply:
|
||||||
reply_map[int(key)] = self._validator.validate_read(reply, key)
|
reply_map[int(key)] = self._validator.validate_read(reply, key)
|
||||||
self._value = reply_map
|
self._value = reply_map
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
# Don't update the persister if it already has a value,
|
# Don't update the persister if it already has a value,
|
||||||
# otherwise the first read might overwrite the value we wanted.
|
# otherwise the first read might overwrite the value we wanted.
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
def read_key(self, key, cached=True):
|
def read_key(self, key, cached=True):
|
||||||
|
@ -392,8 +392,8 @@ class Settings(Setting):
|
||||||
reply = self._rw.read(self._device, key)
|
reply = self._rw.read(self._device, key)
|
||||||
if reply:
|
if reply:
|
||||||
self._value[int(key)] = self._validator.validate_read(reply, key)
|
self._value[int(key)] = self._validator.validate_read(reply, key)
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value[int(key)]
|
return self._value[int(key)]
|
||||||
|
|
||||||
def write(self, map, save=True):
|
def write(self, map, save=True):
|
||||||
|
@ -470,10 +470,10 @@ class LongSettings(Setting):
|
||||||
if reply:
|
if reply:
|
||||||
reply_map[int(item)] = self._validator.validate_read_item(reply, item)
|
reply_map[int(item)] = self._validator.validate_read_item(reply, item)
|
||||||
self._value = reply_map
|
self._value = reply_map
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
# Don't update the persister if it already has a value,
|
# Don't update the persister if it already has a value,
|
||||||
# otherwise the first read might overwrite the value we wanted.
|
# otherwise the first read might overwrite the value we wanted.
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
def read_item(self, item, cached=True):
|
def read_item(self, item, cached=True):
|
||||||
|
@ -492,8 +492,8 @@ class LongSettings(Setting):
|
||||||
reply = self._rw.read(self._device, r)
|
reply = self._rw.read(self._device, r)
|
||||||
if reply:
|
if reply:
|
||||||
self._value[int(item)] = self._validator.validate_read_item(reply, item)
|
self._value[int(item)] = self._validator.validate_read_item(reply, item)
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value[int(item)]
|
return self._value[int(item)]
|
||||||
|
|
||||||
def write(self, map, save=True):
|
def write(self, map, save=True):
|
||||||
|
@ -562,10 +562,10 @@ class BitFieldSetting(Setting):
|
||||||
if reply:
|
if reply:
|
||||||
reply_map = self._validator.validate_read(reply)
|
reply_map = self._validator.validate_read(reply)
|
||||||
self._value = reply_map
|
self._value = reply_map
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
# Don't update the persister if it already has a value,
|
# Don't update the persister if it already has a value,
|
||||||
# otherwise the first read might overwrite the value we wanted.
|
# otherwise the first read might overwrite the value we wanted.
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
def _do_read(self):
|
def _do_read(self):
|
||||||
|
@ -587,8 +587,8 @@ class BitFieldSetting(Setting):
|
||||||
reply = self._do_read_key(key)
|
reply = self._do_read_key(key)
|
||||||
if reply:
|
if reply:
|
||||||
self._value = self._validator.validate_read(reply)
|
self._value = self._validator.validate_read(reply)
|
||||||
if self.persist and getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
if getattr(self._device, 'persister', None) and self.name not in self._device.persister:
|
||||||
self._device.persister[self.name] = self._value
|
self._device.persister[self.name] = self._value if self.persist else None
|
||||||
return self._value[int(key)]
|
return self._value[int(key)]
|
||||||
|
|
||||||
def _do_read_key(self, key):
|
def _do_read_key(self, key):
|
||||||
|
|
Loading…
Reference in New Issue