followup change: fix dummy webserver

the dummy server was no longer working after server rework
This commit is contained in:
l_samenv
2025-03-19 11:47:57 +01:00
committed by Markus Zolliker
parent 11a475149a
commit bc9c1361e5
3 changed files with 49 additions and 20 deletions

View File

@ -1,9 +1,32 @@
#!/usr/bin/env python3
import sys
import argparse
import pathlib
sys.path.insert(0, str((pathlib.Path(__file__) / '..').resolve()))
import webserver
from dummy import SecopDummyInstrument
from webserver import server
from base import Client
from dummy import DummyGraph, DummyHistory
from secop import SecopInteractor
webserver.instrument = webserver.main(SecopDummyInstrument)
def parseArgv(argv):
parser = argparse.ArgumentParser(
description="start webserver with dummy history and SECoP interaction",
)
parser.add_argument("port",
type=str,
default='8888',
nargs='?',
help="port number to serve")
parser.add_argument('-u',
'--uri',
action='store',
help='SECoP uri',
default='localhost:5000')
return parser.parse_args(argv)
args = parseArgv(sys.argv[1:])
server.run(int(args.port), DummyHistory(args.uri), DummyGraph, Client, single_instrument='dummy', secop=SecopInteractor)

View File

@ -2,12 +2,18 @@ import time
import math
import io
from colors import assign_colors_to_curves
from secop import SecopInstrument, SecopClient
from base import get_abs_time
from secop import SecopClient
from base import get_abs_time, HandlerBase
class DummyGraph:
def __init__(self):
class DummyGraph(HandlerBase):
def __init__(self, server, instrument, device, tags):
super().__init__() # put methods w_... to handlers
self.handlers['graphpoll'] = self.graphpoll
self.server = server
self.instrument = instrument
self.device = device
self.tags = tags
self.blocks = []
self.phase = {}
self.end_time = 0
@ -158,11 +164,7 @@ class DummyGraph:
return None
class SecopDummyClient(SecopClient, DummyGraph):
def __init__(self, instrument):
SecopClient.__init__(self, instrument)
DummyGraph.__init__(self)
class SecopDummyClient(SecopClient):
def poll(self):
messages = super().poll()
msg = self.graphpoll()
@ -171,8 +173,9 @@ class SecopDummyClient(SecopClient, DummyGraph):
return messages
class SecopDummyInstrument(SecopInstrument):
def new_client(self):
return self.register(SecopDummyClient(self))
class DummyHistory:
def __init__(self, stream):
self.stream = stream
def get_streams(self, instrument=None, **kwds):
return {self.stream: {'device': 'dummy'}}

View File

@ -29,18 +29,21 @@ class SecopInteractor(SecopClient):
self.module_updates = set()
self.param_updates = set()
self.updates = {}
self.connect()
self.register_callback(None, updateItem=self.updateItem)
def add_main_components(self, components):
# todo: treat non Readable classes correctly
components.extend(dict(type='rdlink', name=name + ':value', title=name)
for name in self.modules)
for name, desc in self.modules.items():
component = dict(type='rdlink', name=f'{name}:value', title=name)
if 'status' in desc['parameters']:
component['statusname'] = f'{name}:status'
components.append(component)
self.param_updates.add('value')
self.param_updates.add('status')
def get_components(self, path):
module = self.modules[path]
self.module_updates.add(path) # TODO: remove others?
# logging.info('MP %r', path)
parameters = dict(module["parameters"])
components = []
for name in SecopInteractor.skip_par: