From a435aa44f4a010d961b35d9344ab87c7a955b510 Mon Sep 17 00:00:00 2001 From: William Moy Date: Mon, 5 Dec 2022 08:57:04 -0800 Subject: [PATCH] Enhance AbstractKubernetes SendRequest extensibility (#994) --- src/KubernetesClient.Basic/AbstractKubernetes.cs | 15 +-------------- src/KubernetesClient/Kubernetes.cs | 12 ++++++++++-- .../templates/Operations.cs.template | 11 ++++++----- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/KubernetesClient.Basic/AbstractKubernetes.cs b/src/KubernetesClient.Basic/AbstractKubernetes.cs index c4b30d8..4daf250 100644 --- a/src/KubernetesClient.Basic/AbstractKubernetes.cs +++ b/src/KubernetesClient.Basic/AbstractKubernetes.cs @@ -54,19 +54,6 @@ public abstract partial class AbstractKubernetes } } - private Task SendRequest(T body, HttpRequestMessage httpRequest, CancellationToken cancellationToken) - { - if (body != null) - { - var requestContent = KubernetesJson.Serialize(body); - httpRequest.Content = new StringContent(requestContent, System.Text.Encoding.UTF8); - httpRequest.Content.Headers.ContentType = GetHeader(body); - return SendRequestRaw(requestContent, httpRequest, cancellationToken); - } - - return SendRequestRaw("", httpRequest, cancellationToken); - } - public virtual TimeSpan HttpClientTimeout { get; set; } = TimeSpan.FromSeconds(100); protected virtual MediaTypeHeaderValue GetHeader(object body) @@ -108,7 +95,7 @@ public abstract partial class AbstractKubernetes protected abstract Task> CreateResultAsync(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken); - protected abstract HttpRequestMessage CreateRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary> customHeaders); + protected abstract Task SendRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary> customHeaders, T body, CancellationToken cancellationToken); protected abstract Task SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken); } diff --git a/src/KubernetesClient/Kubernetes.cs b/src/KubernetesClient/Kubernetes.cs index 353dcf3..1e731fc 100644 --- a/src/KubernetesClient/Kubernetes.cs +++ b/src/KubernetesClient/Kubernetes.cs @@ -99,7 +99,7 @@ namespace k8s return result; } - protected override HttpRequestMessage CreateRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary> customHeaders) + protected override Task SendRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary> customHeaders, T body, CancellationToken cancellationToken) { var httpRequest = new HttpRequestMessage { @@ -120,7 +120,15 @@ namespace k8s } } - return httpRequest; + if (body != null) + { + var requestContent = KubernetesJson.Serialize(body); + httpRequest.Content = new StringContent(requestContent, System.Text.Encoding.UTF8); + httpRequest.Content.Headers.ContentType = GetHeader(body); + return SendRequestRaw(requestContent, httpRequest, cancellationToken); + } + + return SendRequestRaw("", httpRequest, cancellationToken); } protected override async Task SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken) diff --git a/src/LibKubernetesGenerator/templates/Operations.cs.template b/src/LibKubernetesGenerator/templates/Operations.cs.template index 6e4088d..2297b0d 100644 --- a/src/LibKubernetesGenerator/templates/Operations.cs.template +++ b/src/LibKubernetesGenerator/templates/Operations.cs.template @@ -52,19 +52,20 @@ public partial class AbstractKubernetes : I{{name}}Operations {{/IfListNotEmpty operation.parameters}} // Create HTTP transport - var httpRequest = CreateRequest(url, HttpMethods.{{Method}}, customHeaders); {{#IfParamContains operation "body"}} - var httpResponse = await SendRequest(body, httpRequest, cancellationToken); + var httpResponse = await SendRequest(url, HttpMethods.{{Method}}, customHeaders, body, cancellationToken); {{/IfParamContains operation "body"}} {{#IfParamDoesNotContain operation "body"}} - var httpResponse = await SendRequestRaw("", httpRequest, cancellationToken); + var httpResponse = await SendRequest(url, HttpMethods.{{Method}}, customHeaders, null, cancellationToken); {{/IfParamDoesNotContain operation "body"}} - // Create Result + // Create Result + var httpRequest = httpResponse.RequestMessage; {{#IfReturnType operation "void"}} HttpOperationResponse result = new HttpOperationResponse() { Request = httpRequest, Response = httpResponse }; {{/IfReturnType operation "void"}} {{#IfReturnType operation "obj"}} - var result = await CreateResultAsync{{GetReturnType operation "<>"}}(httpRequest, + var result = await CreateResultAsync{{GetReturnType operation "<>"}}( + httpRequest, httpResponse, {{#IfParamContains operation "watch"}} watch,