Skip to content

Commit

Permalink
Follow Nexus changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Vincent Wilms committed Feb 7, 2025
1 parent 11e8f04 commit f72828d
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 38 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
76 changes: 61 additions & 15 deletions src/Nexus.Sources.Federation/Federation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,36 @@

namespace Nexus.Sources;

/// <summary>
/// Represents the settings for the federation data source.
/// </summary>
/// <param name="AccessToken">The access token used for authentication.</param>
/// <param name="SourcePath">The optional source path. Default is '/'.</param>
/// <param name="MountPoint">The optional mount point. Default is '/'.</param>
/// <param name="IncludePattern">The optional include pattern.</param>
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<FederationSettings>
{
private DataSourceContext _context = default!;
private DataSourceContext<FederationSettings> _context = default!;

private Api.INexusClient _nexusClient = default!;

private string _sourcePath = "/";

private string _mountPoint = "/";

private string _includePattern = default!;

private static readonly JsonSerializerOptions _jsonSerializerOptions;
Expand All @@ -30,9 +50,14 @@ static Federation()
public Func<HttpClient, Api.INexusClient> CreateNexusClient { get; set; }
= httpClient => new Api.NexusClient(httpClient);

public Task SetContextAsync(DataSourceContext context, ILogger logger, CancellationToken cancellationToken)
public Task SetContextAsync(
DataSourceContext<FederationSettings> context,
ILogger logger,
CancellationToken cancellationToken
)
{
_context = context;
var settings = context.SourceConfiguration;

// http client
if (_context.ResourceLocator is null)
Expand All @@ -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<CatalogRegistration[]> GetCatalogRegistrationsAsync(string path, CancellationToken cancellationToken)
public async Task<CatalogRegistration[]> GetCatalogRegistrationsAsync(
string path,
CancellationToken cancellationToken
)
{
if (path == "/")
path = _mountPoint;
Expand All @@ -84,7 +110,10 @@ public async Task<CatalogRegistration[]> GetCatalogRegistrationsAsync(string pat
.ToArray();
}

public async Task<ResourceCatalog> EnrichCatalogAsync(ResourceCatalog catalog, CancellationToken cancellationToken)
public async Task<ResourceCatalog> EnrichCatalogAsync(
ResourceCatalog catalog,
CancellationToken cancellationToken
)
{
var newCatalog = await _nexusClient.V1.Catalogs.GetAsync(ToSourcePathPrefixedCatalogId(catalog.Id), cancellationToken);
newCatalog = newCatalog with { Id = catalog.Id };
Expand All @@ -96,23 +125,38 @@ public async Task<ResourceCatalog> EnrichCatalogAsync(ResourceCatalog catalog, C
return catalog.Merge(actualNewCatalog);
}

public async Task<double> GetAvailabilityAsync(string catalogId, DateTime begin, DateTime end, CancellationToken cancellationToken)
public async Task<double> GetAvailabilityAsync(
string catalogId,
DateTime begin,
DateTime end,
CancellationToken cancellationToken
)
{
var availability = await _nexusClient.V1.Catalogs
.GetAvailabilityAsync(ToSourcePathPrefixedCatalogId(catalogId), begin, end, end - begin, cancellationToken);

return availability.Data[0];
}

public async Task<(DateTime Begin, DateTime End)> GetTimeRangeAsync(string catalogId, CancellationToken cancellationToken)
public async Task<CatalogTimeRange> 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<double> progress, CancellationToken cancellationToken)
public async Task ReadAsync(
DateTime begin,
DateTime end,
ReadRequest[] requests,
ReadDataHandler readData,
IProgress<double> progress,
CancellationToken cancellationToken
)
{
foreach (var request in requests)
{
Expand Down Expand Up @@ -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
5 changes: 2 additions & 3 deletions src/Nexus.Sources.Federation/Nexus.Sources.Federation.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

<PropertyGroup>
<TargetFramework>$(TargetFrameworkVersion)</TargetFramework>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nexus.Api" Version="2.0.0-beta.43" />
<PackageReference Include="Nexus.Extensibility" Version="2.0.0-beta.43">
<PackageReference Include="Nexus.Api" Version="2.0.0-beta.50" />
<PackageReference Include="Nexus.Extensibility" Version="2.0.0-beta.50">
<ExcludeAssets>runtime;native</ExcludeAssets>
</PackageReference>
</ItemGroup>
Expand Down
33 changes: 15 additions & 18 deletions tests/Nexus.Sources.Federation.Tests/FederationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<FederationSettings>)new Federation() { CreateNexusClient = _ => nexusClient };

var context = new DataSourceContext(
var context = new DataSourceContext<FederationSettings>(
ResourceLocator: new Uri("https://example.com"),
SystemConfiguration: default!,
SourceConfiguration: new Dictionary<string, JsonElement>()
{
["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);

Expand Down Expand Up @@ -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<FederationSettings>)new Federation() { CreateNexusClient = _ => nexusClient };

var context = new DataSourceContext(
var context = new DataSourceContext<FederationSettings>(
ResourceLocator: new Uri("https://example.com"),
SystemConfiguration: default!,
SourceConfiguration: new Dictionary<string, JsonElement>()
{
["access-token"] = JsonSerializer.SerializeToElement("")
},
RequestConfiguration: default!);
SourceConfiguration: new FederationSettings(AccessToken: "", default, default, default),
RequestConfiguration: default!
);

await dataSource.SetContextAsync(context, NullLogger.Instance, CancellationToken.None);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="Nexus.Extensibility" Version="2.0.0-beta.43" />
<PackageReference Include="Nexus.Extensibility" Version="2.0.0-beta.50" />
<PackageReference Include="xunit" Version="2.7.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
<PrivateAssets>all</PrivateAssets>
Expand Down
2 changes: 1 addition & 1 deletion version.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"version": "2.0.0",
"suffix": "beta.34"
"suffix": "beta.35"
}

0 comments on commit f72828d

Please sign in to comment.