Fixed potential change during iteration

pull/74/merge
Mark Qvist 2025-04-05 14:39:21 +02:00
parent 1054ddf1c4
commit 6a56d02afb
1 changed files with 13 additions and 4 deletions

View File

@ -120,9 +120,11 @@ class Telemeter():
def stop_all(self): def stop_all(self):
if not self.from_packed: if not self.from_packed:
for sensor in self.sensors: sensors = self.sensors.copy()
for sensor in sensors:
if not sensor == "time": if not sensor == "time":
self.sensors[sensor].stop() self.sensors[sensor].stop()
del sensors
def read(self, sensor): def read(self, sensor):
if not self.from_packed: if not self.from_packed:
@ -137,31 +139,38 @@ class Telemeter():
def read_all(self): def read_all(self):
readings = {} readings = {}
for sensor in self.sensors: sensors = self.sensors.copy()
for sensor in sensors:
if self.sensors[sensor].active: if self.sensors[sensor].active:
if not self.from_packed: if not self.from_packed:
readings[sensor] = self.sensors[sensor].data readings[sensor] = self.sensors[sensor].data
else: else:
readings[sensor] = self.sensors[sensor]._data readings[sensor] = self.sensors[sensor]._data
del sensors
return readings return readings
def packed(self): def packed(self):
packed = {} packed = {}
packed[Sensor.SID_TIME] = int(time.time()) packed[Sensor.SID_TIME] = int(time.time())
for sensor in self.sensors: sensors = self.sensors.copy()
for sensor in sensors:
if self.sensors[sensor].active: if self.sensors[sensor].active:
packed[self.sensors[sensor].sid] = self.sensors[sensor].pack() packed[self.sensors[sensor].sid] = self.sensors[sensor].pack()
del sensors
return umsgpack.packb(packed) return umsgpack.packb(packed)
def render(self, relative_to=None): def render(self, relative_to=None):
rendered = [] rendered = []
for sensor in self.sensors: sensors = self.sensors.copy()
for sensor in sensors:
s = self.sensors[sensor] s = self.sensors[sensor]
if s.active: if s.active:
r = s.render(relative_to) r = s.render(relative_to)
if r: rendered.append(r) if r: rendered.append(r)
del sensors
return rendered return rendered
def check_permission(self, permission): def check_permission(self, permission):