From f72828d502fd438b212145799748dd439ee295d7 Mon Sep 17 00:00:00 2001 From: Vincent Wilms Date: Fri, 7 Feb 2025 16:26:38 +0100 Subject: [PATCH] Follow Nexus changes --- CHANGELOG.md | 4 + src/Nexus.Sources.Federation/Federation.cs | 76 +++++++++++++++---- .../Nexus.Sources.Federation.csproj | 5 +- .../FederationTests.cs | 33 ++++---- .../Nexus.Sources.Federation.Tests.csproj | 2 +- version.json | 2 +- 6 files changed, 84 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3dbe01..5737232 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v2.0.0-beta.35 - 2024-02-07 + +- Follow Nexus changes + ## v2.0.0-beta.34 - 2024-01-22 - Follow Nexus changes diff --git a/src/Nexus.Sources.Federation/Federation.cs b/src/Nexus.Sources.Federation/Federation.cs index 415ec8c..84fc11b 100644 --- a/src/Nexus.Sources.Federation/Federation.cs +++ b/src/Nexus.Sources.Federation/Federation.cs @@ -7,16 +7,36 @@ namespace Nexus.Sources; +/// +/// Represents the settings for the federation data source. +/// +/// The access token used for authentication. +/// The optional source path. Default is '/'. +/// The optional mount point. Default is '/'. +/// The optional include pattern. +public record FederationSettings( + string AccessToken, + string? SourcePath, + string? MountPoint, + string? IncludePattern +); + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + [ExtensionDescription( "Provides access to other Nexus databases.", "https://github.com/Apollo3zehn/nexus-sources-federation", "https://github.com/Apollo3zehn/nexus-sources-federation")] -public class Federation : IDataSource +public class Federation : IDataSource { - private DataSourceContext _context = default!; + private DataSourceContext _context = default!; + private Api.INexusClient _nexusClient = default!; + private string _sourcePath = "/"; + private string _mountPoint = "/"; + private string _includePattern = default!; private static readonly JsonSerializerOptions _jsonSerializerOptions; @@ -30,9 +50,14 @@ static Federation() public Func CreateNexusClient { get; set; } = httpClient => new Api.NexusClient(httpClient); - public Task SetContextAsync(DataSourceContext context, ILogger logger, CancellationToken cancellationToken) + public Task SetContextAsync( + DataSourceContext context, + ILogger logger, + CancellationToken cancellationToken + ) { _context = context; + var settings = context.SourceConfiguration; // http client if (_context.ResourceLocator is null) @@ -44,31 +69,32 @@ public Task SetContextAsync(DataSourceContext context, ILogger logger, Cancellat }; // token - var token = (_context.SourceConfiguration?.GetStringValue($"access-token")) ?? throw new Exception("The access-token property is not set."); - _nexusClient = CreateNexusClient(httpClient); - _nexusClient.SignIn(token); + _nexusClient.SignIn(settings.AccessToken); // source-path - var sourcePath = _context.SourceConfiguration?.GetStringValue($"source-path"); + var sourcePath = settings.SourcePath; if (sourcePath is not null) _sourcePath = '/' + sourcePath.Trim('/'); // mount-point - var mountPoint = _context.SourceConfiguration?.GetStringValue($"mount-point"); + var mountPoint = settings.MountPoint; if (mountPoint is not null) _mountPoint = '/' + mountPoint.Trim('/'); // include-pattern - var includePattern = _context.SourceConfiguration?.GetStringValue($"include-pattern"); + var includePattern = settings.IncludePattern; _includePattern = includePattern ?? ""; return Task.CompletedTask; } - public async Task GetCatalogRegistrationsAsync(string path, CancellationToken cancellationToken) + public async Task GetCatalogRegistrationsAsync( + string path, + CancellationToken cancellationToken + ) { if (path == "/") path = _mountPoint; @@ -84,7 +110,10 @@ public async Task GetCatalogRegistrationsAsync(string pat .ToArray(); } - public async Task EnrichCatalogAsync(ResourceCatalog catalog, CancellationToken cancellationToken) + public async Task EnrichCatalogAsync( + ResourceCatalog catalog, + CancellationToken cancellationToken + ) { var newCatalog = await _nexusClient.V1.Catalogs.GetAsync(ToSourcePathPrefixedCatalogId(catalog.Id), cancellationToken); newCatalog = newCatalog with { Id = catalog.Id }; @@ -96,7 +125,12 @@ public async Task EnrichCatalogAsync(ResourceCatalog catalog, C return catalog.Merge(actualNewCatalog); } - public async Task GetAvailabilityAsync(string catalogId, DateTime begin, DateTime end, CancellationToken cancellationToken) + public async Task GetAvailabilityAsync( + string catalogId, + DateTime begin, + DateTime end, + CancellationToken cancellationToken + ) { var availability = await _nexusClient.V1.Catalogs .GetAvailabilityAsync(ToSourcePathPrefixedCatalogId(catalogId), begin, end, end - begin, cancellationToken); @@ -104,15 +138,25 @@ public async Task GetAvailabilityAsync(string catalogId, DateTime begin, return availability.Data[0]; } - public async Task<(DateTime Begin, DateTime End)> GetTimeRangeAsync(string catalogId, CancellationToken cancellationToken) + public async Task GetTimeRangeAsync( + string catalogId, + CancellationToken cancellationToken + ) { var timeRange = await _nexusClient.V1.Catalogs .GetTimeRangeAsync(ToSourcePathPrefixedCatalogId(catalogId), cancellationToken); - return (timeRange.Begin, timeRange.End); + return new CatalogTimeRange(timeRange.Begin, timeRange.End); } - public async Task ReadAsync(DateTime begin, DateTime end, ReadRequest[] requests, ReadDataHandler readData, IProgress progress, CancellationToken cancellationToken) + public async Task ReadAsync( + DateTime begin, + DateTime end, + ReadRequest[] requests, + ReadDataHandler readData, + IProgress progress, + CancellationToken cancellationToken + ) { foreach (var request in requests) { @@ -142,3 +186,5 @@ private string ToSourcePathPrefixedCatalogId(string catalogId) return Path.Combine(_sourcePath, catalogId[_mountPoint.Length..].TrimStart('/')); } } + +#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member \ No newline at end of file diff --git a/src/Nexus.Sources.Federation/Nexus.Sources.Federation.csproj b/src/Nexus.Sources.Federation/Nexus.Sources.Federation.csproj index b487c78..429191f 100644 --- a/src/Nexus.Sources.Federation/Nexus.Sources.Federation.csproj +++ b/src/Nexus.Sources.Federation/Nexus.Sources.Federation.csproj @@ -2,12 +2,11 @@ $(TargetFrameworkVersion) - false - - + + runtime;native diff --git a/tests/Nexus.Sources.Federation.Tests/FederationTests.cs b/tests/Nexus.Sources.Federation.Tests/FederationTests.cs index 4a1b30b..39ac30a 100644 --- a/tests/Nexus.Sources.Federation.Tests/FederationTests.cs +++ b/tests/Nexus.Sources.Federation.Tests/FederationTests.cs @@ -53,18 +53,18 @@ public async Task ProvidesCatalogRegistrations(string? sourcePath, string? mount .SetupGet(client => client.V1.Catalogs) .Returns(catalogsClient); - var dataSource = new Federation() { CreateNexusClient = _ => nexusClient } as IDataSource; + var dataSource = (IDataSource)new Federation() { CreateNexusClient = _ => nexusClient }; - var context = new DataSourceContext( + var context = new DataSourceContext( ResourceLocator: new Uri("https://example.com"), - SystemConfiguration: default!, - SourceConfiguration: new Dictionary() - { - ["access-token"] = JsonSerializer.SerializeToElement(""), - ["source-path"] = JsonSerializer.SerializeToElement(sourcePath), - ["mount-point"] = JsonSerializer.SerializeToElement(mountPoint), - }, - RequestConfiguration: default!); + SourceConfiguration: new FederationSettings( + AccessToken: "", + SourcePath: sourcePath, + MountPoint: mountPoint, + IncludePattern: default + ), + RequestConfiguration: default! + ); await dataSource.SetContextAsync(context, NullLogger.Instance, CancellationToken.None); @@ -106,16 +106,13 @@ public async Task ProvidesNestedCatalogRegistrations() .SetupGet(client => client.V1.Catalogs) .Returns(catalogsClient); - var dataSource = new Federation() { CreateNexusClient = _ => nexusClient } as IDataSource; + var dataSource = (IDataSource)new Federation() { CreateNexusClient = _ => nexusClient }; - var context = new DataSourceContext( + var context = new DataSourceContext( ResourceLocator: new Uri("https://example.com"), - SystemConfiguration: default!, - SourceConfiguration: new Dictionary() - { - ["access-token"] = JsonSerializer.SerializeToElement("") - }, - RequestConfiguration: default!); + SourceConfiguration: new FederationSettings(AccessToken: "", default, default, default), + RequestConfiguration: default! + ); await dataSource.SetContextAsync(context, NullLogger.Instance, CancellationToken.None); diff --git a/tests/Nexus.Sources.Federation.Tests/Nexus.Sources.Federation.Tests.csproj b/tests/Nexus.Sources.Federation.Tests/Nexus.Sources.Federation.Tests.csproj index a596dc9..73e9705 100644 --- a/tests/Nexus.Sources.Federation.Tests/Nexus.Sources.Federation.Tests.csproj +++ b/tests/Nexus.Sources.Federation.Tests/Nexus.Sources.Federation.Tests.csproj @@ -8,7 +8,7 @@ - + all diff --git a/version.json b/version.json index e3027e8..e6e999a 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { "version": "2.0.0", - "suffix": "beta.34" + "suffix": "beta.35" } \ No newline at end of file