public object ExecuteTool(string uid, [FromBody] IDictionary parameters = null) { if (uid == null) { throw new ArgumentNullException(nameof(uid)); } if (parameters == null) { parameters = new PythonDictionary(); } Package package; try { package = _packageManagerService.LoadPackage(PackageUid.Parse(uid)); } catch (WirehomePackageNotFoundException) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; return(null); } try { var scriptHost = _pythonScriptHostFactoryService.CreateScriptHost(null); scriptHost.Compile(package.Script); return(scriptHost.InvokeFunction("main", parameters)); } catch (Exception exception) { return(new ExceptionPythonModel(exception).ConvertToPythonDictionary()); } }
ServiceInstance CreateServiceInstance(string id, ServiceConfiguration configuration) { var packageUid = new PackageUid(id, configuration.Version); var package = _repositoryService.LoadPackage(packageUid); var scriptHost = _pythonScriptHostFactoryService.CreateScriptHost(); scriptHost.Compile(package.Script); var context = new PythonDictionary { ["service_id"] = id, ["service_version"] = configuration.Version, ["service_uid"] = new PackageUid(id, configuration.Version).ToString() }; scriptHost.AddToWirehomeWrapper("context", context); var serviceInstance = new ServiceInstance(id, configuration, scriptHost); if (configuration.Variables != null) { foreach (var variable in configuration.Variables) { serviceInstance.SetVariable(variable.Key, variable.Value); } } return(serviceInstance); }
private AutomationInstance CreateAutomation(string uid, AutomationConfiguration configuration, WirehomeDictionary settings) { var package = _packageManagerService.LoadPackage(configuration.Logic.Uid); var scriptHost = _pythonScriptHostFactoryService.CreateScriptHost(_logger, new AutomationPythonProxy(uid, this)); scriptHost.Compile(package.Script); var context = new WirehomeDictionary { ["automation_uid"] = uid, ["logic_id"] = configuration.Logic.Uid.Id, ["logic_version"] = configuration.Logic.Uid.Version }; // TODO: Remove scope as soon as all automations are migrated. scriptHost.SetVariable("scope", context); scriptHost.SetVariable("context", context); foreach (var variable in configuration.Logic.Variables) { scriptHost.SetVariable(variable.Key, variable.Value); } var automation = new AutomationInstance(uid, scriptHost); foreach (var setting in settings) { automation.Settings[setting.Key] = setting.Value; } return(automation); }
private ServiceInstance CreateServiceInstance(string id, ServiceConfiguration configuration) { var packageUid = new PackageUid(id, configuration.Version); var package = _repositoryService.LoadPackage(packageUid); var scriptHost = _pythonScriptHostFactoryService.CreateScriptHost(_logger); scriptHost.Compile(package.Script); var serviceInstance = new ServiceInstance(id, configuration, scriptHost); if (configuration.Variables != null) { foreach (var variable in configuration.Variables) { serviceInstance.SetVariable(variable.Key, variable.Value); } } return(serviceInstance); }
public void InitializeComponent(Component component, ComponentConfiguration configuration) { if (component == null) { throw new ArgumentNullException(nameof(component)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var context = new WirehomeDictionary { ["component_uid"] = component.Uid }; var adapterPackage = _packageManagerService.LoadPackage(configuration.Logic.Adapter.Uid); var adapter = new ScriptComponentAdapter(_pythonScriptHostFactoryService, _componentRegistryService, _scriptComponentAdapterLogger); adapter.Compile(component.Uid, adapterPackage.Script); if (configuration.Logic.Adapter.Variables != null) { foreach (var parameter in configuration.Logic.Adapter.Variables) { adapter.SetVariable(parameter.Key, parameter.Value); } } context["adapter_uid"] = adapterPackage.Uid.ToString(); context["adapter_id"] = adapterPackage.Uid.Id; context["adapter_version"] = adapterPackage.Uid.Version; if (string.IsNullOrEmpty(configuration.Logic.Uid?.Id)) { component.SetLogic(new EmptyLogic(adapter)); } else { var logicPackage = _packageManagerService.LoadPackage(configuration.Logic.Uid); var logic = new ScriptComponentLogic(_pythonScriptHostFactoryService, _componentRegistryService, _scriptComponentLogicLogger); adapter.MessagePublishedCallback = message => logic.ProcessAdapterMessage(message); logic.AdapterMessagePublishedCallback = message => adapter.ProcessMessage(message); logic.Compile(component.Uid, logicPackage.Script); if (configuration.Logic.Variables != null) { foreach (var parameter in configuration.Logic.Variables) { logic.SetVariable(parameter.Key, parameter.Value); } } context["logic_uid"] = logicPackage.Uid.ToString(); context["logic_id"] = logicPackage.Uid.Id; context["logic_version"] = logicPackage.Uid.Version; // TODO: Remove "scope" as soon as it is migrated. logic.SetVariable("scope", context); logic.SetVariable("context", context); logic.AddToWirehomeWrapper("context", context); component.SetLogic(logic); } // TODO: Remove "scope" as soon as it is migrated. adapter.SetVariable("scope", context); adapter.SetVariable("context", context); adapter.AddToWirehomeWrapper("context", context); }
private void SetupComponentBasedOnPackages(Component component, ComponentConfiguration configuration, IDictionary <object, object> context) { Package adapterPackage = null; IComponentAdapter adapter; ScriptComponentAdapter scriptAdapter = null; if (configuration.Logic?.Adapter?.Uid != null) { adapterPackage = _packageManagerService.LoadPackage(configuration.Logic.Adapter.Uid); scriptAdapter = new ScriptComponentAdapter(_pythonScriptHostFactoryService, _componentRegistryService, _scriptComponentAdapterLogger); scriptAdapter.Compile(component.Uid, adapterPackage.Script); if (configuration.Logic.Adapter.Variables != null) { foreach (var parameter in configuration.Logic.Adapter.Variables) { scriptAdapter.SetVariable(parameter.Key, parameter.Value); } } adapter = scriptAdapter; } else { adapter = new EmptyComponentAdapter(); } context["adapter_uid"] = adapterPackage?.Uid?.ToString(); context["adapter_id"] = adapterPackage?.Uid?.Id; context["adapter_version"] = adapterPackage?.Uid?.Version; if (string.IsNullOrEmpty(configuration.Logic?.Uid?.Id)) { component.SetLogic(new EmptyComponentLogic(adapter)); } else { var logicPackage = _packageManagerService.LoadPackage(configuration.Logic.Uid); var logic = new ScriptComponentLogic(_pythonScriptHostFactoryService, _componentRegistryService, _scriptComponentLogicLogger); adapter.MessagePublishedCallback = message => logic.ProcessAdapterMessage(message); logic.AdapterMessagePublishedCallback = message => adapter.ProcessMessage(message); logic.Compile(component.Uid, logicPackage.Script); if (configuration.Logic.Variables != null) { foreach (var parameter in configuration.Logic.Variables) { logic.SetVariable(parameter.Key, parameter.Value); } } context["logic_uid"] = logicPackage.Uid.ToString(); context["logic_id"] = logicPackage.Uid.Id; context["logic_version"] = logicPackage.Uid.Version; logic.AddToWirehomeWrapper("context", context); component.SetLogic(logic); } scriptAdapter?.AddToWirehomeWrapper("context", context); }