Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
configured_endpoints: 109
configured_endpoints: 110
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/manugoyal%2Fbraintrust-sdk-f5b152de2bdc5370d7c823d3ca415e1b914897ad98b117f1f0db213f44c0798f.yml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ package com.braintrustdata.api.services.async
import com.braintrustdata.api.core.RequestOptions
import com.braintrustdata.api.core.http.HttpResponseFor
import com.braintrustdata.api.models.Acl
import com.braintrustdata.api.models.AclBatchUpdateParams
import com.braintrustdata.api.models.AclBatchUpdateResponse
import com.braintrustdata.api.models.AclCreateParams
import com.braintrustdata.api.models.AclDeleteParams
import com.braintrustdata.api.models.AclFindAndDeleteParams
Expand Down Expand Up @@ -67,6 +69,28 @@ interface AclServiceAsync {
requestOptions: RequestOptions = RequestOptions.none(),
): CompletableFuture<Acl>

/**
* Batch update acls. This operation is idempotent, so adding acls which already exist will have
* no effect, and removing acls which do not exist will have no effect.
*/
fun batchUpdate(): CompletableFuture<AclBatchUpdateResponse> =
batchUpdate(AclBatchUpdateParams.none())

/** @see [batchUpdate] */
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none(),
requestOptions: RequestOptions = RequestOptions.none(),
): CompletableFuture<AclBatchUpdateResponse>

/** @see [batchUpdate] */
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none()
): CompletableFuture<AclBatchUpdateResponse> = batchUpdate(params, RequestOptions.none())

/** @see [batchUpdate] */
fun batchUpdate(requestOptions: RequestOptions): CompletableFuture<AclBatchUpdateResponse> =
batchUpdate(AclBatchUpdateParams.none(), requestOptions)

/** Delete a single acl */
fun findAndDelete(params: AclFindAndDeleteParams): CompletableFuture<Acl> =
findAndDelete(params, RequestOptions.none())
Expand Down Expand Up @@ -140,6 +164,35 @@ interface AclServiceAsync {
requestOptions: RequestOptions = RequestOptions.none(),
): CompletableFuture<HttpResponseFor<Acl>>

/**
* Returns a raw HTTP response for `post /v1/acl/batch_update`, but is otherwise the same as
* [AclServiceAsync.batchUpdate].
*/
@MustBeClosed
fun batchUpdate(): CompletableFuture<HttpResponseFor<AclBatchUpdateResponse>> =
batchUpdate(AclBatchUpdateParams.none())

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none(),
requestOptions: RequestOptions = RequestOptions.none(),
): CompletableFuture<HttpResponseFor<AclBatchUpdateResponse>>

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none()
): CompletableFuture<HttpResponseFor<AclBatchUpdateResponse>> =
batchUpdate(params, RequestOptions.none())

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(
requestOptions: RequestOptions
): CompletableFuture<HttpResponseFor<AclBatchUpdateResponse>> =
batchUpdate(AclBatchUpdateParams.none(), requestOptions)

/**
* Returns a raw HTTP response for `delete /v1/acl`, but is otherwise the same as
* [AclServiceAsync.findAndDelete].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import com.braintrustdata.api.core.http.parseable
import com.braintrustdata.api.core.prepareAsync
import com.braintrustdata.api.errors.BraintrustError
import com.braintrustdata.api.models.Acl
import com.braintrustdata.api.models.AclBatchUpdateParams
import com.braintrustdata.api.models.AclBatchUpdateResponse
import com.braintrustdata.api.models.AclCreateParams
import com.braintrustdata.api.models.AclDeleteParams
import com.braintrustdata.api.models.AclFindAndDeleteParams
Expand Down Expand Up @@ -61,6 +63,13 @@ class AclServiceAsyncImpl internal constructor(private val clientOptions: Client
// delete /v1/acl/{acl_id}
withRawResponse().delete(params, requestOptions).thenApply { it.parse() }

override fun batchUpdate(
params: AclBatchUpdateParams,
requestOptions: RequestOptions,
): CompletableFuture<AclBatchUpdateResponse> =
// post /v1/acl/batch_update
withRawResponse().batchUpdate(params, requestOptions).thenApply { it.parse() }

override fun findAndDelete(
params: AclFindAndDeleteParams,
requestOptions: RequestOptions,
Expand Down Expand Up @@ -195,6 +204,37 @@ class AclServiceAsyncImpl internal constructor(private val clientOptions: Client
}
}

private val batchUpdateHandler: Handler<AclBatchUpdateResponse> =
jsonHandler<AclBatchUpdateResponse>(clientOptions.jsonMapper)
.withErrorHandler(errorHandler)

override fun batchUpdate(
params: AclBatchUpdateParams,
requestOptions: RequestOptions,
): CompletableFuture<HttpResponseFor<AclBatchUpdateResponse>> {
val request =
HttpRequest.builder()
.method(HttpMethod.POST)
.addPathSegments("v1", "acl", "batch_update")
.body(json(clientOptions.jsonMapper, params._body()))
.build()
.prepareAsync(clientOptions, params)
val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions))
return request
.thenComposeAsync { clientOptions.httpClient.executeAsync(it, requestOptions) }
.thenApply { response ->
response.parseable {
response
.use { batchUpdateHandler.handle(it) }
.also {
if (requestOptions.responseValidation!!) {
it.validate()
}
}
}
}
}

private val findAndDeleteHandler: Handler<Acl> =
jsonHandler<Acl>(clientOptions.jsonMapper).withErrorHandler(errorHandler)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ package com.braintrustdata.api.services.blocking
import com.braintrustdata.api.core.RequestOptions
import com.braintrustdata.api.core.http.HttpResponseFor
import com.braintrustdata.api.models.Acl
import com.braintrustdata.api.models.AclBatchUpdateParams
import com.braintrustdata.api.models.AclBatchUpdateResponse
import com.braintrustdata.api.models.AclCreateParams
import com.braintrustdata.api.models.AclDeleteParams
import com.braintrustdata.api.models.AclFindAndDeleteParams
Expand Down Expand Up @@ -56,6 +58,27 @@ interface AclService {
/** @see [delete] */
fun delete(params: AclDeleteParams, requestOptions: RequestOptions = RequestOptions.none()): Acl

/**
* Batch update acls. This operation is idempotent, so adding acls which already exist will have
* no effect, and removing acls which do not exist will have no effect.
*/
fun batchUpdate(): AclBatchUpdateResponse = batchUpdate(AclBatchUpdateParams.none())

/** @see [batchUpdate] */
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none(),
requestOptions: RequestOptions = RequestOptions.none(),
): AclBatchUpdateResponse

/** @see [batchUpdate] */
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none()
): AclBatchUpdateResponse = batchUpdate(params, RequestOptions.none())

/** @see [batchUpdate] */
fun batchUpdate(requestOptions: RequestOptions): AclBatchUpdateResponse =
batchUpdate(AclBatchUpdateParams.none(), requestOptions)

/** Delete a single acl */
fun findAndDelete(params: AclFindAndDeleteParams): Acl =
findAndDelete(params, RequestOptions.none())
Expand Down Expand Up @@ -129,6 +152,32 @@ interface AclService {
requestOptions: RequestOptions = RequestOptions.none(),
): HttpResponseFor<Acl>

/**
* Returns a raw HTTP response for `post /v1/acl/batch_update`, but is otherwise the same as
* [AclService.batchUpdate].
*/
@MustBeClosed
fun batchUpdate(): HttpResponseFor<AclBatchUpdateResponse> =
batchUpdate(AclBatchUpdateParams.none())

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none(),
requestOptions: RequestOptions = RequestOptions.none(),
): HttpResponseFor<AclBatchUpdateResponse>

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(
params: AclBatchUpdateParams = AclBatchUpdateParams.none()
): HttpResponseFor<AclBatchUpdateResponse> = batchUpdate(params, RequestOptions.none())

/** @see [batchUpdate] */
@MustBeClosed
fun batchUpdate(requestOptions: RequestOptions): HttpResponseFor<AclBatchUpdateResponse> =
batchUpdate(AclBatchUpdateParams.none(), requestOptions)

/**
* Returns a raw HTTP response for `delete /v1/acl`, but is otherwise the same as
* [AclService.findAndDelete].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import com.braintrustdata.api.core.http.parseable
import com.braintrustdata.api.core.prepare
import com.braintrustdata.api.errors.BraintrustError
import com.braintrustdata.api.models.Acl
import com.braintrustdata.api.models.AclBatchUpdateParams
import com.braintrustdata.api.models.AclBatchUpdateResponse
import com.braintrustdata.api.models.AclCreateParams
import com.braintrustdata.api.models.AclDeleteParams
import com.braintrustdata.api.models.AclFindAndDeleteParams
Expand Down Expand Up @@ -47,6 +49,13 @@ class AclServiceImpl internal constructor(private val clientOptions: ClientOptio
// delete /v1/acl/{acl_id}
withRawResponse().delete(params, requestOptions).parse()

override fun batchUpdate(
params: AclBatchUpdateParams,
requestOptions: RequestOptions,
): AclBatchUpdateResponse =
// post /v1/acl/batch_update
withRawResponse().batchUpdate(params, requestOptions).parse()

override fun findAndDelete(
params: AclFindAndDeleteParams,
requestOptions: RequestOptions,
Expand Down Expand Up @@ -167,6 +176,34 @@ class AclServiceImpl internal constructor(private val clientOptions: ClientOptio
}
}

private val batchUpdateHandler: Handler<AclBatchUpdateResponse> =
jsonHandler<AclBatchUpdateResponse>(clientOptions.jsonMapper)
.withErrorHandler(errorHandler)

override fun batchUpdate(
params: AclBatchUpdateParams,
requestOptions: RequestOptions,
): HttpResponseFor<AclBatchUpdateResponse> {
val request =
HttpRequest.builder()
.method(HttpMethod.POST)
.addPathSegments("v1", "acl", "batch_update")
.body(json(clientOptions.jsonMapper, params._body()))
.build()
.prepare(clientOptions, params)
val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions))
val response = clientOptions.httpClient.execute(request, requestOptions)
return response.parseable {
response
.use { batchUpdateHandler.handle(it) }
.also {
if (requestOptions.responseValidation!!) {
it.validate()
}
}
}
}

private val findAndDeleteHandler: Handler<Acl> =
jsonHandler<Acl>(clientOptions.jsonMapper).withErrorHandler(errorHandler)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// File generated from our OpenAPI spec by Stainless.

package com.braintrustdata.api.models

import kotlin.test.assertNotNull
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

class AclBatchUpdateParamsTest {

@Test
fun create() {
AclBatchUpdateParams.builder()
.addAddAcl(
AclBatchUpdateParams.AddAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.AddAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.AddAcl.Permission.CREATE)
.restrictObjectType(AclBatchUpdateParams.AddAcl.RestrictObjectType.ORGANIZATION)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
.addRemoveAcl(
AclBatchUpdateParams.RemoveAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.RemoveAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.RemoveAcl.Permission.CREATE)
.restrictObjectType(
AclBatchUpdateParams.RemoveAcl.RestrictObjectType.ORGANIZATION
)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
.build()
}

@Test
fun body() {
val params =
AclBatchUpdateParams.builder()
.addAddAcl(
AclBatchUpdateParams.AddAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.AddAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.AddAcl.Permission.CREATE)
.restrictObjectType(
AclBatchUpdateParams.AddAcl.RestrictObjectType.ORGANIZATION
)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
.addRemoveAcl(
AclBatchUpdateParams.RemoveAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.RemoveAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.RemoveAcl.Permission.CREATE)
.restrictObjectType(
AclBatchUpdateParams.RemoveAcl.RestrictObjectType.ORGANIZATION
)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
.build()

val body = params._body()

assertNotNull(body)
assertThat(body.addAcls())
.contains(
listOf(
AclBatchUpdateParams.AddAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.AddAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.AddAcl.Permission.CREATE)
.restrictObjectType(
AclBatchUpdateParams.AddAcl.RestrictObjectType.ORGANIZATION
)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
)
assertThat(body.removeAcls())
.contains(
listOf(
AclBatchUpdateParams.RemoveAcl.builder()
.objectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.objectType(AclBatchUpdateParams.RemoveAcl.ObjectType.ORGANIZATION)
.groupId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.permission(AclBatchUpdateParams.RemoveAcl.Permission.CREATE)
.restrictObjectType(
AclBatchUpdateParams.RemoveAcl.RestrictObjectType.ORGANIZATION
)
.roleId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
.build()
)
)
}

@Test
fun bodyWithoutOptionalFields() {
val params = AclBatchUpdateParams.builder().build()

val body = params._body()

assertNotNull(body)
}
}
Loading