Skip to content

Commit bc0404d

Browse files
authored
Merge pull request #297 from microsoft/andrueastman/kiotaBundle
Adds bundle package
2 parents 148396a + 71394b7 commit bc0404d

10 files changed

Lines changed: 212 additions & 11 deletions

.github/workflows/sonarcloud.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
CoverletOutputFormat: "opencover" # https://github.com/microsoft/vstest/issues/4014#issuecomment-1307913682
6363
shell: pwsh
6464
run: |
65-
dotnet tool run dotnet-sonarscanner begin /k:"microsoft_kiota-abstractions-dotnet" /o:"microsoft" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="tests/abstractions/coverage.net8.0.opencover.xml,tests/authentication/azure/coverage.net8.0.opencover.xml,tests/http/httpClient/coverage.net8.0.opencover.xml,tests/serialization/json/coverage.net8.0.opencover.xml,tests/serialization/text/coverage.net8.0.opencover.xml,tests/serialization/form/coverage.net8.0.opencover.xml,tests/serialization/multipart/coverage.net8.0.opencover.xml"
65+
dotnet tool run dotnet-sonarscanner begin /k:"microsoft_kiota-abstractions-dotnet" /o:"microsoft" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="tests/abstractions/coverage.net8.0.opencover.xml,tests/authentication/azure/coverage.net8.0.opencover.xml,tests/http/httpClient/coverage.net8.0.opencover.xml,tests/serialization/json/coverage.net8.0.opencover.xml,tests/serialization/text/coverage.net8.0.opencover.xml,tests/serialization/form/coverage.net8.0.opencover.xml,tests/serialization/multipart/coverage.net8.0.opencover.xml,tests/bundle/coverage.net8.0.opencover.xml"
6666
dotnet workload restore
6767
dotnet build
6868
dotnet test Microsoft.Kiota.sln --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --framework net8.0

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.10.0] - 2024-07-17
11+
12+
- Adds Kiota bundle package to provide default adapter with registrations setup. [#290](https://github.com/microsoft/kiota-dotnet/issues/290)
13+
1014
## [1.9.12] - 2024-07-30
1115

1216
- Fix non IParasable object serialization.

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22
<!-- Common default project properties for ALL projects-->
33
<PropertyGroup>
4-
<VersionPrefix>1.9.12</VersionPrefix>
4+
<VersionPrefix>1.10.0</VersionPrefix>
55
<VersionSuffix></VersionSuffix>
66
<!-- This is overidden in test projects by setting to true-->
77
<IsTestProject>false</IsTestProject>

Microsoft.Kiota.sln

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Kiota.Serializati
4444
EndProject
4545
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Kiota.Serialization.Text.Tests", "tests\serialization\text\Microsoft.Kiota.Serialization.Text.Tests.csproj", "{5F6AC278-C4A4-4EED-A7D3-1750A4D6FD15}"
4646
EndProject
47-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Kiota.Trimming.Validation", "tests\trimming\Microsoft.Kiota.Trimming.Validation\Microsoft.Kiota.Trimming.Validation.csproj", "{13992912-662D-4A3B-9354-DD49DB1AC2D5}"
47+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Kiota.Trimming.Validation", "tests\trimming\Microsoft.Kiota.Trimming.Validation\Microsoft.Kiota.Trimming.Validation.csproj", "{13992912-662D-4A3B-9354-DD49DB1AC2D5}"
48+
EndProject
49+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Kiota.Bundle", "src\bundle\Microsoft.Kiota.Bundle.csproj", "{3F1F2EF2-8C57-4FC2-9722-68FAE551D19E}"
50+
EndProject
51+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Kiota.Bundle.Tests", "tests\bundle\Microsoft.Kiota.Bundle.Tests.csproj", "{A1155A75-88FB-4C21-AA96-240A0E69FF1A}"
4852
EndProject
4953
Global
5054
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -116,6 +120,14 @@ Global
116120
{13992912-662D-4A3B-9354-DD49DB1AC2D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
117121
{13992912-662D-4A3B-9354-DD49DB1AC2D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
118122
{13992912-662D-4A3B-9354-DD49DB1AC2D5}.Release|Any CPU.Build.0 = Release|Any CPU
123+
{3F1F2EF2-8C57-4FC2-9722-68FAE551D19E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
124+
{3F1F2EF2-8C57-4FC2-9722-68FAE551D19E}.Debug|Any CPU.Build.0 = Debug|Any CPU
125+
{3F1F2EF2-8C57-4FC2-9722-68FAE551D19E}.Release|Any CPU.ActiveCfg = Release|Any CPU
126+
{3F1F2EF2-8C57-4FC2-9722-68FAE551D19E}.Release|Any CPU.Build.0 = Release|Any CPU
127+
{A1155A75-88FB-4C21-AA96-240A0E69FF1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
128+
{A1155A75-88FB-4C21-AA96-240A0E69FF1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
129+
{A1155A75-88FB-4C21-AA96-240A0E69FF1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
130+
{A1155A75-88FB-4C21-AA96-240A0E69FF1A}.Release|Any CPU.Build.0 = Release|Any CPU
119131
EndGlobalSection
120132
GlobalSection(SolutionProperties) = preSolution
121133
HideSolutionNode = FALSE

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ Read more about Kiota [here](https://github.com/microsoft/kiota/blob/main/README
1212

1313
## Libraries
1414

15-
| Library | Nuget Release |
16-
| ------ | ------ |
17-
| [Abstractions](./src/abstractions/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Abstractions?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Abstractions/) |
18-
| [Authentication - Azure](./src/authentication/azure/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Authentication.Azure?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Authentication.Azure/) |
19-
| [Http - HttpClientLibrary](./src/http/httpClient/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Http.HttpClientLibrary?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Http.HttpClientLibrary/) |
20-
| [Serialization - JSON](./src/serialization/json/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Json?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Json/) |
21-
| [Serialization - FORM](./src/serialization/form/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Form?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Form/) |
22-
| [Serialization - TEXT](./src/serialization/text/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Text?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Text/) |
15+
| Library | Nuget Release |
16+
|----------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
17+
| [Abstractions](./src/abstractions/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Abstractions?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Abstractions/) |
18+
| [Authentication - Azure](./src/authentication/azure/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Authentication.Azure?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Authentication.Azure/) |
19+
| [Http - HttpClientLibrary](./src/http/httpClient/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Http.HttpClientLibrary?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Http.HttpClientLibrary/) |
20+
| [Serialization - JSON](./src/serialization/json/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Json?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Json/) |
21+
| [Serialization - FORM](./src/serialization/form/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Form?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Form/) |
22+
| [Serialization - TEXT](./src/serialization/text/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Text?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Text/) |
2323
| [Serialization - MULTIPART](./src/serialization/multipart/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Serialization.Multipart?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Serialization.Multipart/) |
24+
| [Bundle](./src/bundle/README.md) | [![NuGet Version](https://buildstats.info/nuget/Microsoft.Kiota.Bundle?includePreReleases=true)](https://www.nuget.org/packages/Microsoft.Kiota.Bundle/) |
2425

2526
## Release notes
2627

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// ------------------------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
3+
// ------------------------------------------------------------------------------
4+
5+
using System.Net.Http;
6+
using Microsoft.Kiota.Abstractions;
7+
using Microsoft.Kiota.Abstractions.Authentication;
8+
using Microsoft.Kiota.Abstractions.Serialization;
9+
using Microsoft.Kiota.Http.HttpClientLibrary;
10+
using Microsoft.Kiota.Serialization.Form;
11+
using Microsoft.Kiota.Serialization.Json;
12+
using Microsoft.Kiota.Serialization.Multipart;
13+
using Microsoft.Kiota.Serialization.Text;
14+
15+
namespace Microsoft.Kiota.Bundle
16+
{
17+
/// <summary>
18+
/// The <see cref="IRequestAdapter"/> implementation that derived from <see cref="HttpClientRequestAdapter"/> with registrations configured.
19+
/// </summary>
20+
public class DefaultRequestAdapter : HttpClientRequestAdapter
21+
{
22+
/// <summary>
23+
/// Initializes a new instance of the <see cref="DefaultRequestAdapter"/> class.
24+
/// </summary>
25+
/// <param name="authenticationProvider">The authentication provider.</param>
26+
/// <param name="parseNodeFactory">The parse node factory.</param>
27+
/// <param name="serializationWriterFactory">The serialization writer factory.</param>
28+
/// <param name="httpClient">The native HTTP client.</param>
29+
/// <param name="observabilityOptions">The observability options.</param>
30+
public DefaultRequestAdapter(IAuthenticationProvider authenticationProvider, IParseNodeFactory? parseNodeFactory = null, ISerializationWriterFactory? serializationWriterFactory = null, HttpClient? httpClient = null, ObservabilityOptions? observabilityOptions = null) : base(authenticationProvider, parseNodeFactory, serializationWriterFactory, httpClient, observabilityOptions)
31+
{
32+
SetupDefaults();
33+
}
34+
35+
private static void SetupDefaults()
36+
{
37+
// Setup the default serializers/deserializers
38+
ApiClientBuilder.RegisterDefaultSerializer<JsonSerializationWriterFactory>();
39+
ApiClientBuilder.RegisterDefaultSerializer<TextSerializationWriterFactory>();
40+
ApiClientBuilder.RegisterDefaultSerializer<FormSerializationWriterFactory>();
41+
ApiClientBuilder.RegisterDefaultSerializer<MultipartSerializationWriterFactory>();
42+
ApiClientBuilder.RegisterDefaultDeserializer<JsonParseNodeFactory>();
43+
ApiClientBuilder.RegisterDefaultDeserializer<TextParseNodeFactory>();
44+
ApiClientBuilder.RegisterDefaultDeserializer<FormParseNodeFactory>();
45+
}
46+
}
47+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<Sdk Name="Microsoft.DotNet.PackageValidation" Version="1.0.0-preview.7.21379.12" />
3+
4+
<PropertyGroup>
5+
<Description>Kiota Bundle package providing default implementations for client setup.</Description>
6+
<AssemblyTitle>Kiota Bundle package for dotnet</AssemblyTitle>
7+
<!-- NET 5 target to be removed on next major version-->
8+
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0;net8.0</TargetFrameworks>
9+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="..\abstractions\Microsoft.Kiota.Abstractions.csproj" />
14+
<ProjectReference Include="..\http\httpClient\Microsoft.Kiota.Http.HttpClientLibrary.csproj" />
15+
<ProjectReference Include="..\serialization\form\Microsoft.Kiota.Serialization.Form.csproj" />
16+
<ProjectReference Include="..\serialization\json\Microsoft.Kiota.Serialization.Json.csproj" />
17+
<ProjectReference Include="..\serialization\multipart\Microsoft.Kiota.Serialization.Multipart.csproj" />
18+
<ProjectReference Include="..\serialization\text\Microsoft.Kiota.Serialization.Text.csproj" />
19+
</ItemGroup>
20+
21+
</Project>

src/bundle/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Kiota Bundle Library for dotnet
2+
3+
The Kiota Bundle Library for dotnet is the dotnet library providing default implementations for client setup.
4+
The package provides a request adapter implementation with defaults serialization libraries setup fo use with a generated Kiota client.
5+
6+
Read more about Kiota [here](https://github.com/microsoft/kiota/blob/main/README.md).
7+
8+
## Using the Bundle Library
9+
10+
```shell
11+
dotnet add package Microsoft.Kiota.Bundle
12+
```
13+
14+
## Debugging
15+
16+
If you are using Visual Studio Code as your IDE, the **launch.json** file already contains the configuration to build and test the library. Otherwise, you can open the **Microsoft.Kiota.Abstractions.sln** with Visual Studio.
17+
18+
## Contributing
19+
20+
This project welcomes contributions and suggestions. Most contributions require you to agree to a
21+
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
22+
the rights to use your contribution. For details, visit [https://cla.opensource.microsoft.com](https://cla.opensource.microsoft.com).
23+
24+
When you submit a pull request, a CLA bot will automatically determine whether you need to provide
25+
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
26+
provided by the bot. You will only need to do this once across all repos using our CLA.
27+
28+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
29+
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
30+
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
31+
32+
## Trademarks
33+
34+
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
35+
trademarks or logos is subject to and must follow
36+
[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general).
37+
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
38+
Any use of third-party trademarks or logos are subject to those third-party's policies.

tests/bundle/BundleTests.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using Microsoft.Kiota.Abstractions.Authentication;
3+
using Microsoft.Kiota.Abstractions.Serialization;
4+
using Xunit;
5+
6+
namespace Microsoft.Kiota.Bundle.Tests
7+
{
8+
public class BundleTests
9+
{
10+
[Fact]
11+
public void ThrowsArgumentNullExceptionOnNullAuthenticationProvider()
12+
{
13+
var exception = Assert.Throws<ArgumentNullException>(() => new DefaultRequestAdapter(null!));
14+
Assert.Equal("authenticationProvider", exception.ParamName);
15+
}
16+
17+
[Fact]
18+
public void SerializersAreRegisteredAsExpected()
19+
{
20+
// setup
21+
_ = new DefaultRequestAdapter(new AnonymousAuthenticationProvider());
22+
23+
// validate
24+
var serializerCount = SerializationWriterFactoryRegistry.DefaultInstance.ContentTypeAssociatedFactories.Count;
25+
var deserializerCount = ParseNodeFactoryRegistry.DefaultInstance.ContentTypeAssociatedFactories.Count;
26+
27+
Assert.Equal(4, serializerCount); // four serializers present
28+
Assert.Equal(3, deserializerCount);// three deserializers present
29+
30+
var serializerKeys = SerializationWriterFactoryRegistry.DefaultInstance.ContentTypeAssociatedFactories.Keys;
31+
var deserializerKeys = ParseNodeFactoryRegistry.DefaultInstance.ContentTypeAssociatedFactories.Keys;
32+
33+
Assert.Contains("application/json", serializerKeys);
34+
Assert.Contains("application/json", deserializerKeys);// Serializer and deserializer present for application/json
35+
36+
Assert.Contains("text/plain", serializerKeys);
37+
Assert.Contains("text/plain", deserializerKeys);// Serializer and deserializer present for text/plain
38+
39+
Assert.Contains("application/x-www-form-urlencoded", serializerKeys);
40+
Assert.Contains("application/x-www-form-urlencoded", deserializerKeys);// Serializer and deserializer present for application/x-www-form-urlencoded
41+
42+
Assert.Contains("multipart/form-data", serializerKeys);// Serializer present for multipart/form-data
43+
}
44+
}
45+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<IsTestProject>true</IsTestProject>
5+
<TargetFrameworks>net8.0;net462</TargetFrameworks>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="coverlet.msbuild" Version="6.0.2">
10+
<PrivateAssets>all</PrivateAssets>
11+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
12+
</PackageReference>
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
14+
<!-- We need Microsoft.TestPlatform.ObjectModel for net framework execution in linux
15+
environments https://github.com/microsoft/vstest/issues/2469-->
16+
<PackageReference Include="Microsoft.TestPlatform.ObjectModel" Version="17.10.0" />
17+
<PackageReference Include="Moq" Version="4.20.70" />
18+
<PackageReference Include="xunit" Version="2.9.0" />
19+
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
20+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
21+
<PrivateAssets>all</PrivateAssets>
22+
</PackageReference>
23+
<PackageReference Include="coverlet.collector" Version="6.0.2">
24+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
25+
<PrivateAssets>all</PrivateAssets>
26+
</PackageReference>
27+
</ItemGroup>
28+
29+
<ItemGroup>
30+
<ProjectReference Include="..\..\src\bundle\Microsoft.Kiota.Bundle.csproj" />
31+
</ItemGroup>
32+
33+
</Project>

0 commit comments

Comments
 (0)