Skip to content
Open
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
4 changes: 2 additions & 2 deletions acceptance/experimental/open/output.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@

=== print URL for a job
>>> [CLI] experimental open --url jobs 123
[DATABRICKS_URL]/jobs/123?o=[NUMID]
[DATABRICKS_URL]/jobs/123?w=[NUMID]

=== print URL for a notebook
>>> [CLI] experimental open --url notebooks 12345
[DATABRICKS_URL]/?o=[NUMID]#notebook/12345
[DATABRICKS_URL]/?w=[NUMID]#notebook/12345

=== unknown resource type
>>> [CLI] experimental open --url unknown 123
Expand Down
10 changes: 5 additions & 5 deletions cmd/experimental/workspace_open_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,26 +79,26 @@ func TestBuildWorkspaceURLHostWithTrailingSlash(t *testing.T) {
func TestBuildWorkspaceURLWithWorkspaceID(t *testing.T) {
got, err := workspaceurls.BuildResourceURL("https://myworkspace.databricks.com", "jobs", "123", 123456)
require.NoError(t, err)
assert.Equal(t, "https://myworkspace.databricks.com/jobs/123?o=123456", got)
assert.Equal(t, "https://myworkspace.databricks.com/jobs/123?w=123456", got)
}

func TestBuildWorkspaceURLWithWorkspaceIDInHostname(t *testing.T) {
got, err := workspaceurls.BuildResourceURL("https://adb-123456.azuredatabricks.net", "jobs", "123", 123456)
require.NoError(t, err)
// Workspace ID is already in the hostname, so ?o= should not be appended.
// Workspace ID is already in the hostname, so ?w= should not be appended.
assert.Equal(t, "https://adb-123456.azuredatabricks.net/jobs/123", got)
}

func TestBuildWorkspaceURLWithWorkspaceIDInVanityHostname(t *testing.T) {
got, err := workspaceurls.BuildResourceURL("https://workspace-123456.example.com", "jobs", "123", 123456)
require.NoError(t, err)
assert.Equal(t, "https://workspace-123456.example.com/jobs/123?o=123456", got)
assert.Equal(t, "https://workspace-123456.example.com/jobs/123?w=123456", got)
}

func TestBuildWorkspaceURLFragmentWithWorkspaceID(t *testing.T) {
got, err := workspaceurls.BuildResourceURL("https://myworkspace.databricks.com", "notebooks", "12345", 789)
require.NoError(t, err)
assert.Equal(t, "https://myworkspace.databricks.com/?o=789#notebook/12345", got)
assert.Equal(t, "https://myworkspace.databricks.com/?w=789#notebook/12345", got)
}

func TestWorkspaceOpenCommandCompletion(t *testing.T) {
Expand Down Expand Up @@ -221,7 +221,7 @@ func TestWorkspaceOpenCommandURLFlag(t *testing.T) {
require.NoError(t, err)

assert.False(t, browserOpened)
assert.Equal(t, "https://myworkspace.databricks.com/jobs/123?o=789\n", stdout.String())
assert.Equal(t, "https://myworkspace.databricks.com/jobs/123?w=789\n", stdout.String())
assert.Equal(t, "", stderr.String())
}

Expand Down
8 changes: 4 additions & 4 deletions libs/workspaceurls/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func ResourceURL(baseURL url.URL, resourceType, id string) string {
}

// BuildResourceURL constructs a full workspace URL from a host string, resource
// type name, ID, and workspace ID. It parses the host, appends ?o=<workspace-id>
// type name, ID, and workspace ID. It parses the host, appends ?w=<workspace-id>
// when needed, and formats the resource path.
func BuildResourceURL(host, resourceType, id string, workspaceID int64) (string, error) {
baseURL, err := workspaceBaseURL(host, workspaceID)
Expand Down Expand Up @@ -94,13 +94,13 @@ func workspaceBaseURL(host string, workspaceID int64) (*url.URL, error) {
return baseURL, nil
}

orgID := strconv.FormatInt(workspaceID, 10)
if hasWorkspaceIDInHostname(baseURL.Hostname(), orgID) {
wsID := strconv.FormatInt(workspaceID, 10)
if hasWorkspaceIDInHostname(baseURL.Hostname(), wsID) {
return baseURL, nil
}

values := baseURL.Query()
values.Add("o", orgID)
values.Add("w", wsID)
baseURL.RawQuery = values.Encode()

return baseURL, nil
Expand Down
10 changes: 5 additions & 5 deletions libs/workspaceurls/urls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ func TestWorkspaceBaseURL(t *testing.T) {
expected string
}{
{"no workspace ID", "https://myworkspace.databricks.com", 0, "https://myworkspace.databricks.com"},
{"with workspace ID", "https://myworkspace.databricks.com", 123456, "https://myworkspace.databricks.com?o=123456"},
{"with workspace ID", "https://myworkspace.databricks.com", 123456, "https://myworkspace.databricks.com?w=123456"},
{"trailing slash stripped", "https://myworkspace.databricks.com/", 0, "https://myworkspace.databricks.com/"},
{"trailing slash with workspace ID", "https://myworkspace.databricks.com/", 789, "https://myworkspace.databricks.com/?o=789"},
{"trailing slash with workspace ID", "https://myworkspace.databricks.com/", 789, "https://myworkspace.databricks.com/?w=789"},
{"adb hostname skips query param", "https://adb-123456.azuredatabricks.net", 123456, "https://adb-123456.azuredatabricks.net"},
{"adb hostname mismatch adds param", "https://adb-999.azuredatabricks.net", 123456, "https://adb-999.azuredatabricks.net?o=123456"},
{"adb hostname mismatch adds param", "https://adb-999.azuredatabricks.net", 123456, "https://adb-999.azuredatabricks.net?w=123456"},
}

for _, tt := range tests {
Expand All @@ -80,9 +80,9 @@ func TestBuildResourceURL(t *testing.T) {
expected string
}{
{"simple path", "https://host.com", "jobs", "123", 0, "https://host.com/jobs/123"},
{"path with workspace ID", "https://host.com", "jobs", "123", 456, "https://host.com/jobs/123?o=456"},
{"path with workspace ID", "https://host.com", "jobs", "123", 456, "https://host.com/jobs/123?w=456"},
{"fragment pattern", "https://host.com", "notebooks", "12345", 0, "https://host.com/#notebook/12345"},
{"fragment with workspace ID", "https://host.com", "notebooks", "12345", 789, "https://host.com/?o=789#notebook/12345"},
{"fragment with workspace ID", "https://host.com", "notebooks", "12345", 789, "https://host.com/?w=789#notebook/12345"},
{"registered model normalizes dots", "https://host.com", "registered_models", "catalog.schema.model", 0, "https://host.com/explore/data/models/catalog/schema/model"},
}

Expand Down