Update python runtime for MQTTnet.Server.

This commit is contained in:
Christian Kratky
2020-04-08 22:01:20 +02:00
parent 6546175ea2
commit c89918a890
7 changed files with 34 additions and 38 deletions
+2 -2
View File
@@ -43,8 +43,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="IronPython" Version="2.7.9" /> <PackageReference Include="IronPython" Version="2.7.10-candidate1" />
<PackageReference Include="IronPython.StdLib" Version="2.7.9" /> <PackageReference Include="IronPython.StdLib" Version="2.7.10-candidate1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" /> <PackageReference Include="MSTest.TestAdapter" Version="2.1.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.3.1" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.3.1" />
@@ -1,14 +1,14 @@
using System; using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.Extensions.Logging;
namespace MQTTnet.Server.Scripting.DataSharing namespace MQTTnet.Server.Scripting.DataSharing
{ {
public class DataSharingService public class DataSharingService
{ {
private readonly Dictionary<string, object> _storage = new Dictionary<string, object>(); readonly Dictionary<string, object> _storage = new Dictionary<string, object>();
private readonly PythonScriptHostService _pythonScriptHostService; readonly PythonScriptHostService _pythonScriptHostService;
private readonly ILogger<DataSharingService> _logger; readonly ILogger<DataSharingService> _logger;
public DataSharingService(PythonScriptHostService pythonScriptHostService, ILogger<DataSharingService> logger) public DataSharingService(PythonScriptHostService pythonScriptHostService, ILogger<DataSharingService> logger)
{ {
@@ -1,14 +1,14 @@
using System; using Microsoft.Extensions.Logging;
using System;
using System.IO; using System.IO;
using System.Text; using System.Text;
using Microsoft.Extensions.Logging;
namespace MQTTnet.Server.Scripting namespace MQTTnet.Server.Scripting
{ {
public class PythonIOStream : Stream public class PythonIOStream : Stream
{ {
private readonly ILogger _logger; readonly ILogger _logger;
private readonly Encoding _encoder = Encoding.UTF8; readonly Encoding _encoder = Encoding.UTF8;
public PythonIOStream(ILogger<PythonIOStream> logger) public PythonIOStream(ILogger<PythonIOStream> logger)
{ {
@@ -1,4 +1,8 @@
using System; using Microsoft.Extensions.Logging;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using MQTTnet.Server.Configuration;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Dynamic; using System.Dynamic;
using System.IO; using System.IO;
@@ -6,22 +10,18 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using MQTTnet.Server.Configuration;
namespace MQTTnet.Server.Scripting namespace MQTTnet.Server.Scripting
{ {
public class PythonScriptHostService public class PythonScriptHostService
{ {
private readonly IDictionary<string, object> _proxyObjects = new ExpandoObject(); readonly IDictionary<string, object> _proxyObjects = new ExpandoObject();
private readonly List<PythonScriptInstance> _scriptInstances = new List<PythonScriptInstance>(); readonly List<PythonScriptInstance> _scriptInstances = new List<PythonScriptInstance>();
private readonly string _scriptsPath; readonly string _scriptsPath;
private readonly ScriptingSettingsModel _scriptingSettings; readonly ScriptingSettingsModel _scriptingSettings;
private readonly ILogger<PythonScriptHostService> _logger; readonly ILogger<PythonScriptHostService> _logger;
private readonly ScriptEngine _scriptEngine; readonly ScriptEngine _scriptEngine;
public PythonScriptHostService(ScriptingSettingsModel scriptingSettings, PythonIOStream pythonIOStream, ILogger<PythonScriptHostService> logger) public PythonScriptHostService(ScriptingSettingsModel scriptingSettings, PythonIOStream pythonIOStream, ILogger<PythonScriptHostService> logger)
{ {
_scriptingSettings = scriptingSettings ?? throw new ArgumentNullException(nameof(scriptingSettings)); _scriptingSettings = scriptingSettings ?? throw new ArgumentNullException(nameof(scriptingSettings));
@@ -139,7 +139,7 @@ namespace MQTTnet.Server.Scripting
} }
} }
private async Task TryInitializeScriptAsync(string path) async Task TryInitializeScriptAsync(string path)
{ {
var uid = new FileInfo(path).Name.Replace(".py", string.Empty, StringComparison.OrdinalIgnoreCase); var uid = new FileInfo(path).Name.Replace(".py", string.Empty, StringComparison.OrdinalIgnoreCase);
@@ -155,7 +155,7 @@ namespace MQTTnet.Server.Scripting
{ {
_scriptInstances.Add(scriptInstance); _scriptInstances.Add(scriptInstance);
} }
_logger.LogInformation($"Initialized script '{uid}'."); _logger.LogInformation($"Initialized script '{uid}'.");
} }
catch (Exception exception) catch (Exception exception)
@@ -164,7 +164,7 @@ namespace MQTTnet.Server.Scripting
} }
} }
private PythonScriptInstance CreateScriptInstance(string uid, string path, string code) PythonScriptInstance CreateScriptInstance(string uid, string path, string code)
{ {
var scriptScope = _scriptEngine.CreateScope(); var scriptScope = _scriptEngine.CreateScope();
@@ -173,11 +173,11 @@ namespace MQTTnet.Server.Scripting
scriptScope.SetVariable("mqtt_net_server", _proxyObjects); scriptScope.SetVariable("mqtt_net_server", _proxyObjects);
compiledCode.Execute(scriptScope); compiledCode.Execute(scriptScope);
return new PythonScriptInstance(uid, path, scriptScope); return new PythonScriptInstance(uid, path, scriptScope);
} }
private void AddSearchPaths(ScriptEngine scriptEngine) void AddSearchPaths(ScriptEngine scriptEngine)
{ {
if (_scriptingSettings.IncludePaths?.Any() != true) if (_scriptingSettings.IncludePaths?.Any() != true)
{ {
@@ -1,12 +1,12 @@
using System; using IronPython.Runtime;
using IronPython.Runtime;
using Microsoft.Scripting.Hosting; using Microsoft.Scripting.Hosting;
using System;
namespace MQTTnet.Server.Scripting namespace MQTTnet.Server.Scripting
{ {
public class PythonScriptInstance public class PythonScriptInstance
{ {
private readonly ScriptScope _scriptScope; readonly ScriptScope _scriptScope;
public PythonScriptInstance(string uid, string path, ScriptScope scriptScope) public PythonScriptInstance(string uid, string path, ScriptScope scriptScope)
{ {
+2 -2
View File
@@ -152,7 +152,7 @@ namespace MQTTnet.Server.Web
.AddCookie(); .AddCookie();
} }
private void ReadMqttSettings(IServiceCollection services) void ReadMqttSettings(IServiceCollection services)
{ {
var mqttSettings = new MqttSettingsModel(); var mqttSettings = new MqttSettingsModel();
Configuration.Bind("MQTT", mqttSettings); Configuration.Bind("MQTT", mqttSettings);
@@ -163,7 +163,7 @@ namespace MQTTnet.Server.Web
services.AddSingleton(scriptingSettings); services.AddSingleton(scriptingSettings);
} }
private static void ConfigureWebSocketEndpoint( static void ConfigureWebSocketEndpoint(
IApplicationBuilder application, IApplicationBuilder application,
MqttServerService mqttServerService, MqttServerService mqttServerService,
MqttSettingsModel mqttSettings) MqttSettingsModel mqttSettings)
+1 -5
View File
@@ -52,11 +52,7 @@
}, },
"Scripting": { "Scripting": {
"ScriptsPath": "Scripts", "ScriptsPath": "Scripts",
"IncludePaths": [ "IncludePaths": []
"Lib",
"/usr/lib/python2.7",
"C:\\Python27\\Lib"
]
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {