Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support tab completion for profiles #572

Merged
merged 3 commits into from
Jul 12, 2023
Merged

Support tab completion for profiles #572

merged 3 commits into from
Jul 12, 2023

Conversation

mgyucht
Copy link
Contributor

@mgyucht mgyucht commented Jul 11, 2023

Changes

Currently, databricks --profile <TAB> autocompletes with the shell default behavior, listing files in the local directory. This is not a great experience. Especially given that the suggested profile names for accounts are so long, it can be cumbersome to type them out by hand. This PR configures autocompletion for --profile to inspect the profiles of ~/.databrickscfg.

One potential improvement is to filter the response based on whether the command is known to be account-level or workspace-level.

Tests

Manual test.
Screenshot_11_07_2023__18_31

Copy link
Contributor

@pietern pietern left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!!

@@ -99,3 +100,11 @@ func LoadProfiles(path string, fn ProfileMatchFunction) (file string, profiles P

return
}

func ProfileCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
_, profiles, err := LoadProfiles(DefaultPath, func(p Profile) bool { return true })
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What you suggest should be easy. You can traverse cmd all the way to root and figure out of any of the parts is account. If so, we complete account profiles, otherwise workspace profiles.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. I think to make this actually work, we need to do a slightly more subtle change:

  1. If no command group is set at all, complete with both profile types.
  2. If the command group is "accounts", complete with account profiles only.
  3. Otherwise, complete with workspace profiles only.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise, databricks --profile <TAB> would only show workspace profiles.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed. Can also be a follow up, either way works.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just tried it, and args is always empty even if there are arguments supplied. I guess the values supplied to args are only in the context of the command that the flag is defined on... I just refactored this function for now. In the future, we can autogenerate the --profile flag in command groups.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is, but the cmd should be the command for which the completion is triggered.

@mgyucht mgyucht merged commit f203731 into main Jul 12, 2023
4 checks passed
@mgyucht mgyucht deleted the profile-tab-completion branch July 12, 2023 10:05
@nfx nfx mentioned this pull request Jul 18, 2023
nfx added a commit that referenced this pull request Jul 18, 2023
* Add development runs ([#522](#522)).
* Support tab completion for profiles ([#572](#572)).
* Correctly use --profile flag passed for all bundle commands ([#571](#571)).
* Disallow notebooks in paths where files are expected ([#573](#573)).
* Improve auth login experience ([#570](#570)).
* Remove base path checks during sync ([#576](#576)).
* First look for databricks.yml before falling back to bundle.yml ([#580](#580)).
* Integrate with auto-release infra ([#581](#581)).

API Changes:

 * Removed `databricks metastores maintenance` command.
 * Added `databricks metastores enable-optimization` command.
 * Added `databricks tables update` command.
 * Changed `databricks account settings delete-personal-compute-setting` command with new required argument order.
 * Changed `databricks account settings read-personal-compute-setting` command with new required argument order.
 * Added `databricks clean-rooms` command group.

OpenAPI SHA: 850a075ed9758d21a6bc4409506b48c8b9f93ab4, Date: 2023-07-18
Dependency updates:

 * Bump golang.org/x/term from 0.9.0 to 0.10.0 ([#567](#567)).
 * Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0 ([#566](#566)).
 * Bump golang.org/x/mod from 0.11.0 to 0.12.0 ([#568](#568)).
 * Bump github.com/databricks/databricks-sdk-go from 0.12.0 to 0.13.0 ([#585](#585)).
nfx added a commit that referenced this pull request Jul 18, 2023
* Add development runs ([#522](#522)).
* Support tab completion for profiles ([#572](#572)).
* Correctly use --profile flag passed for all bundle commands ([#571](#571)).
* Disallow notebooks in paths where files are expected ([#573](#573)).
* Improve auth login experience ([#570](#570)).
* Remove base path checks during sync ([#576](#576)).
* First look for databricks.yml before falling back to bundle.yml ([#580](#580)).
* Integrate with auto-release infra ([#581](#581)).

API Changes:

 * Removed `databricks metastores maintenance` command.
 * Added `databricks metastores enable-optimization` command.
 * Added `databricks tables update` command.
 * Changed `databricks account settings delete-personal-compute-setting` command with new required argument order.
 * Changed `databricks account settings read-personal-compute-setting` command with new required argument order.
 * Added `databricks clean-rooms` command group.

OpenAPI SHA: 850a075ed9758d21a6bc4409506b48c8b9f93ab4, Date: 2023-07-18
Dependency updates:

 * Bump golang.org/x/term from 0.9.0 to 0.10.0 ([#567](#567)).
 * Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0 ([#566](#566)).
 * Bump golang.org/x/mod from 0.11.0 to 0.12.0 ([#568](#568)).
 * Bump github.com/databricks/databricks-sdk-go from 0.12.0 to 0.13.0 ([#585](#585)).
nfx added a commit that referenced this pull request Jul 18, 2023
* Add development runs
([#522](#522)).
* Support tab completion for profiles
([#572](#572)).
* Correctly use --profile flag passed for all bundle commands
([#571](#571)).
* Disallow notebooks in paths where files are expected
([#573](#573)).
* Improve auth login experience
([#570](#570)).
* Remove base path checks during sync
([#576](#576)).
* First look for databricks.yml before falling back to bundle.yml
([#580](#580)).
* Integrate with auto-release infra
([#581](#581)).

API Changes:

 * Removed `databricks metastores maintenance` command.
 * Added `databricks metastores enable-optimization` command.
 * Added `databricks tables update` command.
* Changed `databricks account settings delete-personal-compute-setting`
command with new required argument order.
* Changed `databricks account settings read-personal-compute-setting`
command with new required argument order.
 * Added `databricks clean-rooms` command group.

OpenAPI SHA: 850a075ed9758d21a6bc4409506b48c8b9f93ab4, Date: 2023-07-18
Dependency updates:

* Bump golang.org/x/term from 0.9.0 to 0.10.0
([#567](#567)).
* Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0
([#566](#566)).
* Bump golang.org/x/mod from 0.11.0 to 0.12.0
([#568](#568)).
* Bump github.com/databricks/databricks-sdk-go from 0.12.0 to 0.13.0
([#585](#585)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants