Change-Id: I120865555596b2671c6e8aa65841f3ea984c7e03
This commit is contained in:
Enrico Faulhaber 2017-09-11 15:39:26 +02:00
parent 357056d478
commit 5992ba3c35
13 changed files with 49 additions and 49 deletions

View File

@ -188,7 +188,7 @@ class Client(object):
# XXX: further notification-callbacks needed ??? # XXX: further notification-callbacks needed ???
def populateNamespace(self, namespace): def populateNamespace(self, namespace):
self.connection.send(ListDevicesRequest()) self.connection.send(ListModulesRequest())
# reply = self.connection.read() # reply = self.connection.read()
# self.log.info("found devices %r" % reply) # self.log.info("found devices %r" % reply)
# create proxies, populate cache.... # create proxies, populate cache....

View File

@ -86,8 +86,8 @@ class DemoEncoder(MessageEncoder):
def _encode_ProtocollError(self, msgtype, msgname, msgargs): def _encode_ProtocollError(self, msgtype, msgname, msgargs):
return '~ProtocolError~ %s.%s.%r' % (msgtype, msgname, msgargs) return '~ProtocolError~ %s.%s.%r' % (msgtype, msgname, msgargs)
def _encode_NoSuchDeviceError(self, device): def _encode_NoSuchModuleError(self, device):
return '~NoSuchDeviceError~ %s' % device return '~NoSuchModuleError~ %s' % device
def _encode_NoSuchParamError(self, device, param): def _encode_NoSuchParamError(self, device, param):
return '~NoSuchParameterError~ %s:%s' % (device, param) return '~NoSuchParameterError~ %s:%s' % (device, param)

View File

@ -344,13 +344,13 @@ class DemoEncoder_MZ(MessageEncoder):
return '\n'.join(r) return '\n'.join(r)
return { return {
ListDevicesRequest: lambda msg: "list", ListModulesRequest: lambda msg: "list",
ListDevicesReply: lambda msg: "list=%s" % ','.join(sorted(msg.list_of_devices)), ListModulesReply: lambda msg: "list=%s" % ','.join(sorted(msg.list_of_devices)),
GetVersionRequest: lambda msg: "version", GetVersionRequest: lambda msg: "version",
GetVersionReply: lambda msg: "version=%r" % msg.version, GetVersionReply: lambda msg: "version=%r" % msg.version,
ListDeviceParamsRequest: lambda msg: "list %s" % msg.device, ListModuleParamsRequest: lambda msg: "list %s" % msg.device,
# do not include a '.' as param name! # do not include a '.' as param name!
ListDeviceParamsReply: lambda msg: "list %s=%s" % (msg.device, ','.join(sorted(msg.params.keys()))), ListModuleParamsReply: lambda msg: "list %s=%s" % (msg.device, ','.join(sorted(msg.params.keys()))),
ReadValueRequest: lambda msg: "read %s" % msg.device, ReadValueRequest: lambda msg: "read %s" % msg.device,
ReadValueReply: lambda msg: "read %s=%r" % (msg.device, msg.value), ReadValueReply: lambda msg: "read %s=%r" % (msg.device, msg.value),
WriteValueRequest: lambda msg: "write %s=%r" % (msg.device, msg.value), WriteValueRequest: lambda msg: "write %s=%r" % (msg.device, msg.value),
@ -360,8 +360,8 @@ class DemoEncoder_MZ(MessageEncoder):
WriteParamRequest: lambda msg: "write %s:%s=%r" % (msg.device, msg.param, msg.value), WriteParamRequest: lambda msg: "write %s:%s=%r" % (msg.device, msg.param, msg.value),
WriteParamReply: lambda msg: "write %s:%s=%r" % (msg.device, msg.param, msg.readback_value), WriteParamReply: lambda msg: "write %s:%s=%r" % (msg.device, msg.param, msg.readback_value),
# extensions # extensions
ReadAllDevicesRequest: lambda msg: "", ReadAllModulesRequest: lambda msg: "",
ReadAllDevicesReply: lambda msg: "", ReadAllModulesReply: lambda msg: "",
ListParamPropsRequest: lambda msg: "readprop %s:%s" % (msg.device, msg.param), ListParamPropsRequest: lambda msg: "readprop %s:%s" % (msg.device, msg.param),
ListParamPropsReply: lambda msg: ["readprop %s:%s" % (msg.device, msg.param)] + ["%s:%s:%s=%s" % (msg.device, msg.param, k, v) for k, v in sorted(msg.props.items())], ListParamPropsReply: lambda msg: ["readprop %s:%s" % (msg.device, msg.param)] + ["%s:%s:%s=%s" % (msg.device, msg.param, k, v) for k, v in sorted(msg.props.items())],
ReadPropertyRequest: lambda msg: "readprop %s:%s:%s" % (msg.device, msg.param, msg.prop), ReadPropertyRequest: lambda msg: "readprop %s:%s:%s" % (msg.device, msg.param, msg.prop),
@ -379,7 +379,7 @@ class DemoEncoder_MZ(MessageEncoder):
ProtocolError: lambda msg: "", ProtocolError: lambda msg: "",
CommandFailedError: lambda msg: "error CommandError %s:%s %s" % (msg.device, msg.param, msg.error), CommandFailedError: lambda msg: "error CommandError %s:%s %s" % (msg.device, msg.param, msg.error),
NoSuchCommandError: lambda msg: "error NoSuchCommand %s:%s" % (msg.device, msg.param, msg.error), NoSuchCommandError: lambda msg: "error NoSuchCommand %s:%s" % (msg.device, msg.param, msg.error),
NoSuchDeviceError: lambda msg: "error NoSuchModule %s" % msg.device, NoSuchModuleError: lambda msg: "error NoSuchModule %s" % msg.device,
NoSuchParamError: lambda msg: "error NoSuchParameter %s:%s" % (msg.device, msg.param), NoSuchParamError: lambda msg: "error NoSuchParameter %s:%s" % (msg.device, msg.param),
ParamReadonlyError: lambda msg: "", ParamReadonlyError: lambda msg: "",
UnsupportedFeatureError: lambda msg: "", UnsupportedFeatureError: lambda msg: "",

View File

@ -72,7 +72,7 @@ ERRORREPLY = 'error' # +errorclass +json_extended_info
HELPREQUEST = 'help' # literal HELPREQUEST = 'help' # literal
HELPREPLY = 'helping' # +line number +json_text HELPREPLY = 'helping' # +line number +json_text
ERRORCLASSES = [ ERRORCLASSES = [
'NoSuchDevice', 'NoSuchModule',
'NoSuchParameter', 'NoSuchParameter',
'NoSuchCommand', 'NoSuchCommand',
'CommandFailed', 'CommandFailed',

View File

@ -72,7 +72,7 @@ ERRORREPLY = 'error' # +errorclass +json_extended_info
HELPREQUEST = 'help' # literal HELPREQUEST = 'help' # literal
HELPREPLY = 'helping' # +line number +json_text HELPREPLY = 'helping' # +line number +json_text
ERRORCLASSES = [ ERRORCLASSES = [
'NoSuchDevice', 'NoSuchModule',
'NoSuchParameter', 'NoSuchParameter',
'NoSuchCommand', 'NoSuchCommand',
'CommandFailed', 'CommandFailed',

View File

@ -55,7 +55,7 @@ class SCPEncoder(MessageEncoder):
r.append( r.append(
"replies copy the request and are prefixed with an errorcode:") "replies copy the request and are prefixed with an errorcode:")
r.append( r.append(
"0=OK,3=NoSuchCommand,4=NosuchDevice,5=NoSuchParam,6=SyntaxError,7=BadValue,8=Readonly,9=Forbidden,@=Async" "0=OK,3=NoSuchCommand,4=NosuchModule,5=NoSuchParam,6=SyntaxError,7=BadValue,8=Readonly,9=Forbidden,@=Async"
) )
r.append("extensions: @-prefix as error-code,") r.append("extensions: @-prefix as error-code,")
r.append("'<module>/+' subscribe all params of module") r.append("'<module>/+' subscribe all params of module")
@ -68,12 +68,12 @@ class SCPEncoder(MessageEncoder):
return '\n'.join(r) return '\n'.join(r)
return { return {
ListDevicesRequest: lambda msg: "devices?", ListModulesRequest: lambda msg: "devices?",
ListDevicesReply: lambda msg: "0 devices=" + repr(list(msg.list_of_devices)), ListModulesReply: lambda msg: "0 devices=" + repr(list(msg.list_of_devices)),
GetVersionRequest: lambda msg: "version?", GetVersionRequest: lambda msg: "version?",
GetVersionReply: lambda msg: "0 version=%r" % msg.version, GetVersionReply: lambda msg: "0 version=%r" % msg.version,
ListDeviceParamsRequest: lambda msg: "%s/parameters?" % msg.device, ListModuleParamsRequest: lambda msg: "%s/parameters?" % msg.device,
ListDeviceParamsReply: lambda msg: "0 %s/parameters=%r" % (msg.device, list(msg.params)), ListModuleParamsReply: lambda msg: "0 %s/parameters=%r" % (msg.device, list(msg.params)),
ReadValueRequest: lambda msg: "%s/value?" % msg.device, ReadValueRequest: lambda msg: "%s/value?" % msg.device,
ReadValueReply: lambda msg: "0 %s/value?%r" % (msg.device, msg.value), ReadValueReply: lambda msg: "0 %s/value?%r" % (msg.device, msg.value),
WriteValueRequest: lambda msg: "%s/value=%r" % (msg.device, msg.value), WriteValueRequest: lambda msg: "%s/value=%r" % (msg.device, msg.value),
@ -83,8 +83,8 @@ class SCPEncoder(MessageEncoder):
WriteParamRequest: lambda msg: "%s/%s=%r" % (msg.device, msg.param, msg.value), WriteParamRequest: lambda msg: "%s/%s=%r" % (msg.device, msg.param, msg.value),
WriteParamReply: lambda msg: "0 %s/%s=%r" % (msg.device, msg.param, msg.readback_value), WriteParamReply: lambda msg: "0 %s/%s=%r" % (msg.device, msg.param, msg.readback_value),
# extensions # extensions
ReadAllDevicesRequest: lambda msg: "*/value?", ReadAllModulesRequest: lambda msg: "*/value?",
ReadAllDevicesReply: lambda msg: ["0 %s/value=%s" % (m.device, m.value) for m in msg.readValueReplies], ReadAllModulesReply: lambda msg: ["0 %s/value=%s" % (m.device, m.value) for m in msg.readValueReplies],
ListParamPropsRequest: lambda msg: "%s/%s/?" % (msg.device, msg.param), ListParamPropsRequest: lambda msg: "%s/%s/?" % (msg.device, msg.param),
ListParamPropsReply: lambda msg: ["0 %s/%s/%s" % (msg.device, msg.param, p) for p in msg.props], ListParamPropsReply: lambda msg: ["0 %s/%s/%s" % (msg.device, msg.param, p) for p in msg.props],
AsyncDataUnit: lambda msg: "@ %s/%s=%r" % (msg.devname, msg.pname, msg.value), AsyncDataUnit: lambda msg: "@ %s/%s=%r" % (msg.devname, msg.pname, msg.value),
@ -106,7 +106,7 @@ class SCPEncoder(MessageEncoder):
# violates spec ! we would need the original request here.... # violates spec ! we would need the original request here....
NoSuchCommandError: lambda msg: "3 %s/%s" % (msg.device, msg.command), NoSuchCommandError: lambda msg: "3 %s/%s" % (msg.device, msg.command),
# violates spec ! we would need the original request here.... # violates spec ! we would need the original request here....
NoSuchDeviceError: lambda msg: "4 %s/ %r" % (msg.device, msg.error), NoSuchModuleError: lambda msg: "4 %s/ %r" % (msg.device, msg.error),
# violates spec ! we would need the original request here.... # violates spec ! we would need the original request here....
NoSuchParamError: lambda msg: "5 %s/%s %r" % (msg.device, msg.param, msg.error), NoSuchParamError: lambda msg: "5 %s/%s %r" % (msg.device, msg.param, msg.error),
# violates spec ! we would need the original request here.... # violates spec ! we would need the original request here....
@ -151,16 +151,16 @@ class SCPEncoder(MessageEncoder):
if dev is None: if dev is None:
# 'server' commands # 'server' commands
if par == 'devices': if par == 'devices':
return ListDevicesRequest() return ListModulesRequest()
elif par == 'version': elif par == 'version':
return GetVersionRequest() return GetVersionRequest()
return ProtocolError() return ProtocolError()
if par == 'parameters': if par == 'parameters':
return ListDeviceParamsRequest(dev) return ListModuleParamsRequest(dev)
elif par == 'value': elif par == 'value':
return ReadValueRequest(dev) return ReadValueRequest(dev)
elif dev == '*' and par == 'value': elif dev == '*' and par == 'value':
return ReadAllDevicesRequest() return ReadAllModulesRequest()
else: else:
return ReadParamRequest(dev, par) return ReadParamRequest(dev, par)
elif op == '=': elif op == '=':
@ -173,12 +173,12 @@ class SCPEncoder(MessageEncoder):
# reply # reply
if dev == '': if dev == '':
if par == 'devices': if par == 'devices':
return ListDevicesReply(val) return ListModulesReply(val)
elif par == 'version': elif par == 'version':
return GetVersionReply(val) return GetVersionReply(val)
return ProtocolError(encoded) return ProtocolError(encoded)
if par == 'parameters': if par == 'parameters':
return ListDeviceParamsReply(dev, val) return ListModuleParamsReply(dev, val)
if par == 'value': if par == 'value':
if op == '?': if op == '?':
return ReadValueReply(dev, val) return ReadValueReply(dev, val)
@ -201,7 +201,7 @@ class SCPEncoder(MessageEncoder):
elif err == '3': elif err == '3':
return NoSuchCommandError(dev, par) return NoSuchCommandError(dev, par)
elif err == '4': elif err == '4':
return NoSuchDeviceError(dev, encoded) return NoSuchModuleError(dev, encoded)
elif err == '5': elif err == '5':
return NoSuchParamError(dev, par, val) return NoSuchParamError(dev, par, val)
elif err == '7': elif err == '7':

View File

@ -75,7 +75,7 @@ class Message(object):
elif self.pars: elif self.pars:
r = 'Parameter' if self.pars != ['*'] else 'Parameters' r = 'Parameter' if self.pars != ['*'] else 'Parameters'
elif self.devs: elif self.devs:
r = 'Device' if self.devs != ['*'] else 'Devices' r = 'Module' if self.devs != ['*'] else 'Modules'
t = '' t = ''
if self.MSGTYPE in [ if self.MSGTYPE in [
@ -166,14 +166,14 @@ class HelpMessage(Message):
MSGTYPE = HELP MSGTYPE = HELP
class NoSuchDeviceError(ErrorMessage): class NoSuchModuleError(ErrorMessage):
def __init__(self, *devs): def __init__(self, *devs):
ErrorMessage.__init__( ErrorMessage.__init__(
self, self,
devs=devs, devs=devs,
errorstring="Device %r does not exist" % devs[0], errorstring="Module %r does not exist" % devs[0],
errortype='NoSuchDevice') errortype='NoSuchModule')
class NoSuchParamError(ErrorMessage): class NoSuchParamError(ErrorMessage):
@ -183,7 +183,7 @@ class NoSuchParamError(ErrorMessage):
self, self,
devs=(dev, ), devs=(dev, ),
params=params, params=params,
errorstring="Device %r has no parameter %r" % (dev, params[0]), errorstring="Module %r has no parameter %r" % (dev, params[0]),
errortype='NoSuchParam') errortype='NoSuchParam')
@ -194,7 +194,7 @@ class ParamReadonlyError(ErrorMessage):
self, self,
devs=(dev, ), devs=(dev, ),
params=params, params=params,
errorstring="Device %r, parameter %r is not writeable!" % errorstring="Module %r, parameter %r is not writeable!" %
(dev, params[0]), (dev, params[0]),
errortype='ParamReadOnly') errortype='ParamReadOnly')

View File

@ -115,9 +115,9 @@ class Server(object):
devname = section[len('device '):] devname = section[len('device '):]
devopts = dict(item for item in parser.items(section)) devopts = dict(item for item in parser.items(section))
if 'class' not in devopts: if 'class' not in devopts:
self.log.error('Device %s needs a class option!') self.log.error('Module %s needs a class option!')
raise ConfigError( raise ConfigError(
'cfgfile %r: Device %s needs a class option!' % 'cfgfile %r: Module %s needs a class option!' %
(self._cfgfile, devname)) (self._cfgfile, devname))
# try to import the class, raise if this fails # try to import the class, raise if this fails
devopts['class'] = get_class(devopts['class']) devopts['class'] = get_class(devopts['class'])
@ -141,15 +141,15 @@ class Server(object):
self._dispatcher = self._buildObject( self._dispatcher = self._buildObject(
'Dispatcher', Dispatcher, dict(equipment_id=equipment_id)) 'Dispatcher', Dispatcher, dict(equipment_id=equipment_id))
self._processInterfaceOptions(interfaceopts) self._processInterfaceOptions(interfaceopts)
self._processDeviceOptions(deviceopts) self._processModuleOptions(deviceopts)
def _processDeviceOptions(self, deviceopts): def _processModuleOptions(self, deviceopts):
# check devices opts by creating them # check devices opts by creating them
devs = [] devs = []
for devname, devopts in deviceopts: for devname, devopts in deviceopts:
devclass = devopts.pop('class') devclass = devopts.pop('class')
# create device # create device
self.log.debug('Creating Device %r' % devname) self.log.debug('Creating Module %r' % devname)
export = devopts.pop('export', '1') export = devopts.pop('export', '1')
export = export.lower() in ('1', 'on', 'true', 'yes') export = export.lower() in ('1', 'on', 'true', 'yes')
if 'default' in devopts: if 'default' in devopts:

View File

@ -23,7 +23,7 @@
import random import random
from secop.datatypes import EnumType, TupleOf, FloatRange, get_datatype, StringType from secop.datatypes import EnumType, TupleOf, FloatRange, get_datatype, StringType
from secop.modules import Readable, Device, Drivable, PARAM from secop.modules import Readable, Module, Drivable, PARAM
from secop.protocol import status from secop.protocol import status
try: try:

View File

@ -33,7 +33,7 @@ from secop.lib.sequence import SequencerMixin, Step
from secop.protocol import status from secop.protocol import status
from secop.datatypes import * from secop.datatypes import *
from secop.errors import SECoPServerError, ConfigError, ProgrammingError, CommunicationError, HardwareError, DisabledError from secop.errors import SECoPServerError, ConfigError, ProgrammingError, CommunicationError, HardwareError, DisabledError
from secop.modules import PARAM, CMD, OVERRIDE, Device, Readable, Drivable from secop.modules import PARAM, CMD, OVERRIDE, Module, Readable, Drivable
class GarfieldMagnet(SequencerMixin, Drivable): class GarfieldMagnet(SequencerMixin, Drivable):

View File

@ -41,7 +41,7 @@ from secop.lib import lazy_property, mkthread
from secop.protocol import status from secop.protocol import status
from secop.datatypes import * from secop.datatypes import *
from secop.errors import SECoPServerError, ConfigError, ProgrammingError, CommunicationError, HardwareError from secop.errors import SECoPServerError, ConfigError, ProgrammingError, CommunicationError, HardwareError
from secop.modules import PARAM, CMD, OVERRIDE, Device, Readable, Drivable from secop.modules import PARAM, CMD, OVERRIDE, Module, Readable, Drivable
# Only export these classes for 'from secop_mlz import *' # Only export these classes for 'from secop_mlz import *'
@ -148,7 +148,7 @@ def describe_dev_error(exc):
return fulldesc return fulldesc
class PyTangoDevice(Device): class PyTangoDevice(Module):
""" """
Basic PyTango device. Basic PyTango device.
@ -883,7 +883,7 @@ class PartialDigitalOutput(NamedDigitalOutput):
self.read_value() self.read_value()
class StringIO(PyTangoDevice, Device): class StringIO(PyTangoDevice, Module):
""" """
StringIO abstracts communication over a hardware bus that sends and StringIO abstracts communication over a hardware bus that sends and
receives strings. receives strings.

View File

@ -38,10 +38,10 @@ class SecopError(Exception):
Exception.__init__(self, message, text) Exception.__init__(self, message, text)
class UnknownDeviceError(SecopError): class UnknownModuleError(SecopError):
def __init__(self, message, args): def __init__(self, message, args):
SecopError.__init__(self, "NoSuchDevice", args[0]) SecopError.__init__(self, "NoSuchModule", args[0])
class UnknownParamError(SecopError): class UnknownParamError(SecopError):
@ -142,7 +142,7 @@ class SecopLineHandler(lineserver.LineHandler):
try: try:
return secNodeDict[d] return secNodeDict[d]
except KeyError: except KeyError:
raise UnknownDeviceError("", (d)) raise UnknownModuleError("", (d))
def get_param(self, d, p): def get_param(self, d, p):
if p == "": if p == "":
@ -228,7 +228,7 @@ class SecopLineHandler(lineserver.LineHandler):
try: try:
devList = wildcard(secNodeDict, path[0]) devList = wildcard(secNodeDict, path[0])
except KeyError as e: except KeyError as e:
raise UnknownDeviceError("", (e.message)) raise UnknownModuleError("", (e.message))
for d in devList: for d in devList:
devDict = secNodeDict[d] devDict = secNodeDict[d]
try: try:
@ -274,7 +274,7 @@ class SecopLineHandler(lineserver.LineHandler):
try: try:
devList = wildcard(secNodeDict, path[0]) devList = wildcard(secNodeDict, path[0])
except KeyError as e: except KeyError as e:
raise UnknownDeviceError("", (e.message)) raise UnknownModuleError("", (e.message))
for d in devList: for d in devList:
devDict = secNodeDict[d] devDict = secNodeDict[d]
if len(path) == 1: if len(path) == 1:

View File

@ -54,7 +54,7 @@ def test_describing_data_decode(clientobj):
assert {'modules':{}, 'properties':{}} == clientobj._decode_substruct(['modules'],{}) assert {'modules':{}, 'properties':{}} == clientobj._decode_substruct(['modules'],{})
describing_data = {'equipment_id': 'eid', describing_data = {'equipment_id': 'eid',
'modules': ['LN2', {'commands': [], 'modules': ['LN2', {'commands': [],
'interfaces': ['Readable', 'Device'], 'interfaces': ['Readable', 'Module'],
'parameters': ['value', {'datatype': ['double'], 'parameters': ['value', {'datatype': ['double'],
'description': 'current value', 'description': 'current value',
'readonly': True, 'readonly': True,
@ -69,7 +69,7 @@ def test_describing_data_decode(clientobj):
'readonly': True, 'readonly': True,
} }
}, },
'properties': {'interfaces': ['Readable', 'Device']} 'properties': {'interfaces': ['Readable', 'Module']}
} }
}, },
'properties': {'equipment_id': 'eid', 'properties': {'equipment_id': 'eid',