allow partial describe
in addition to the SECoP standard Change-Id: If756e8d9d6a67d3194abc0fe2436cf7124713536
This commit is contained in:
parent
d9cc85c1df
commit
495709b670
@ -172,10 +172,10 @@ class Dispatcher:
|
|||||||
self.log.debug('-> module is not to be exported!')
|
self.log.debug('-> module is not to be exported!')
|
||||||
return OrderedDict()
|
return OrderedDict()
|
||||||
|
|
||||||
def get_descriptive_data(self):
|
def get_descriptive_data(self, specifier):
|
||||||
"""returns a python object which upon serialisation results in the descriptive data"""
|
"""returns a python object which upon serialisation results in the descriptive data"""
|
||||||
# XXX: be lazy and cache this?
|
modules = {}
|
||||||
result = {'modules': OrderedDict()}
|
result = {'modules': modules}
|
||||||
for modulename in self._export:
|
for modulename in self._export:
|
||||||
module = self.get_module(modulename)
|
module = self.get_module(modulename)
|
||||||
if not module.export:
|
if not module.export:
|
||||||
@ -184,11 +184,22 @@ class Dispatcher:
|
|||||||
mod_desc = {'accessibles': self.export_accessibles(modulename)}
|
mod_desc = {'accessibles': self.export_accessibles(modulename)}
|
||||||
mod_desc.update(module.exportProperties())
|
mod_desc.update(module.exportProperties())
|
||||||
mod_desc.pop('export', False)
|
mod_desc.pop('export', False)
|
||||||
result['modules'][modulename] = mod_desc
|
modules[modulename] = mod_desc
|
||||||
|
modname, _, pname = (specifier or '').partition(':')
|
||||||
|
if modname in modules: # extension to SECoP standard: description of a single module
|
||||||
|
result = modules[modname]
|
||||||
|
if pname in result['accessibles']: # extension to SECoP standard: description of a single accessible
|
||||||
|
# command is also accepted
|
||||||
|
result = result['accessibles'][pname]
|
||||||
|
elif pname:
|
||||||
|
raise NoSuchParameterError('Module %r has no parameter %r' % (modname, pname))
|
||||||
|
elif not modname or modname == '.':
|
||||||
result['equipment_id'] = self.equipment_id
|
result['equipment_id'] = self.equipment_id
|
||||||
result['firmware'] = 'FRAPPY - The Python Framework for SECoP'
|
result['firmware'] = 'FRAPPY - The Python Framework for SECoP'
|
||||||
result['version'] = '2021.02'
|
result['version'] = '2021.02'
|
||||||
result.update(self.nodeprops)
|
result.update(self.nodeprops)
|
||||||
|
else:
|
||||||
|
raise NoSuchModuleError('Module %r does not exist' % modname)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def _execute_command(self, modulename, exportedname, argument=None):
|
def _execute_command(self, modulename, exportedname, argument=None):
|
||||||
@ -288,7 +299,7 @@ class Dispatcher:
|
|||||||
return (IDENTREPLY, None, None)
|
return (IDENTREPLY, None, None)
|
||||||
|
|
||||||
def handle_describe(self, conn, specifier, data):
|
def handle_describe(self, conn, specifier, data):
|
||||||
return (DESCRIPTIONREPLY, '.', self.get_descriptive_data())
|
return (DESCRIPTIONREPLY, specifier or '.', self.get_descriptive_data(specifier))
|
||||||
|
|
||||||
def handle_read(self, conn, specifier, data):
|
def handle_read(self, conn, specifier, data):
|
||||||
if data:
|
if data:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user