Okay -- its kind of working actually. I can call methods that would actually not work when called from the script console:
#MyScripts in 'base_script' inherited by 'dev'
import os
def local_ls(path):
return os.listdir(path)
def invokeGateway(callback, *args, **kwargs):
return system.util.sendRequest("dev", "runScript",
{"callback": callback, "args": args, "kwargs": kwargs})
# script console in project base_script (should be agnostic to project?)
payload = {"callback": "MyScripts.local_ls", "args": ["/"]}
system.util.sendRequest("dev", "runScript", payload)
# Gateway message script 'runScript' in project "dev"
# which is a grandchild of base_script
def handleMessage(payload):
try:
callback = payload['callback']
args = payload.get('args', [])
kwargs = payload.get('kwargs', {})
cb_parts = callback.split('.')
tgt = globals()
for i in range(len(cb_parts)):
if i == 0:
#the handling for globals() doesn't support hasattr apparently
tgt = tgt[cb_parts[i]]
elif not hasattr(tgt, cb_parts[i]):
e = {"error": "missing {} from {}".format(cb_parts[i], str(tgt))}
return e
tgt = getattr(tgt, cb_parts[i])
result = tgt(*args, **kwargs)
return result
except Exception as e:
return {"error": str(e)}
It actually works finally!