Skip to content

Commit 9389d79

Browse files
committed
pass cancellation token
1 parent ebdbbe6 commit 9389d79

File tree

5 files changed

+27
-15
lines changed

5 files changed

+27
-15
lines changed

src/Microsoft.OpenApi.Hidi/OpenApiService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog
9797
}
9898

9999
// Load OpenAPI document
100-
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi).ConfigureAwait(false);
100+
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi, cancellationToken).ConfigureAwait(false);
101101
var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false);
102102

103103
if (options.FilterOptions != null)
@@ -586,7 +586,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl
586586
throw new ArgumentException("Please input a file path or URL");
587587
}
588588

589-
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi).ConfigureAwait(false);
589+
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi, cancellationToken).ConfigureAwait(false);
590590
var document = await GetOpenApiAsync(options, format, logger, null, cancellationToken).ConfigureAwait(false);
591591

592592
using (logger.BeginScope("Creating diagram"))
@@ -748,7 +748,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg
748748
}
749749

750750
// Load OpenAPI document
751-
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi).ConfigureAwait(false);
751+
var format = await OpenApiModelFactory.GetFormatAsync(options.OpenApi, cancellationToken).ConfigureAwait(false);
752752
var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false);
753753

754754
cancellationToken.ThrowIfCancellationRequested();

src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public async Task<ReadResult> ReadAsync(TextReader input,
4848
public async Task<ReadFragmentResult<T>> ReadFragmentAsync<T>(TextReader input,
4949
OpenApiSpecVersion version,
5050
OpenApiReaderSettings settings = null) where T : IOpenApiElement
51+
CancellationToken token = default) where T : IOpenApiElement
5152
{
5253
JsonNode jsonNode;
5354

src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System.IO;
@@ -38,8 +38,9 @@ public interface IOpenApiReader
3838
/// <param name="input">TextReader containing OpenAPI description to parse.</param>
3939
/// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param>
4040
/// <param name="settings">The OpenApiReader settings.</param>
41+
/// <param name="token"></param>
4142
/// <returns>Instance of newly created IOpenApiElement.</returns>
42-
Task<ReadFragmentResult<T>> ReadFragmentAsync<T>(TextReader input, OpenApiSpecVersion version, OpenApiReaderSettings settings = null) where T: IOpenApiElement;
43+
Task<ReadFragmentResult<T>> ReadFragmentAsync<T>(TextReader input, OpenApiSpecVersion version, OpenApiReaderSettings settings = null, CancellationToken token = default) where T : IOpenApiElement;
4344

4445
/// <summary>
4546
/// Reads the JsonNode input and parses the fragment of an OpenAPI description into an Open API Element.

src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System.IO;
@@ -41,7 +41,7 @@ public async Task<ReadResult> ReadAsync(TextReader input,
4141
// Parse the JSON text in the TextReader into JsonNodes
4242
try
4343
{
44-
jsonNode = await LoadJsonNodesAsync(input);
44+
jsonNode = await LoadJsonNodesAsync(input, cancellationToken);
4545
}
4646
catch (JsonException ex)
4747
{
@@ -123,14 +123,15 @@ public async Task<ReadResult> ReadAsync(JsonNode jsonNode,
123123
/// <inheritdoc/>
124124
public async Task<ReadFragmentResult<T>> ReadFragmentAsync<T>(TextReader input,
125125
OpenApiSpecVersion version,
126-
OpenApiReaderSettings settings = null) where T: IOpenApiElement
126+
OpenApiReaderSettings settings = null,
127+
CancellationToken token = default) where T: IOpenApiElement
127128
{
128129
JsonNode jsonNode;
129130

130131
// Parse the JSON
131132
try
132133
{
133-
jsonNode = await LoadJsonNodesAsync(input);
134+
jsonNode = await LoadJsonNodesAsync(input, token);
134135
}
135136
catch (JsonException ex)
136137
{
@@ -182,9 +183,13 @@ public ReadFragmentResult<T> ReadFragment<T>(JsonNode input,
182183
};
183184
}
184185

185-
private async Task<JsonNode> LoadJsonNodesAsync(TextReader input)
186+
private async Task<JsonNode> LoadJsonNodesAsync(TextReader input, CancellationToken token = default)
186187
{
188+
#if NETSTANDARD2_0
187189
var content = await input.ReadToEndAsync();
190+
#else
191+
var content = await input.ReadToEndAsync(token);
192+
#endif
188193
return JsonNode.Parse(content);
189194
}
190195

src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ static OpenApiModelFactory()
3535
/// <returns></returns>
3636
public static async Task<ReadResult> LoadAsync(string url, OpenApiReaderSettings settings = null, CancellationToken cancellationToken = default)
3737
{
38-
var format = await GetFormatAsync(url);
38+
var format = await GetFormatAsync(url, cancellationToken);
3939
var stream = await GetStreamAsync(url);
4040
return await LoadAsync(stream, format, settings);
4141
}
@@ -129,7 +129,7 @@ public static async Task<ReadFragmentResult<T>> LoadAsync<T>(string url,
129129
OpenApiReaderSettings settings = null,
130130
CancellationToken cancellationToken = default) where T : IOpenApiElement
131131
{
132-
var format = await GetFormatAsync(url);
132+
var format = await GetFormatAsync(url, cancellationToken);
133133
settings ??= new OpenApiReaderSettings();
134134
var stream = await GetStreamAsync(url);
135135
return await LoadAsync<T>(stream, version, format, settings);
@@ -172,11 +172,15 @@ public static async Task<ReadFragmentResult<T>> LoadAsync<T>(TextReader input,
172172
return await OpenApiReaderRegistry.GetReader(format).ReadFragmentAsync<T>(input, version, settings);
173173
}
174174

175-
private static async Task<string> GetContentTypeAsync(string url)
175+
private static async Task<string> GetContentTypeAsync(string url, CancellationToken token = default)
176176
{
177177
if (!string.IsNullOrEmpty(url))
178178
{
179+
#if NETSTANDARD2_0
179180
var response = await _httpClient.GetAsync(url);
181+
#else
182+
var response = await _httpClient.GetAsync(url, token);
183+
#endif
180184
var mediaType = response.Content.Headers.ContentType.MediaType;
181185
var contentType = mediaType.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).First();
182186
return contentType;
@@ -189,8 +193,9 @@ private static async Task<string> GetContentTypeAsync(string url)
189193
/// Infers the OpenAPI format from the input URL.
190194
/// </summary>
191195
/// <param name="url">The input URL.</param>
196+
/// <param name="token"></param>
192197
/// <returns>The OpenAPI format.</returns>
193-
public static async Task<string> GetFormatAsync(string url)
198+
public static async Task<string> GetFormatAsync(string url, CancellationToken token = default)
194199
{
195200
if (!string.IsNullOrEmpty(url))
196201
{
@@ -207,7 +212,7 @@ public static async Task<string> GetFormatAsync(string url)
207212
}
208213
else
209214
{
210-
var contentType = await GetContentTypeAsync(url);
215+
var contentType = await GetContentTypeAsync(url, token);
211216
return contentType.Split('/').LastOrDefault();
212217
}
213218
}

0 commit comments

Comments
 (0)