diff --git a/CHANGELOG.md b/CHANGELOG.md
index dca02dd..e473c22 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## v2.0.0-beta.54 - 2025-02-04
+
+- Follow Nexus changes
+
## v2.0.0-beta.53 - 2025-02-03
- Fix version
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 6ae35b8..a941e94 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -9,7 +9,7 @@
-
+
diff --git a/requirements.txt b/requirements.txt
index 29a04bf..a512218 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,6 +2,6 @@
apollo3zehn-package-management==1.0.0-b5
build
fastapi[standard]
-nexus-extensibility==2.0.0-b48
+nexus-extensibility==2.0.0-b50
pytest-asyncio
wheel
\ No newline at end of file
diff --git a/src/Nexus.Sources.Remote/Remote.cs b/src/Nexus.Sources.Remote/Remote.cs
index cf8bbc0..a5d3362 100644
--- a/src/Nexus.Sources.Remote/Remote.cs
+++ b/src/Nexus.Sources.Remote/Remote.cs
@@ -50,7 +50,7 @@ public partial class Remote : IDataSource, IUpgradableDataSource
private DataSourceContext Context { get; set; } = default!;
- public static async Task UpgradeSourceConfigurationAsync(
+ public async Task UpgradeSourceConfigurationAsync(
JsonElement configuration,
CancellationToken cancellationToken
)
diff --git a/src/agent/python/requirements.txt b/src/agent/python/requirements.txt
index b84b86f..b7f9615 100644
--- a/src/agent/python/requirements.txt
+++ b/src/agent/python/requirements.txt
@@ -1,3 +1,3 @@
apollo3zehn-package-management==1.0.0-b5
fastapi[standard]
-nexus-extensibility==2.0.0-beta.48
\ No newline at end of file
+nexus-extensibility==2.0.0-beta.50
\ No newline at end of file
diff --git a/src/remoting/dotnet/Remoting.cs b/src/remoting/dotnet/Remoting.cs
index 35aaba4..ef90e0c 100644
--- a/src/remoting/dotnet/Remoting.cs
+++ b/src/remoting/dotnet/Remoting.cs
@@ -220,12 +220,18 @@ CancellationToken cancellationToken
throw new Exception("The connection must be initialized with a type before invoking other methods.");
var dataSourceType = _getDataSourceType(_sourceTypeName);
- var configuration = @params[0];
+ var upgradedConfiguration = @params[0];
- var upgradedConfiguration = await InternalUpgradeAllAsync(
- dataSourceType,
- @params[0]
- );
+ if (dataSourceType.IsAssignableTo(dataSourceType))
+ {
+ var upgradableDataSource = (IUpgradableDataSource)Activator.CreateInstance(dataSourceType)!;
+ var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(1));
+
+ upgradedConfiguration = await upgradableDataSource.UpgradeSourceConfigurationAsync(
+ @params[0],
+ timeoutTokenSource.Token
+ );
+ }
result = JsonSerializer.SerializeToNode(upgradedConfiguration, Utilities.JsonSerializerOptions);
}
@@ -450,56 +456,6 @@ private int ReadSize(NetworkStream currentStream)
var size = BitConverter.ToInt32(sizeBuffer);
return size;
}
-
- /* Copy of Nexus.Services.UpgradeConfigurationService.InternalUpgradeAllAsync */
- private static async Task InternalUpgradeAllAsync(
- Type sourceType,
- JsonElement configuration
- )
- {
- /* Collect potential types in the inheritance chain */
- var upgradableDataSourceTypes = new List();
- var currentType1 = sourceType;
-
- while (!(currentType1 is null || currentType1 == typeof(object)))
- {
- var interfaceTypes = currentType1.GetInterfaces();
-
- if (interfaceTypes.Contains(typeof(IUpgradableDataSource)))
- upgradableDataSourceTypes.Add(currentType1);
-
- currentType1 = currentType1.BaseType;
- }
-
- upgradableDataSourceTypes.Reverse();
-
- /* Invoke UpgradeSourceConfigurationAsync */
- var upgradedConfiguration = configuration;
-
- foreach (var currentType2 in upgradableDataSourceTypes)
- {
- var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(1));
-
- var methodInfo = currentType2
- .GetMethod(nameof(IUpgradableDataSource.UpgradeSourceConfigurationAsync), BindingFlags.Public | BindingFlags.Static)!;
-
- /* This happens when base class implements IUpgradableDataSource and
- * sub class does not reimplement it, which is fine.
- */
- if (methodInfo is null)
- continue;
-
- upgradedConfiguration = await (Task)methodInfo.Invoke(
- default,
- [
- upgradedConfiguration,
- timeoutTokenSource.Token
- ]
- )!;
- }
-
- return upgradedConfiguration;
- }
}
internal static class Utilities
diff --git a/src/remoting/python/nexus_remoting/_remoting.py b/src/remoting/python/nexus_remoting/_remoting.py
index ac64391..e2ccdb1 100644
--- a/src/remoting/python/nexus_remoting/_remoting.py
+++ b/src/remoting/python/nexus_remoting/_remoting.py
@@ -165,11 +165,11 @@ async def _process_invocation(self, request: dict[str, Any]) \
raise Exception("The connection must be initialized with a type before invoking other methods.")
data_source_type = self._get_data_source_type(self._source_type_name)
+ upgraded_configuration = params[0]
- upgraded_configuration = await self.internal_upgrade_all(
- data_source_type,
- params[0]
- )
+ if issubclass(data_source_type, IUpgradableDataSource):
+ upgradable_data_source = cast(IUpgradableDataSource, data_source_type())
+ upgraded_configuration = await upgradable_data_source.upgrade_source_configuration(params[0])
result = upgraded_configuration
@@ -327,37 +327,6 @@ async def _read_size(self, reader: asyncio.StreamReader) -> int:
return size
- async def internal_upgrade_all(self, source_type: type, configuration: Any):
-
- # Collect potential types in the inheritance chain
- upgradable_data_source_types: list[type[IUpgradableDataSource]] = []
- current_type = source_type
-
- # The following implementation just follows the first base type
- # which is not IDataSource or IUpgradableDataSource
- while not (current_type is None):
-
- if issubclass(current_type, IUpgradableDataSource) and IUpgradableDataSource in current_type.__bases__:
- upgradable_data_source_types.append(current_type)
-
- current_type = next(
- (
- base for base in current_type.__bases__ \
- if base is not IDataSource and base is not IUpgradableDataSource
- ),
- None
- )
-
- upgradable_data_source_types.reverse()
-
- # Invoke upgrade_source_configuration
- upgraded_configuration = configuration
-
- for current_type in upgradable_data_source_types:
- upgraded_configuration = await current_type.upgrade_source_configuration(configuration)
-
- return upgraded_configuration
-
async def _send_to_server(message: Any, writer: asyncio.StreamWriter):
encoded = JsonEncoder.encode(message, _json_encoder_options)
diff --git a/src/remoting/python/setup.py b/src/remoting/python/setup.py
index c93e1f8..80c546a 100644
--- a/src/remoting/python/setup.py
+++ b/src/remoting/python/setup.py
@@ -47,6 +47,6 @@
},
python_requires=">=3.10",
install_requires=[
- "nexus-extensibility>=2.0.0b48"
+ "nexus-extensibility>=2.0.0b50"
]
)
diff --git a/tests/Nexus.Sources.Remote.Tests/RemoteTests.cs b/tests/Nexus.Sources.Remote.Tests/RemoteTests.cs
index 941349b..c8347e2 100644
--- a/tests/Nexus.Sources.Remote.Tests/RemoteTests.cs
+++ b/tests/Nexus.Sources.Remote.Tests/RemoteTests.cs
@@ -40,7 +40,7 @@ public async Task CanUpgradeSourceConfiguration(string language)
var configuration = CreateSettings(language);
// Act
- var upgradedConfiguration = await Remote.UpgradeSourceConfigurationAsync(
+ var upgradedConfiguration = await new Remote().UpgradeSourceConfigurationAsync(
JsonSerializer.SerializeToElement(configuration, Utilities.JsonSerializerOptions),
CancellationToken.None
);
diff --git a/tests/Nexus.Sources.Remote.Tests/dotnet/v1/Test.cs b/tests/Nexus.Sources.Remote.Tests/dotnet/v1/Test.cs
index 70adb32..2dd6500 100644
--- a/tests/Nexus.Sources.Remote.Tests/dotnet/v1/Test.cs
+++ b/tests/Nexus.Sources.Remote.Tests/dotnet/v1/Test.cs
@@ -14,15 +14,13 @@ string LogMessage
public class TestBase : IUpgradableDataSource
{
- public static Task UpgradeSourceConfigurationAsync(
+ public virtual Task UpgradeSourceConfigurationAsync(
JsonElement configuration,
CancellationToken cancellationToken
)
{
var jsonNode = JsonSerializer.SerializeToNode(configuration)!;
-
jsonNode["foo"] = jsonNode["logMessage"]!.DeepClone();
-
var upgradedConfiguration = JsonSerializer.SerializeToElement(jsonNode, JsonSerializerOptions.Web);
return Task.FromResult(upgradedConfiguration);
@@ -32,22 +30,21 @@ CancellationToken cancellationToken
/* Note: Inherit from StructuredFileDataSource would be possible
* but collides with ReadAndModifyNexusData method
*/
-public class Test : TestBase, IDataSource, IUpgradableDataSource
+public class Test : TestBase, IDataSource
{
private DataSourceContext _context = default!;
- public static new Task UpgradeSourceConfigurationAsync(
+ public override async Task UpgradeSourceConfigurationAsync(
JsonElement configuration,
CancellationToken cancellationToken
)
{
+ configuration = await base.UpgradeSourceConfigurationAsync(configuration, cancellationToken);
var jsonNode = JsonSerializer.SerializeToNode(configuration)!;
-
jsonNode["bar"] = jsonNode["logMessage"]!.DeepClone();
-
var upgradedConfiguration = JsonSerializer.SerializeToElement(jsonNode, JsonSerializerOptions.Web);
- return Task.FromResult(upgradedConfiguration);
+ return upgradedConfiguration;
}
public Task SetContextAsync(
diff --git a/tests/Nexus.Sources.Remote.Tests/python/v1/src/foo/test.py b/tests/Nexus.Sources.Remote.Tests/python/v1/src/foo/test.py
index ec4c4ae..12ecd92 100644
--- a/tests/Nexus.Sources.Remote.Tests/python/v1/src/foo/test.py
+++ b/tests/Nexus.Sources.Remote.Tests/python/v1/src/foo/test.py
@@ -1,3 +1,4 @@
+from abc import abstractmethod
import glob
import os
from dataclasses import dataclass
@@ -19,17 +20,17 @@ class TestSettings():
class TestBase(IUpgradableDataSource):
- @staticmethod
- async def upgrade_source_configuration(configuration: Any) -> Any:
+ @abstractmethod
+ async def upgrade_source_configuration(self, configuration: Any) -> Any:
configuration["foo"] = configuration["logMessage"]
-class Test(TestBase, IDataSource[TestSettings], IUpgradableDataSource):
+class Test(TestBase, IDataSource[TestSettings]):
_root: str
- @staticmethod
- async def upgrade_source_configuration(configuration: Any) -> Any:
+ async def upgrade_source_configuration(self, configuration: Any) -> Any:
+ await super().upgrade_source_configuration(configuration)
configuration["bar"] = configuration["logMessage"]
return configuration
diff --git a/version.json b/version.json
index 5adb24e..7cbadcf 100644
--- a/version.json
+++ b/version.json
@@ -1,4 +1,4 @@
{
"version": "2.0.0",
- "suffix": "beta.53"
+ "suffix": "beta.54"
}
\ No newline at end of file