csharp/Microsoft.Azure.Databricks.Client/WarehouseApiClient.cs (60 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client
{
public class WarehouseApiClient : ApiClient, IWarehouseApi
{
private readonly string _apiBaseUrl;
public WarehouseApiClient(HttpClient httpClient) : base(httpClient)
{
_apiBaseUrl = $"{ApiVersion}/sql/warehouses";
}
public async Task<string> Create(WarehouseAttributes warehouseAttributes, CancellationToken cancellationToken = default)
{
var jsonObj = JsonSerializer.SerializeToNode(warehouseAttributes, Options)!.AsObject();
var warehouseIdentifier = await HttpPost<JsonObject, JsonObject>(
this.HttpClient,
this._apiBaseUrl,
jsonObj,
cancellationToken
).ConfigureAwait(false);
return warehouseIdentifier["id"]!.GetValue<string>();
}
public async Task Delete(string id, CancellationToken cancellationToken = default)
{
var requestUri = $"{this._apiBaseUrl}/{id}";
await HttpDelete(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<WarehouseInfo> Get(string id, CancellationToken cancellationToken = default)
{
var requestUri = $"{this._apiBaseUrl}/{id}";
return await HttpGet<WarehouseInfo>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<WarehouseInfo>> List(int? runAsUserId = default, CancellationToken cancellationToken = default)
{
var requestUri = runAsUserId == null ? this._apiBaseUrl : $"{this._apiBaseUrl}?run_as_user_id={runAsUserId.Value}";
var warehouseList = await HttpGet<JsonObject>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
warehouseList.TryGetPropertyValue("warehouses", out var warehousesNode);
return warehousesNode?.Deserialize<IEnumerable<WarehouseInfo>>(Options) ?? Enumerable.Empty<WarehouseInfo>();
}
public async Task Start(string id, CancellationToken cancellationToken = default)
{
await HttpPost(this.HttpClient, $"{this._apiBaseUrl}/{id}/start", new { }, cancellationToken).ConfigureAwait(false);
}
public async Task Stop(string id, CancellationToken cancellationToken = default)
{
await HttpPost(this.HttpClient, $"{this._apiBaseUrl}/{id}/stop", new { }, cancellationToken).ConfigureAwait(false);
}
public async Task Update(string id, WarehouseAttributes warehouseAttributes, CancellationToken cancellationToken = default)
{
await HttpPost(this.HttpClient, $"{this._apiBaseUrl}/{id}/edit", warehouseAttributes, cancellationToken).ConfigureAwait(false);
}
}
}