Enhance AbstractKubernetes SendRequest extensibility (#994)

This commit is contained in:
William Moy
2022-12-05 08:57:04 -08:00
committed by GitHub
parent 0918760464
commit a435aa44f4
3 changed files with 17 additions and 21 deletions

View File

@@ -54,19 +54,6 @@ public abstract partial class AbstractKubernetes
} }
} }
private Task<HttpResponseMessage> SendRequest<T>(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); public virtual TimeSpan HttpClientTimeout { get; set; } = TimeSpan.FromSeconds(100);
protected virtual MediaTypeHeaderValue GetHeader(object body) protected virtual MediaTypeHeaderValue GetHeader(object body)
@@ -108,7 +95,7 @@ public abstract partial class AbstractKubernetes
protected abstract Task<HttpOperationResponse<T>> CreateResultAsync<T>(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken); protected abstract Task<HttpOperationResponse<T>> CreateResultAsync<T>(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken);
protected abstract HttpRequestMessage CreateRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary<string, IReadOnlyList<string>> customHeaders); protected abstract Task<HttpResponseMessage> SendRequest<T>(string relativeUri, HttpMethod method, IReadOnlyDictionary<string, IReadOnlyList<string>> customHeaders, T body, CancellationToken cancellationToken);
protected abstract Task<HttpResponseMessage> SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken); protected abstract Task<HttpResponseMessage> SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken);
} }

View File

@@ -99,7 +99,7 @@ namespace k8s
return result; return result;
} }
protected override HttpRequestMessage CreateRequest(string relativeUri, HttpMethod method, IReadOnlyDictionary<string, IReadOnlyList<string>> customHeaders) protected override Task<HttpResponseMessage> SendRequest<T>(string relativeUri, HttpMethod method, IReadOnlyDictionary<string, IReadOnlyList<string>> customHeaders, T body, CancellationToken cancellationToken)
{ {
var httpRequest = new HttpRequestMessage 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<HttpResponseMessage> SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken) protected override async Task<HttpResponseMessage> SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken)

View File

@@ -52,19 +52,20 @@ public partial class AbstractKubernetes : I{{name}}Operations
{{/IfListNotEmpty operation.parameters}} {{/IfListNotEmpty operation.parameters}}
// Create HTTP transport // Create HTTP transport
var httpRequest = CreateRequest(url, HttpMethods.{{Method}}, customHeaders);
{{#IfParamContains operation "body"}} {{#IfParamContains operation "body"}}
var httpResponse = await SendRequest(body, httpRequest, cancellationToken); var httpResponse = await SendRequest(url, HttpMethods.{{Method}}, customHeaders, body, cancellationToken);
{{/IfParamContains operation "body"}} {{/IfParamContains operation "body"}}
{{#IfParamDoesNotContain operation "body"}} {{#IfParamDoesNotContain operation "body"}}
var httpResponse = await SendRequestRaw("", httpRequest, cancellationToken); var httpResponse = await SendRequest<object>(url, HttpMethods.{{Method}}, customHeaders, null, cancellationToken);
{{/IfParamDoesNotContain operation "body"}} {{/IfParamDoesNotContain operation "body"}}
// Create Result // Create Result
var httpRequest = httpResponse.RequestMessage;
{{#IfReturnType operation "void"}} {{#IfReturnType operation "void"}}
HttpOperationResponse result = new HttpOperationResponse() { Request = httpRequest, Response = httpResponse }; HttpOperationResponse result = new HttpOperationResponse() { Request = httpRequest, Response = httpResponse };
{{/IfReturnType operation "void"}} {{/IfReturnType operation "void"}}
{{#IfReturnType operation "obj"}} {{#IfReturnType operation "obj"}}
var result = await CreateResultAsync{{GetReturnType operation "<>"}}(httpRequest, var result = await CreateResultAsync{{GetReturnType operation "<>"}}(
httpRequest,
httpResponse, httpResponse,
{{#IfParamContains operation "watch"}} {{#IfParamContains operation "watch"}}
watch, watch,