server: add option to dynamically create devices
add module which scans a connection and registers new devices depending on the answer. * change module initialization to demand-based * move code from server to dispatcher - remove intermediate step in Attached __get__ TODO: factor out dispatcher (regards to playground) discuss factoring out of module creation code from server AND dispatcher Change-Id: I7af959b99a84c291c526aac067a4e2bf3cd741d4 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31470 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de> Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
This commit is contained in:
@ -24,10 +24,33 @@
|
||||
import random
|
||||
|
||||
from frappy.datatypes import FloatRange, StringType, ValueType, TupleOf, StructOf, ArrayOf
|
||||
from frappy.modules import Communicator, Drivable, Parameter, Property, Readable, Module
|
||||
from frappy.modules import Communicator, Drivable, Parameter, Property, Readable, Module, Attached
|
||||
from frappy.params import Command
|
||||
from frappy.dynamic import Pinata
|
||||
from frappy.errors import RangeError
|
||||
|
||||
class Pin(Pinata):
|
||||
def scanModules(self):
|
||||
yield ('pin_a', {'cls': LN2, 'description':'hi'})
|
||||
yield ('pin_b', {'cls': LN2, 'description':'hi'})
|
||||
|
||||
class RecPin(Pinata):
|
||||
def scanModules(self):
|
||||
yield ('rec_a', {'cls': RecPinInner, 'description':'hi'})
|
||||
yield ('rec_b', {'cls': RecPinInner, 'description':'hi'})#, 'idx':'_2'})
|
||||
|
||||
class RecPinInner(Pinata):
|
||||
idx = Property('', StringType(), default='')
|
||||
def scanModules(self):
|
||||
yield ('pin_pin_a' + self.idx, {'cls': Mapped, 'description':'recursive!', 'choices':['A', 'B']})
|
||||
yield ('pin_pin_b' + self.idx, {'cls': Mapped, 'description':'recursive!', 'choices':['A', 'B']})
|
||||
|
||||
|
||||
class WithAtt(Readable):
|
||||
att = Attached()
|
||||
|
||||
def read_value(self):
|
||||
return self.att.read_value()
|
||||
|
||||
class LN2(Readable):
|
||||
"""Just a readable.
|
||||
|
Reference in New Issue
Block a user