mirror of https://github.com/databricks/cli.git
Compare commits
4 Commits
5b77be186e
...
46f828b0c8
Author | SHA1 | Date |
---|---|---|
Shreyas Goenka | 46f828b0c8 | |
Shreyas Goenka | 7ec20da83c | |
Shreyas Goenka | 6318c3a1c9 | |
Shreyas Goenka | 0cd35d90ea |
|
@ -126,19 +126,33 @@ func (t *translateContext) rewritePath(
|
||||||
func (t *translateContext) translateNotebookPath(literal, localFullPath, localRelPath, remotePath string) (string, error) {
|
func (t *translateContext) translateNotebookPath(literal, localFullPath, localRelPath, remotePath string) (string, error) {
|
||||||
nb, _, err := notebook.DetectWithFS(t.b.SyncRoot, filepath.ToSlash(localRelPath))
|
nb, _, err := notebook.DetectWithFS(t.b.SyncRoot, filepath.ToSlash(localRelPath))
|
||||||
if errors.Is(err, fs.ErrNotExist) {
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
if filepath.Ext(localFullPath) == notebook.ExtensionNone {
|
if filepath.Ext(localFullPath) != notebook.ExtensionNone {
|
||||||
return "", fmt.Errorf(`notebook %s not found. Local notebook references are expected
|
return "", fmt.Errorf("notebook %s not found", literal)
|
||||||
to contain one of the following file extensions: [%s]`,
|
|
||||||
literal,
|
|
||||||
strings.Join([]string{
|
|
||||||
notebook.ExtensionPython,
|
|
||||||
notebook.ExtensionR,
|
|
||||||
notebook.ExtensionScala,
|
|
||||||
notebook.ExtensionSql,
|
|
||||||
notebook.ExtensionJupyter}, ", "))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", fmt.Errorf("notebook %s not found", literal)
|
extensions := []string{
|
||||||
|
notebook.ExtensionPython,
|
||||||
|
notebook.ExtensionR,
|
||||||
|
notebook.ExtensionScala,
|
||||||
|
notebook.ExtensionSql,
|
||||||
|
notebook.ExtensionJupyter,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check whether a file with a notebook extension already exists. This
|
||||||
|
// way we can provide a more targeted error message.
|
||||||
|
for _, ext := range extensions {
|
||||||
|
literalWithExt := literal + ext
|
||||||
|
localRelPathWithExt := filepath.ToSlash(localRelPath + ext)
|
||||||
|
if _, err := fs.Stat(t.b.SyncRoot, localRelPathWithExt); err == nil {
|
||||||
|
return "", fmt.Errorf(`notebook %s not found. Did you mean %s?
|
||||||
|
Local notebook references are expected to contain one of the following
|
||||||
|
file extensions: [%s]`, literal, literalWithExt, strings.Join(extensions, ", "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a generic error message if no matching possible file is found.
|
||||||
|
return "", fmt.Errorf(`notebook %s not found. Local notebook references are expected
|
||||||
|
to contain one of the following file extensions: [%s]`, literal, strings.Join(extensions, ", "))
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("unable to determine if %s is a notebook: %w", localFullPath, err)
|
return "", fmt.Errorf("unable to determine if %s is a notebook: %w", localFullPath, err)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package mutator_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -509,35 +510,56 @@ func TestPipelineNotebookDoesNotExistError(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPipelineNotebookDoesNotExistErrorWithoutExtension(t *testing.T) {
|
func TestPipelineNotebookDoesNotExistErrorWithoutExtension(t *testing.T) {
|
||||||
dir := t.TempDir()
|
for _, ext := range []string{
|
||||||
|
".py",
|
||||||
|
".r",
|
||||||
|
".scala",
|
||||||
|
".sql",
|
||||||
|
".ipynb",
|
||||||
|
"",
|
||||||
|
} {
|
||||||
|
t.Run("case_"+ext, func(t *testing.T) {
|
||||||
|
dir := t.TempDir()
|
||||||
|
|
||||||
b := &bundle.Bundle{
|
if ext != "" {
|
||||||
SyncRootPath: dir,
|
touchEmptyFile(t, filepath.Join(dir, "foo"+ext))
|
||||||
SyncRoot: vfs.MustNew(dir),
|
}
|
||||||
Config: config.Root{
|
|
||||||
Resources: config.Resources{
|
b := &bundle.Bundle{
|
||||||
Pipelines: map[string]*resources.Pipeline{
|
SyncRootPath: dir,
|
||||||
"pipeline": {
|
SyncRoot: vfs.MustNew(dir),
|
||||||
PipelineSpec: &pipelines.PipelineSpec{
|
Config: config.Root{
|
||||||
Libraries: []pipelines.PipelineLibrary{
|
Resources: config.Resources{
|
||||||
{
|
Pipelines: map[string]*resources.Pipeline{
|
||||||
Notebook: &pipelines.NotebookLibrary{
|
"pipeline": {
|
||||||
Path: "./doesnt_exist",
|
PipelineSpec: &pipelines.PipelineSpec{
|
||||||
|
Libraries: []pipelines.PipelineLibrary{
|
||||||
|
{
|
||||||
|
Notebook: &pipelines.NotebookLibrary{
|
||||||
|
Path: "./foo",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
bundletest.SetLocation(b, ".", []dyn.Location{{File: filepath.Join(dir, "fake.yml")}})
|
bundletest.SetLocation(b, ".", []dyn.Location{{File: filepath.Join(dir, "fake.yml")}})
|
||||||
|
diags := bundle.Apply(context.Background(), b, mutator.TranslatePaths())
|
||||||
|
|
||||||
diags := bundle.Apply(context.Background(), b, mutator.TranslatePaths())
|
if ext == "" {
|
||||||
assert.EqualError(t, diags.Error(), `notebook ./doesnt_exist not found. Local notebook references are expected
|
assert.EqualError(t, diags.Error(), `notebook ./foo not found. Local notebook references are expected
|
||||||
to contain one of the following file extensions: [.py, .r, .scala, .sql, .ipynb]`)
|
to contain one of the following file extensions: [.py, .r, .scala, .sql, .ipynb]`)
|
||||||
|
} else {
|
||||||
|
assert.EqualError(t, diags.Error(), fmt.Sprintf(`notebook ./foo not found. Did you mean ./foo%s?
|
||||||
|
Local notebook references are expected to contain one of the following
|
||||||
|
file extensions: [.py, .r, .scala, .sql, .ipynb]`, ext))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPipelineFileDoesNotExistError(t *testing.T) {
|
func TestPipelineFileDoesNotExistError(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue