-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
Create Python Environment: show a back button and ability to detect user cancellation #20274
Comments
@brettcannon @karrtikr |
@karthiknadig owns this component. What do you think? |
So is the concern more that you are somewhere part way in picking a kernel and you don't know someone dropped out of it? I can see a back button happening when someone realizes they made a mistake, but that won't solve knowing about a cancellation in all cases, correct? |
I would like some clarity on the flow. It is a confusing on how back button will be used here. |
@karthiknadig
|
Which settings are you referring to? |
Oops, updated |
@karthiknadig do you have an update on this? |
@DonJayamanne This won't make it in the current iteration. We have two public APIs that we need to update with this change. Since we will be exposing this to other extensions we want to make sure that the back support is generic enough to work for the scenarios intended with the API. |
@karrtikr We will need to discuss changes to environment selector and its API. |
Please could we also get the following feature:
This is requires so that we know the user cancelled the env creation, else we do not know this and could end up re-displaying the same quick pick or other quick picks in the Jupyter extension Throwing the |
@karthiknadig Just wanted to check if there was any update on this or whether you could provide some guidance on what this API would look like. thanks |
The command for this will have an optional field that takes |
Thanks, however we will need to differentiate between cancel and back |
Yes, "Back" and "Cancel" represent distinct user actions and therefore the API will represent them as separate exceptions. |
Closes #20274 ### Usage This change allows callers of the Create Environment command to handle `Back` and `Cancel`: ``` typescript let result: CreateEnvironmentResult | undefined; try { const result = await commands.executeCommand("python.createEnvironment", {showBackButton: true}); } catch(e) { // error while creating environment } if (result?.action === 'Back') { // user clicked Back } if (result?.action === 'Cancel') { // user pressed escape or Cancel } ``` I decided to go with `result?.action` because we don't have a npm package for python extension API so catching particular exception might be error prone with `ex instanceof <error>`. We will provide a proper interface via `api.environments` for create environment, and contribution to create environment. Until that point this command will provide the stop gap. ### Notes 1. I did not use the multi-step input that is used in the rest of the extension because, the existing implementation does not have context. Consider the following scenario: venv -> workspace select -> python select -> packages. Assume that there is only one workspace, and we don't show the workspace selection UI, that decision is done inside the workspace step. So, if there is only 1 workspace it is a short circuit to next step. User is on python selection and clicks `back`, workspace selection short circuits to next step which is python selection. So, from user perspective, back does not work. This can be fixed by sending context that the reason control moved to previous step was because user clicked on back. 2. This makes a change to old multi step API to rethrow the exception, if user hits `back` and the current step has no steps to go back to.
Minor change to the above description, the action for the command will be returned using a field. We will provide a proper extension API for this, the solution below is a stop gap till then. Below is how you can get the UI to show back button, and let result: CreateEnvironmentResult | undefined;
try {
const result = await commands.executeCommand("python.createEnvironment", {showBackButton: true});
} catch(e) {
// error while creating environment
}
if (result?.action === 'Back') {
// user clicked Back
}
if (result?.action === 'Cancel') {
// user pressed escape or Cancel
} |
-------------------- Commit message for microsoft/vscode-python@fc72be9: Show `Python: Report issue` command in palette regardless of whether a Python file is opened (microsoft/vscode-python#20726) Closes microsoft/vscode-python#20723 -------------------- Commit message for microsoft/vscode-python@c18e8c9: Detect ActiveState Python runtimes (microsoft/vscode-python#20534) Closes microsoft/vscode-python#20532 -------------------- Commit message for microsoft/vscode-python@2152cd9: Don't set `formatOnType` for auto-indent experiment if it's already set (microsoft/vscode-python#20710) -------------------- Commit message for microsoft/vscode-python@995b0bc: Add support for 'back' to all create env UI. (microsoft/vscode-python#20693) Closes microsoft/vscode-python#20274 ### Usage This change allows callers of the Create Environment command to handle `Back` and `Cancel`: ``` typescript let result: CreateEnvironmentResult | undefined; try { const result = await commands.executeCommand("python.createEnvironment", {showBackButton: true}); } catch(e) { // error while creating environment } if (result?.action === 'Back') { // user clicked Back } if (result?.action === 'Cancel') { // user pressed escape or Cancel } ``` I decided to go with `result?.action` because we don't have a npm package for python extension API so catching particular exception might be error prone with `ex instanceof <error>`. We will provide a proper interface via `api.environments` for create environment, and contribution to create environment. Until that point this command will provide the stop gap. ### Notes 1. I did not use the multi-step input that is used in the rest of the extension because, the existing implementation does not have context. Consider the following scenario: venv -> workspace select -> python select -> packages. Assume that there is only one workspace, and we don't show the workspace selection UI, that decision is done inside the workspace step. So, if there is only 1 workspace it is a short circuit to next step. User is on python selection and clicks `back`, workspace selection short circuits to next step which is python selection. So, from user perspective, back does not work. This can be fixed by sending context that the reason control moved to previous step was because user clicked on back. 2. This makes a change to old multi step API to rethrow the exception, if user hits `back` and the current step has no steps to go back to. -------------------- Commit message for microsoft/vscode-python@f3ecbf5: Fix-conda-version-parsing (microsoft/vscode-python#20674) -------------------- Commit message for microsoft/vscode-python@a6a6f50: Inactive pytest run command (microsoft/vscode-python#20653) Here the new flow is created but kept inactive for the pytest execution -------------------- Commit message for microsoft/vscode-python@2202fbe: Call the correct API to determine if a user is in treatment or control group (microsoft/vscode-python#20690) Closes microsoft/vscode-python#20183 -------------------- Commit message for microsoft/vscode-python@b0ab10d: Only use activated environment from terminal if VSCode was launched via CLI (microsoft/vscode-python#20667) Closes microsoft/vscode-python#20644 -------------------- Commit message for microsoft/vscode-python@02a92fc: Ensure interpreter path isn't truncated for workspace-relative paths when storing value (microsoft/vscode-python#20661) For microsoft/vscode-python#20660 I'm not quite sure why this was done. It doesn't make sense to do this only for display. -------------------- Commit message for microsoft/vscode-python@377067f: Use correct API to get interpreter path for language servers (microsoft/vscode-python#20656) For microsoft/vscode-python#20644 closes microsoft/vscode-python#20657 -------------------- Commit message for microsoft/vscode-python@cd6ca9d: Remove `isort` extension dependency (microsoft/vscode-python#20577) Closes microsoft/vscode-python#20586 Lead-authored-by: Kartik Raj <[email protected]> Co-authored-by: Erik De Bonte <[email protected]> Co-authored-by: Karthik Nadig <[email protected]> Co-authored-by: mitchell <[email protected]> Co-authored-by: Pete Farland <[email protected]> Co-authored-by: Eleanor Boyd <[email protected]>
-------------------- Commit message for microsoft/vscode-python@fc72be9: Show `Python: Report issue` command in palette regardless of whether a Python file is opened (microsoft/vscode-python#20726) Closes microsoft/vscode-python#20723 -------------------- Commit message for microsoft/vscode-python@c18e8c9: Detect ActiveState Python runtimes (microsoft/vscode-python#20534) Closes microsoft/vscode-python#20532 -------------------- Commit message for microsoft/vscode-python@2152cd9: Don't set `formatOnType` for auto-indent experiment if it's already set (microsoft/vscode-python#20710) -------------------- Commit message for microsoft/vscode-python@995b0bc: Add support for 'back' to all create env UI. (microsoft/vscode-python#20693) Closes microsoft/vscode-python#20274 ### Usage This change allows callers of the Create Environment command to handle `Back` and `Cancel`: ``` typescript let result: CreateEnvironmentResult | undefined; try { const result = await commands.executeCommand("python.createEnvironment", {showBackButton: true}); } catch(e) { // error while creating environment } if (result?.action === 'Back') { // user clicked Back } if (result?.action === 'Cancel') { // user pressed escape or Cancel } ``` I decided to go with `result?.action` because we don't have a npm package for python extension API so catching particular exception might be error prone with `ex instanceof <error>`. We will provide a proper interface via `api.environments` for create environment, and contribution to create environment. Until that point this command will provide the stop gap. ### Notes 1. I did not use the multi-step input that is used in the rest of the extension because, the existing implementation does not have context. Consider the following scenario: venv -> workspace select -> python select -> packages. Assume that there is only one workspace, and we don't show the workspace selection UI, that decision is done inside the workspace step. So, if there is only 1 workspace it is a short circuit to next step. User is on python selection and clicks `back`, workspace selection short circuits to next step which is python selection. So, from user perspective, back does not work. This can be fixed by sending context that the reason control moved to previous step was because user clicked on back. 2. This makes a change to old multi step API to rethrow the exception, if user hits `back` and the current step has no steps to go back to. -------------------- Commit message for microsoft/vscode-python@f3ecbf5: Fix-conda-version-parsing (microsoft/vscode-python#20674) -------------------- Commit message for microsoft/vscode-python@a6a6f50: Inactive pytest run command (microsoft/vscode-python#20653) Here the new flow is created but kept inactive for the pytest execution -------------------- Commit message for microsoft/vscode-python@2202fbe: Call the correct API to determine if a user is in treatment or control group (microsoft/vscode-python#20690) Closes microsoft/vscode-python#20183 -------------------- Commit message for microsoft/vscode-python@b0ab10d: Only use activated environment from terminal if VSCode was launched via CLI (microsoft/vscode-python#20667) Closes microsoft/vscode-python#20644 -------------------- Commit message for microsoft/vscode-python@02a92fc: Ensure interpreter path isn't truncated for workspace-relative paths when storing value (microsoft/vscode-python#20661) For microsoft/vscode-python#20660 I'm not quite sure why this was done. It doesn't make sense to do this only for display. -------------------- Commit message for microsoft/vscode-python@377067f: Use correct API to get interpreter path for language servers (microsoft/vscode-python#20656) For microsoft/vscode-python#20644 closes microsoft/vscode-python#20657 -------------------- Commit message for microsoft/vscode-python@cd6ca9d: Remove `isort` extension dependency (microsoft/vscode-python#20577) Closes microsoft/vscode-python#20586 Lead-authored-by: Kartik Raj <[email protected]> Co-authored-by: Erik De Bonte <[email protected]> Co-authored-by: Karthik Nadig <[email protected]> Co-authored-by: mitchell <[email protected]> Co-authored-by: Pete Farland <[email protected]> Co-authored-by: Eleanor Boyd <[email protected]>
Is it possible to have a back button on the quick pick displayed for env creation.
This way when users go into kernel picker and choose the ability to create a kernel, then they can go back.
Else today when users hit the cancel button there's no way to know the user hit cancel
Suggestions:'
The text was updated successfully, but these errors were encountered: