csharp/Microsoft.Azure.Databricks.Client/WorkspaceApiClient.cs (58 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System;
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 WorkspaceApiClient : ApiClient, IWorkspaceApi
{
public WorkspaceApiClient(HttpClient httpClient) : base(httpClient)
{
}
public async Task Delete(string path, bool recursive, CancellationToken cancellationToken = default)
{
var request = JsonSerializer.SerializeToNode(new { path, recursive }, Options)!.AsObject();
await HttpPost(this.HttpClient, $"{ApiVersion}/workspace/delete", request, cancellationToken)
.ConfigureAwait(false);
}
public async Task<byte[]> Export(string path, ExportFormat format, CancellationToken cancellationToken = default)
{
var url = $"{ApiVersion}/workspace/export?path={path}&format={format}";
var result = await HttpGet<JsonObject>(this.HttpClient, url, cancellationToken).ConfigureAwait(false);
return Convert.FromBase64String(result["content"]!.GetValue<string>());
}
public async Task<ObjectInfo> GetStatus(string path, CancellationToken cancellationToken = default)
{
var url = $"{ApiVersion}/workspace/get-status?path={path}";
return await HttpGet<ObjectInfo>(this.HttpClient, url, cancellationToken).ConfigureAwait(false);
}
public async Task Import(string path, ExportFormat format, Language? language, byte[] content, bool overwrite,
CancellationToken cancellationToken = default)
{
var request = JsonSerializer.SerializeToNode(new
{ path, format = format.ToString(), language = language?.ToString(), content, overwrite })!.AsObject();
await HttpPost(this.HttpClient, $"{ApiVersion}/workspace/import", request, cancellationToken)
.ConfigureAwait(false);
}
public async Task<IEnumerable<ObjectInfo>> List(string path, CancellationToken cancellationToken = default)
{
var url = $"{ApiVersion}/workspace/list?path={path}";
var result = await HttpGet<JsonObject>(this.HttpClient, url, cancellationToken).ConfigureAwait(false);
return result.TryGetPropertyValue("objects", out var objects)
? from obj in objects!.AsArray() select obj.Deserialize<ObjectInfo>(Options)
: Enumerable.Empty<ObjectInfo>();
}
public async Task Mkdirs(string path, CancellationToken cancellationToken = default)
{
var request = JsonSerializer.SerializeToNode(new { path }, Options)!.AsObject();
await HttpPost(this.HttpClient,
$"{ApiVersion}/workspace/mkdirs",
request,
cancellationToken).ConfigureAwait(false);
}
}