mirror of https://github.com/databricks/cli.git
feat: Support notebooks without extensions
This commit is contained in:
parent
6c1230889a
commit
a42b829968
|
@ -11,6 +11,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/databricks/cli/bundle"
|
"github.com/databricks/cli/bundle"
|
||||||
|
"github.com/databricks/cli/bundle/config"
|
||||||
"github.com/databricks/cli/libs/diag"
|
"github.com/databricks/cli/libs/diag"
|
||||||
"github.com/databricks/cli/libs/dyn"
|
"github.com/databricks/cli/libs/dyn"
|
||||||
"github.com/databricks/cli/libs/notebook"
|
"github.com/databricks/cli/libs/notebook"
|
||||||
|
@ -117,6 +118,10 @@ func (t *translateContext) rewritePath(
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FileInfoWithVirtualExtension interface {
|
||||||
|
VirtualExtension() string
|
||||||
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -129,6 +134,18 @@ func (t *translateContext) translateNotebookPath(literal, localFullPath, localRe
|
||||||
return "", ErrIsNotNotebook{localFullPath}
|
return "", ErrIsNotNotebook{localFullPath}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.IsExplicitlyEnabled(t.b.Config.Presets.InPlaceDeployment) {
|
||||||
|
stat, err := t.b.SyncRoot.Stat(filepath.ToSlash(localRelPath))
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("unable to get file info for %s: %w", localFullPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i, ok := stat.(FileInfoWithVirtualExtension); ok {
|
||||||
|
vext := i.VirtualExtension()
|
||||||
|
return strings.TrimSuffix(remotePath, vext), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Upon import, notebooks are stripped of their extension.
|
// Upon import, notebooks are stripped of their extension.
|
||||||
return strings.TrimSuffix(remotePath, filepath.Ext(localFullPath)), nil
|
return strings.TrimSuffix(remotePath, filepath.Ext(localFullPath)), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,9 @@ type wsfsFileInfo struct {
|
||||||
|
|
||||||
// The export format of a notebook. This is not exposed by the SDK.
|
// The export format of a notebook. This is not exposed by the SDK.
|
||||||
ReposExportFormat workspace.ExportFormat `json:"repos_export_format,omitempty"`
|
ReposExportFormat workspace.ExportFormat `json:"repos_export_format,omitempty"`
|
||||||
|
|
||||||
|
// Explicitly added file extension of the notebook based on its language
|
||||||
|
VirtualFileExtension string `json:"virtual_file_extension,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (info wsfsFileInfo) Name() string {
|
func (info wsfsFileInfo) Name() string {
|
||||||
|
@ -88,6 +91,10 @@ func (info wsfsFileInfo) WorkspaceObjectInfo() workspace.ObjectInfo {
|
||||||
return info.ObjectInfo
|
return info.ObjectInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (info wsfsFileInfo) VirtualExtension() string {
|
||||||
|
return info.VirtualFileExtension
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalJSON is a custom unmarshaller for the wsfsFileInfo struct.
|
// UnmarshalJSON is a custom unmarshaller for the wsfsFileInfo struct.
|
||||||
// It must be defined for this type because otherwise the implementation
|
// It must be defined for this type because otherwise the implementation
|
||||||
// of the embedded ObjectInfo type will be used.
|
// of the embedded ObjectInfo type will be used.
|
||||||
|
|
|
@ -98,6 +98,7 @@ func (w *workspaceFilesExtensionsClient) getNotebookStatByNameWithExt(ctx contex
|
||||||
// Modify the stat object path to include the extension. This stat object will be used
|
// Modify the stat object path to include the extension. This stat object will be used
|
||||||
// to return the fs.FileInfo object in the stat method.
|
// to return the fs.FileInfo object in the stat method.
|
||||||
stat.Path = stat.Path + ext
|
stat.Path = stat.Path + ext
|
||||||
|
stat.VirtualFileExtension = ext
|
||||||
return &workspaceFileStatus{
|
return &workspaceFileStatus{
|
||||||
wsfsFileInfo: stat,
|
wsfsFileInfo: stat,
|
||||||
nameForWorkspaceAPI: nameWithoutExt,
|
nameForWorkspaceAPI: nameWithoutExt,
|
||||||
|
@ -127,6 +128,7 @@ func (w *workspaceFilesExtensionsClient) getNotebookStatByNameWithoutExt(ctx con
|
||||||
// Modify the stat object path to include the extension. This stat object will be used
|
// Modify the stat object path to include the extension. This stat object will be used
|
||||||
// to return the fs.DirEntry object in the ReadDir method.
|
// to return the fs.DirEntry object in the ReadDir method.
|
||||||
stat.Path = stat.Path + ext
|
stat.Path = stat.Path + ext
|
||||||
|
stat.VirtualFileExtension = ext
|
||||||
return &workspaceFileStatus{
|
return &workspaceFileStatus{
|
||||||
wsfsFileInfo: stat,
|
wsfsFileInfo: stat,
|
||||||
nameForWorkspaceAPI: name,
|
nameForWorkspaceAPI: name,
|
||||||
|
@ -214,7 +216,7 @@ func (w *workspaceFilesExtensionsClient) ReadDir(ctx context.Context, name strin
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Replace the entry with the new entry that includes the extension.
|
// Replace the entry with the new entry that includes the extension.
|
||||||
entries[i] = wsfsDirEntry{wsfsFileInfo{ObjectInfo: stat.ObjectInfo}}
|
entries[i] = wsfsDirEntry{wsfsFileInfo{ObjectInfo: stat.ObjectInfo, VirtualFileExtension: stat.VirtualFileExtension}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error if we have seen this path before in the current directory.
|
// Error if we have seen this path before in the current directory.
|
||||||
|
@ -313,7 +315,7 @@ func (w *workspaceFilesExtensionsClient) Stat(ctx context.Context, name string)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return wsfsFileInfo{ObjectInfo: stat.ObjectInfo}, nil
|
return wsfsFileInfo{ObjectInfo: stat.ObjectInfo, VirtualFileExtension: stat.VirtualFileExtension}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return info, err
|
return info, err
|
||||||
|
|
Loading…
Reference in New Issue