allow support module name in info() tag

Gives the option of reducing the input link
length and preventing runtime switching of
module.
This commit is contained in:
Michael Davidsaver
2014-02-08 12:34:08 -05:00
parent 7bdcef3767
commit 7c05753052
2 changed files with 22 additions and 5 deletions

View File

@ -320,11 +320,19 @@ def processLink(name, lstr):
"""Process the INP or OUT link
Expects lstr to be "module arg1 arg2"
if the 'pySupportMod' info tag is not given.
When it is, the link string is passed
to the module build() function without
processing.
Returns (callable, Record, "arg1 arg2")
Returns (Record, Support)
"""
rec = getRecord(name)
modname = rec.info('pySupportMod', None)
if not modname:
parts = lstr.split(None,1)
modname, args = parts[0], parts[1] if len(parts)>1 else None
else:
args = lstr
mod = importmod(modname)
return rec, mod.build(rec, args)

View File

@ -150,13 +150,22 @@ This support code can then be referenced from records. ::
record(longin, "my:int:counter") {
field(DTYP, "Python Device")
field(INP , "counter hello world")
field(INP , "@counter hello world")
}
The following will fail to associate. ::
record(longin, "my:int:counter") {
field(DTYP, "Python Device")
field(INP , "counter do what I say")
field(INP , "@counter do what I say")
}
If a shorter INP link string is necessary, or to prevent
runtime switching of modules, the module name may also
be given in the *pySupportMod* info() tag. ::
record(longin, "my:int:counter") {
field(DTYP, "Python Device")
field(INP , "@hello world")
info("pySupportMod", "counter")
}