merged BSSourceBase, BSChannel, BSChannels -> BSSource; unpack right before collect
This commit is contained in:
@@ -16,6 +16,10 @@ class BSSensor(Sensor):
|
||||
self.thread = thread = BSMonitorThread([ID], self._collect, **kwargs)
|
||||
thread.start()
|
||||
|
||||
def _collect(self, data):
|
||||
value = data[self.ID]
|
||||
super()._collect(value)
|
||||
|
||||
def get_current_value(self):
|
||||
return self.thread.value
|
||||
|
||||
@@ -43,7 +47,7 @@ class BSMonitorThread(Thread):
|
||||
self.use_callback = Event()
|
||||
self.running = Event()
|
||||
self.value = None
|
||||
self.source = make_source(names, **kwargs)
|
||||
self.source = BSSource(names, **kwargs)
|
||||
|
||||
def run(self):
|
||||
use_callback = self.use_callback
|
||||
@@ -69,24 +73,17 @@ class BSMonitorThread(Thread):
|
||||
|
||||
|
||||
|
||||
def make_source(names, **kwargs):
|
||||
if len(names) == 1:
|
||||
name = names[0]
|
||||
return BSChannel(name, **kwargs)
|
||||
else:
|
||||
return BSChannels(names, **kwargs)
|
||||
class BSSource:
|
||||
|
||||
|
||||
|
||||
class BSSourceBase:
|
||||
|
||||
def __init__(self, names, retry_desc, receive_timeout=-1, **kwargs):
|
||||
def __init__(self, names, receive_timeout=-1, **kwargs):
|
||||
retry_desc = f"connect to BS channels {names}"
|
||||
RetrySource = retry(Source, retry_desc)
|
||||
self.source = RetrySource(channels=names, receive_timeout=receive_timeout, **kwargs)
|
||||
|
||||
def receive(self):
|
||||
def get(self):
|
||||
with ignore_log_msg("bsread.data.helpers", lvl="warning", msg=MSG_MISSING_TYPE):
|
||||
return self.source.receive()
|
||||
msg = self.source.receive()
|
||||
return repack(msg)
|
||||
|
||||
def __enter__(self):
|
||||
self.source.connect()
|
||||
@@ -97,39 +94,6 @@ class BSSourceBase:
|
||||
|
||||
|
||||
|
||||
class BSChannel(BSSourceBase):
|
||||
|
||||
def __init__(self, name, **kwargs):
|
||||
self.name = name
|
||||
names = [name]
|
||||
retry_desc = f"connect to BS channel \"{name}\""
|
||||
super().__init__(names, retry_desc, **kwargs)
|
||||
|
||||
def get(self):
|
||||
msg = self.receive()
|
||||
return unpack(msg, self.name)
|
||||
|
||||
|
||||
|
||||
class BSChannels(BSSourceBase):
|
||||
|
||||
def __init__(self, names, **kwargs):
|
||||
self.names = names
|
||||
retry_desc = f"connect to BS channels \"{names}\""
|
||||
super().__init__(names, retry_desc, **kwargs)
|
||||
|
||||
def get(self):
|
||||
msg = self.receive()
|
||||
return repack(msg)
|
||||
|
||||
|
||||
|
||||
def unpack(msg, name):
|
||||
data = msg.data.data
|
||||
value = data[name].value
|
||||
return value
|
||||
|
||||
|
||||
def repack(msg):
|
||||
data = msg.data.data
|
||||
pid = msg.data.pulse_id
|
||||
|
||||
Reference in New Issue
Block a user