Skip to content

Commit 7815290

Browse files
Matovidloclaude
andcommitted
fix: use keboola-sdk-go 482d079b pseudo-version with native DataScience sandbox API
Revert the v2.18.0 workarounds: restore CreateDataScienceSandboxRequest, DeleteDataScienceSandboxRequest, DataScienceSandboxSupportsSizes, and DataScienceSandboxSizesOrdered from pseudo-version 482d079b522e which provides these endpoints. v2.18.0 dropped them prematurely. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3088dda commit 7815290

6 files changed

Lines changed: 37 additions & 48 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ require (
4343
github.com/json-iterator/go v1.1.12
4444
github.com/keboola/go-cloud-encrypt v0.0.0-20250422071622-41a5d5547c43
4545
github.com/keboola/go-utils v1.4.0
46-
github.com/keboola/keboola-sdk-go/v2 v2.18.0
46+
github.com/keboola/keboola-sdk-go/v2 v2.17.1-0.20260326212557-482d079b522e
4747
github.com/keboola/keboola-sdk-go/v2/transfer v1.0.0
4848
github.com/klauspost/compress v1.18.4
4949
github.com/klauspost/pgzip v1.2.6

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,8 @@ github.com/keboola/go-oauth2-proxy/v7 v7.13.1-0.20251120082210-251fbcb18c16 h1:m
596596
github.com/keboola/go-oauth2-proxy/v7 v7.13.1-0.20251120082210-251fbcb18c16/go.mod h1:2KeAM0/QPbyUAoky+PXVgQDt/5m0qNcn30z9jh4ig8A=
597597
github.com/keboola/go-utils v1.4.0 h1:WTyj95yrr8O8HxtC8TSTyUcElZiRGDeEdVvDpFo6HUo=
598598
github.com/keboola/go-utils v1.4.0/go.mod h1:IopwJzFz2gh0Yj3fUbIe2eamRoDKzbXvjqFjQyw3ZdQ=
599-
github.com/keboola/keboola-sdk-go/v2 v2.18.0 h1:wkHTV4eUHr3aEwHmbo/Lhxq1uiYzdFbcMfY38Icvo2Q=
600-
github.com/keboola/keboola-sdk-go/v2 v2.18.0/go.mod h1:dLDyVUt6gMPGoXgON8yKh6+k4VEMlByXMqkK7rL1kuE=
599+
github.com/keboola/keboola-sdk-go/v2 v2.17.1-0.20260326212557-482d079b522e h1:J3AfxA2zcZU5aZt98fbDc7XKuqYi17ZqZh3sZISSZFI=
600+
github.com/keboola/keboola-sdk-go/v2 v2.17.1-0.20260326212557-482d079b522e/go.mod h1:dLDyVUt6gMPGoXgON8yKh6+k4VEMlByXMqkK7rL1kuE=
601601
github.com/keboola/keboola-sdk-go/v2/transfer v1.0.0 h1:mjwUdS9W+0QDYycam20u0B3LSSEUpXFvHyH9Q5j6fwA=
602602
github.com/keboola/keboola-sdk-go/v2/transfer v1.0.0/go.mod h1:+K9kZRslskn0r3qZmyXXd7trrApNQrs1aVUcfbTm2V4=
603603
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=

internal/pkg/utils/testproject/project.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -472,23 +472,14 @@ func (p *Project) createPythonRSandbox(ctx context.Context, branchID keboola.Bra
472472
return
473473
}
474474

475-
params := map[string]any{
476-
"task": "create",
477-
"type": fixture.Type,
478-
"shared": false,
479-
"expirationAfterHours": uint64(0),
480-
}
481-
if fixture.Size != "" {
482-
params["size"] = fixture.Size
483-
}
484-
req := p.keboolaProjectAPI.NewCreateJobRequest(keboola.SandboxWorkspacesComponent).
485-
WithConfig(config.ID).
486-
WithConfigData(map[string]any{"parameters": params}).
487-
Build().
488-
WithOnSuccess(func(ctx context.Context, result *keboola.QueueJob) error {
489-
return p.keboolaProjectAPI.WaitForQueueJob(ctx, result.ID)
490-
})
491-
if _, err = request.NewAPIRequest(request.NoResult{}, req).Send(ctx); err != nil {
475+
_, err = p.keboolaProjectAPI.CreateDataScienceSandboxRequest(keboola.CreateDataScienceSandboxPayload{
476+
Type: keboola.DataScienceAppType(fixture.Type),
477+
ConfigurationID: string(config.ID),
478+
ComponentID: string(keboola.SandboxWorkspacesComponent),
479+
BranchID: branchID.String(),
480+
Size: keboola.DataScienceSandboxSize(fixture.Size),
481+
}).Send(ctx)
482+
if err != nil {
492483
errs.Append(errors.Errorf("could not create sandbox \"%s\": %w", fixture.Name, err))
493484
return
494485
}

pkg/lib/operation/project/remote/workspace/create/operation.go

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"time"
66

77
"github.com/keboola/keboola-sdk-go/v2/pkg/keboola"
8-
"github.com/keboola/keboola-sdk-go/v2/pkg/request"
98

109
"github.com/keboola/keboola-as-code/internal/pkg/log"
1110
"github.com/keboola/keboola-as-code/internal/pkg/telemetry"
@@ -60,34 +59,24 @@ func Run(ctx context.Context, o CreateOptions, d dependencies) (err error) {
6059
return nil
6160
}
6261

63-
// createPyRWorkspace creates a Python/R workspace: creates the sandboxes config, then runs
64-
// the creation queue job and waits for it to complete.
62+
// createPyRWorkspace creates a Python/R workspace: creates the sandboxes config, then calls
63+
// the DataScience sandbox service to provision the instance.
6564
func createPyRWorkspace(ctx context.Context, api *keboola.AuthorizedAPI, branchID keboola.BranchID, name string, wsType workspace.WorkspaceType, size string) (keboola.ConfigID, error) {
66-
emptyConfig, err := api.CreateSandboxWorkspaceConfigRequest(branchID, name).Send(ctx)
65+
config, err := api.CreateSandboxWorkspaceConfigRequest(branchID, name).Send(ctx)
6766
if err != nil {
6867
return "", err
6968
}
7069

71-
params := map[string]any{
72-
"task": "create",
73-
"type": wsType,
74-
"shared": false,
75-
"expirationAfterHours": uint64(0),
76-
}
77-
if len(size) > 0 {
78-
params["size"] = size
79-
}
80-
81-
req := api.NewCreateJobRequest(keboola.SandboxWorkspacesComponent).
82-
WithConfig(emptyConfig.ID).
83-
WithConfigData(map[string]any{"parameters": params}).
84-
Build().
85-
WithOnSuccess(func(ctx context.Context, result *keboola.QueueJob) error {
86-
return api.WaitForQueueJob(ctx, result.ID)
87-
})
88-
if _, err = request.NewAPIRequest(request.NoResult{}, req).Send(ctx); err != nil {
70+
_, err = api.CreateDataScienceSandboxRequest(keboola.CreateDataScienceSandboxPayload{
71+
Type: keboola.DataScienceAppType(wsType),
72+
ConfigurationID: string(config.ID),
73+
ComponentID: string(keboola.SandboxWorkspacesComponent),
74+
BranchID: branchID.String(),
75+
Size: keboola.DataScienceSandboxSize(size),
76+
}).Send(ctx)
77+
if err != nil {
8978
return "", err
9079
}
9180

92-
return emptyConfig.ID, nil
81+
return config.ID, nil
9382
}

pkg/lib/operation/project/remote/workspace/delete/operation.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ func Run(ctx context.Context, d dependencies, branchID keboola.BranchID, workspa
4646
return nil
4747
}
4848

49-
// deletePyRWorkspace runs the sandbox delete queue job then removes the config.
49+
// deletePyRWorkspace deletes the DataScience sandbox instance then removes the config.
5050
func deletePyRWorkspace(ctx context.Context, api *keboola.AuthorizedAPI, branchID keboola.BranchID, configID keboola.ConfigID, appID keboola.DataScienceAppID) error {
51-
if _, err := api.DeleteSandboxWorkspaceJobRequest(keboola.SandboxWorkspaceID(appID)).Send(ctx); err != nil {
51+
if _, err := api.DeleteDataScienceSandboxRequest(appID).Send(ctx); err != nil {
5252
return err
5353
}
5454
_, err := api.DeleteSandboxWorkspaceConfigRequest(branchID, configID).Send(ctx)

pkg/lib/operation/project/remote/workspace/workspaceinfo.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const (
1919

2020
// WorkspaceSupportsSizes reports whether the given workspace type supports size selection.
2121
func WorkspaceSupportsSizes(typ WorkspaceType) bool {
22-
return keboola.SandboxWorkspaceSupportsSizes(keboola.SandboxWorkspaceType(typ))
22+
return keboola.DataScienceSandboxSupportsSizes(keboola.DataScienceAppType(typ))
2323
}
2424

2525
// WorkspaceTypesOrdered returns all workspace types in a stable display order.
@@ -38,12 +38,21 @@ func WorkspaceTypesMap() map[WorkspaceType]bool {
3838

3939
// WorkspaceSizesOrdered returns sandbox sizes in ascending order.
4040
func WorkspaceSizesOrdered() []string {
41-
return keboola.SandboxWorkspaceSizesOrdered()
41+
sizes := keboola.DataScienceSandboxSizesOrdered()
42+
result := make([]string, len(sizes))
43+
for i, s := range sizes {
44+
result[i] = string(s)
45+
}
46+
return result
4247
}
4348

4449
// WorkspaceSizesMap returns the set of valid sandbox sizes.
4550
func WorkspaceSizesMap() map[string]bool {
46-
return keboola.SandboxWorkspaceSizesMap()
51+
m := make(map[string]bool)
52+
for _, s := range keboola.DataScienceSandboxSizesOrdered() {
53+
m[string(s)] = true
54+
}
55+
return m
4756
}
4857

4958
// WorkspaceWithConfig pairs a workspace instance with its keboola.sandboxes component config.

0 commit comments

Comments
 (0)