From 1b223dffebf1d2c0c0616b884d58a1eacea17e9b Mon Sep 17 00:00:00 2001 From: Caio Saldanha Date: Fri, 26 Feb 2021 16:34:16 -0800 Subject: [PATCH] [FormRecognizer] Added autorest transform to support old service versions --- .../src/FormRecognizerClient.cs | 4 +- .../src/FormRecognizerClientOptions.cs | 6 +- .../src/FormTrainingClient.cs | 4 +- .../src/Generated/FormRecognizerRestClient.cs | 86 +++++++++++++------ .../Azure.AI.FormRecognizer/src/autorest.md | 33 +++++++ 5 files changed, 99 insertions(+), 34 deletions(-) diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClient.cs b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClient.cs index c5f15e3a0e96..28981be3c536 100644 --- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClient.cs +++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClient.cs @@ -58,7 +58,7 @@ public FormRecognizerClient(Uri endpoint, AzureKeyCredential credential, FormRec Diagnostics = new ClientDiagnostics(options); var pipeline = HttpPipelineBuilder.Build(options, new AzureKeyCredentialPolicy(credential, Constants.AuthorizationHeader)); - ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri); + ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, options.GetVersionString()); } /// @@ -93,7 +93,7 @@ public FormRecognizerClient(Uri endpoint, TokenCredential credential, FormRecogn Diagnostics = new ClientDiagnostics(options); var pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope)); - ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri); + ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, options.GetVersionString()); } /// diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClientOptions.cs b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClientOptions.cs index bf45efe857e4..9470ccbf208c 100644 --- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClientOptions.cs +++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClientOptions.cs @@ -49,13 +49,13 @@ public enum ServiceVersion /// public ServiceVersion Version { get; } - internal static string GetVersionString(ServiceVersion version) + internal string GetVersionString() { - return version switch + return Version switch { ServiceVersion.V2_0 => "v2.0", ServiceVersion.V2_1_Preview_2 => "v2.1-preview.2", - _ => throw new NotSupportedException($"The service version {version} is not supported."), + _ => throw new NotSupportedException($"The service version {Version} is not supported."), }; } diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormTrainingClient.cs b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormTrainingClient.cs index ad0bce1fd753..381a97c4b660 100644 --- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormTrainingClient.cs +++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormTrainingClient.cs @@ -66,7 +66,7 @@ public FormTrainingClient(Uri endpoint, AzureKeyCredential credential, FormRecog Diagnostics = new ClientDiagnostics(options); HttpPipeline pipeline = HttpPipelineBuilder.Build(options, new AzureKeyCredentialPolicy(credential, Constants.AuthorizationHeader)); - ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri); + ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, options.GetVersionString()); } /// @@ -101,7 +101,7 @@ public FormTrainingClient(Uri endpoint, TokenCredential credential, FormRecogniz Diagnostics = new ClientDiagnostics(options); var pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope)); - ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri); + ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, options.GetVersionString()); } #region Training diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/Generated/FormRecognizerRestClient.cs b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/Generated/FormRecognizerRestClient.cs index 6e88a626f3cb..b28affc32021 100644 --- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/Generated/FormRecognizerRestClient.cs +++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/Generated/FormRecognizerRestClient.cs @@ -21,6 +21,7 @@ namespace Azure.AI.FormRecognizer internal partial class FormRecognizerRestClient { private string endpoint; + private string serviceVersion; private ClientDiagnostics _clientDiagnostics; private HttpPipeline _pipeline; @@ -28,15 +29,21 @@ internal partial class FormRecognizerRestClient /// The handler for diagnostic messaging in the client. /// The HTTP pipeline for sending and receiving REST requests and responses. /// Supported Cognitive Services endpoints (protocol and hostname, for example: https://westus2.api.cognitive.microsoft.com). - /// is null. - public FormRecognizerRestClient(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, string endpoint) + /// serviceVersion - server parameter. + /// or is null. + public FormRecognizerRestClient(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, string endpoint, string serviceVersion) { if (endpoint == null) { throw new ArgumentNullException(nameof(endpoint)); } + if (serviceVersion == null) + { + throw new ArgumentNullException(nameof(serviceVersion)); + } this.endpoint = endpoint; + this.serviceVersion = serviceVersion; _clientDiagnostics = clientDiagnostics; _pipeline = pipeline; } @@ -48,7 +55,8 @@ internal HttpMessage CreateTrainCustomModelAsyncRequest(TrainRequest trainReques request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models", false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); @@ -112,7 +120,8 @@ internal HttpMessage CreateGetCustomModelRequest(Guid modelId, bool? includeKeys request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); if (includeKeys != null) @@ -175,7 +184,8 @@ internal HttpMessage CreateDeleteCustomModelRequest(Guid modelId) request.Method = RequestMethod.Delete; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); request.Uri = uri; @@ -222,7 +232,8 @@ internal HttpMessage CreateAnalyzeWithCustomModelRequest(Guid modelId, FormConte request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); uri.AppendPath("/analyze", false); @@ -287,7 +298,8 @@ internal HttpMessage CreateAnalyzeWithCustomModelRequest(Guid modelId, bool? inc request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); uri.AppendPath("/analyze", false); @@ -352,7 +364,8 @@ internal HttpMessage CreateGetAnalyzeFormResultRequest(Guid modelId, Guid result request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); uri.AppendPath("/analyzeResults/", false); @@ -413,7 +426,8 @@ internal HttpMessage CreateCopyCustomModelRequest(Guid modelId, CopyRequest copy request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); uri.AppendPath("/copy", false); @@ -481,7 +495,8 @@ internal HttpMessage CreateGetCustomModelCopyResultRequest(Guid modelId, Guid re request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/", false); uri.AppendPath(modelId, true); uri.AppendPath("/copyResults/", false); @@ -542,7 +557,8 @@ internal HttpMessage CreateGenerateModelCopyAuthorizationRequest() request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/copyAuthorization", false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); @@ -598,7 +614,8 @@ internal HttpMessage CreateComposeCustomModelsAsyncRequest(ComposeRequest compos request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models/compose", false); request.Uri = uri; request.Headers.Add("Accept", "application/json, text/json"); @@ -674,7 +691,8 @@ internal HttpMessage CreateAnalyzeBusinessCardAsyncRequest(ContentType1 contentT request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/businessCard/analyze", false); if (includeTextDetails != null) { @@ -741,7 +759,8 @@ internal HttpMessage CreateAnalyzeBusinessCardAsyncRequest(bool? includeTextDeta request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/businessCard/analyze", false); if (includeTextDetails != null) { @@ -808,7 +827,8 @@ internal HttpMessage CreateGetAnalyzeBusinessCardResultRequest(Guid resultId) request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/businessCard/analyzeResults/", false); uri.AppendPath(resultId, true); request.Uri = uri; @@ -865,7 +885,8 @@ internal HttpMessage CreateAnalyzeInvoiceAsyncRequest(ContentType1 contentType, request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/invoice/analyze", false); if (includeTextDetails != null) { @@ -932,7 +953,8 @@ internal HttpMessage CreateAnalyzeInvoiceAsyncRequest(bool? includeTextDetails, request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/invoice/analyze", false); if (includeTextDetails != null) { @@ -999,7 +1021,8 @@ internal HttpMessage CreateGetAnalyzeInvoiceResultRequest(Guid resultId) request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/invoice/analyzeResults/", false); uri.AppendPath(resultId, true); request.Uri = uri; @@ -1056,7 +1079,8 @@ internal HttpMessage CreateAnalyzeReceiptAsyncRequest(ContentType1 contentType, request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/receipt/analyze", false); if (includeTextDetails != null) { @@ -1123,7 +1147,8 @@ internal HttpMessage CreateAnalyzeReceiptAsyncRequest(bool? includeTextDetails, request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/receipt/analyze", false); if (includeTextDetails != null) { @@ -1190,7 +1215,8 @@ internal HttpMessage CreateGetAnalyzeReceiptResultRequest(Guid resultId) request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/prebuilt/receipt/analyzeResults/", false); uri.AppendPath(resultId, true); request.Uri = uri; @@ -1247,7 +1273,8 @@ internal HttpMessage CreateAnalyzeLayoutAsyncRequest(ContentType1 contentType, F request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/layout/analyze", false); if (language != null) { @@ -1314,7 +1341,8 @@ internal HttpMessage CreateAnalyzeLayoutAsyncRequest(FormRecognizerLanguage? lan request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/layout/analyze", false); if (language != null) { @@ -1381,7 +1409,8 @@ internal HttpMessage CreateGetAnalyzeLayoutResultRequest(Guid resultId) request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/layout/analyzeResults/", false); uri.AppendPath(resultId, true); request.Uri = uri; @@ -1438,7 +1467,8 @@ internal HttpMessage CreateListCustomModelsRequest() request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models", false); uri.AppendQuery("op", "full", true); request.Uri = uri; @@ -1493,7 +1523,8 @@ internal HttpMessage CreateGetCustomModelsRequest() request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendPath("/custom/models", false); uri.AppendQuery("op", "summary", true); request.Uri = uri; @@ -1548,7 +1579,8 @@ internal HttpMessage CreateListCustomModelsNextPageRequest(string nextLink) request.Method = RequestMethod.Get; var uri = new RawRequestUriBuilder(); uri.AppendRaw(endpoint, false); - uri.AppendRaw("/formrecognizer/v2.1-preview.2", false); + uri.AppendRaw("/formrecognizer/", false); + uri.AppendRaw(serviceVersion, false); uri.AppendRawNextLink(nextLink, false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); diff --git a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/autorest.md b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/autorest.md index f94e1e06cac5..ad3e6f0bc32c 100644 --- a/sdk/formrecognizer/Azure.AI.FormRecognizer/src/autorest.md +++ b/sdk/formrecognizer/Azure.AI.FormRecognizer/src/autorest.md @@ -11,8 +11,41 @@ require: - https://github.com/Azure/azure-rest-api-specs/blob/788507c386197b1ba7878fa00fe30871b8b01f22/specification/cognitiveservices/data-plane/FormRecognizer/readme.md ``` +### Change host template to support old service versions + +``` yaml +directive: +- from: swagger-document + where: $["x-ms-parameterized-host"] + transform: > + $["hostTemplate"] = "{endpoint}/formrecognizer/{serviceVersion}"; + $["parameters"] = [ + { + "$ref": "#/parameters/Endpoint" + }, + { + "$ref": "#/parameters/ServiceVersion" + } + ] +``` + +``` yaml +directive: +- from: swagger-document + where: $.parameters + transform: > + $["ServiceVersion"] = { + "name": "serviceVersion", + "in": "path", + "x-ms-parameter-location": "client", + "required": true, + "type": "string", + "x-ms-skip-url-encoding": true + } +``` ### Make AnalyzeResult.readResult optional + This is a temporary work-around ``` yaml directive: