From c6d6a21b1eee75772ab1d80396992a98b0f4ee36 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Mon, 17 Oct 2022 23:06:16 +0200 Subject: [PATCH] PY-56794: Disable SSH for Conda Temporary env configuration can't be used for conda environments listening, hence no conda command could be executed until SDK created GitOrigin-RevId: e0b2202ad0543b7ec954e1b7feba2b1ba492e7ed --- .../IncompleteTargetEnvironmentConfiguration.kt | 7 +++++++ python/src/com/jetbrains/python/sdk/PySdkExt.kt | 6 +++++- .../sdk/add/target/PyAddTargetBasedSdkPanel.kt | 11 ++++++++--- .../sdk/add/target/PyDetectedSdkOnTarget.kt | 16 ++++------------ 4 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 platform/execution/src/com/intellij/execution/target/IncompleteTargetEnvironmentConfiguration.kt diff --git a/platform/execution/src/com/intellij/execution/target/IncompleteTargetEnvironmentConfiguration.kt b/platform/execution/src/com/intellij/execution/target/IncompleteTargetEnvironmentConfiguration.kt new file mode 100644 index 000000000000..2ab77533f887 --- /dev/null +++ b/platform/execution/src/com/intellij/execution/target/IncompleteTargetEnvironmentConfiguration.kt @@ -0,0 +1,7 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.execution.target + +/** + * Temporary configuration that supposed to be created in wizards and never be stored on disk, nor used + */ +interface IncompleteTargetEnvironmentConfiguration \ No newline at end of file diff --git a/python/src/com/jetbrains/python/sdk/PySdkExt.kt b/python/src/com/jetbrains/python/sdk/PySdkExt.kt index 325947ffaf9a..39c1f5bc29ce 100644 --- a/python/src/com/jetbrains/python/sdk/PySdkExt.kt +++ b/python/src/com/jetbrains/python/sdk/PySdkExt.kt @@ -51,6 +51,7 @@ import com.jetbrains.python.packaging.ui.PyPackageManagementService import com.jetbrains.python.psi.LanguageLevel import com.jetbrains.python.remote.PyRemoteSdkAdditionalData import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase +import com.jetbrains.python.sdk.add.target.PyDetectedSdkAdditionalData import com.jetbrains.python.sdk.flavors.PyFlavorAndData import com.jetbrains.python.sdk.flavors.PythonSdkFlavor import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor @@ -436,9 +437,12 @@ fun Sdk.configureBuilderToRunPythonOnTarget(targetCommandLineBuilder: TargetedCo getOrCreateAdditionalData().flavorAndData.data.prepareTargetCommandLine(this, targetCommandLineBuilder) } -val Sdk.sdkSeemsValid: Boolean get() = getOrCreateAdditionalData().flavorAndData.sdkSeemsValid(this, targetEnvConfiguration) +val Sdk.sdkSeemsValid: Boolean + get() = getOrCreateAdditionalData().flavorAndData + .sdkSeemsValid(this, (sdkAdditionalData as? PyDetectedSdkAdditionalData)?.temporaryConfiguration ?: targetEnvConfiguration) private val SDK_PYTHON_PATH = Key("SDK_PYTHON_PATH") + /** * @return path to python binary on target */ diff --git a/python/src/com/jetbrains/python/sdk/add/target/PyAddTargetBasedSdkPanel.kt b/python/src/com/jetbrains/python/sdk/add/target/PyAddTargetBasedSdkPanel.kt index 7393828a47d2..40d39abd3045 100644 --- a/python/src/com/jetbrains/python/sdk/add/target/PyAddTargetBasedSdkPanel.kt +++ b/python/src/com/jetbrains/python/sdk/add/target/PyAddTargetBasedSdkPanel.kt @@ -2,6 +2,7 @@ package com.jetbrains.python.sdk.add.target import com.intellij.CommonBundle +import com.intellij.execution.target.IncompleteTargetEnvironmentConfiguration import com.intellij.execution.target.TargetEnvironmentConfiguration import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project @@ -30,9 +31,9 @@ import com.jetbrains.python.sdk.add.showProcessExecutionErrorDialog import com.jetbrains.python.sdk.add.target.conda.PyAddCondaPanelModel import com.jetbrains.python.sdk.add.target.conda.PyAddCondaPanelView import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer -import com.jetbrains.python.sdk.sdkSeemsValid import com.jetbrains.python.sdk.pipenv.PyAddPipEnvPanel import com.jetbrains.python.sdk.poetry.createPoetryPanel +import com.jetbrains.python.sdk.sdkSeemsValid import com.jetbrains.python.target.PythonLanguageRuntimeConfiguration import java.awt.CardLayout import java.awt.Component @@ -96,7 +97,10 @@ class PyAddTargetBasedSdkPanel(private val project: Project?, listOf(venvPanel, condaPanel, systemWidePanel, pipEnvPanel, poetryPanel) to venvPanel } } - targetEnvironmentConfiguration.isMutableTarget -> listOf(venvPanel, systemWidePanel, condaPanel) to venvPanel + targetEnvironmentConfiguration.isMutableTarget -> mutableListOf(venvPanel, systemWidePanel).apply { + // Conda not supported for SSH (which is mutable incomplete environment) + if (targetEnvironmentConfiguration !is IncompleteTargetEnvironmentConfiguration) add(condaPanel) + } to venvPanel else -> listOf(venvPanel, systemWidePanel, condaPanel) to systemWidePanel } } @@ -148,7 +152,8 @@ class PyAddTargetBasedSdkPanel(private val project: Project?, } } - private fun createAnacondaPanel(): PyAddSdkView = PyAddCondaPanelView(PyAddCondaPanelModel(targetEnvironmentConfiguration, existingSdks, project!!)) + private fun createAnacondaPanel(): PyAddSdkView = PyAddCondaPanelView( + PyAddCondaPanelModel(targetEnvironmentConfiguration, existingSdks, project!!)) private fun createPipEnvPanel(newProjectPath: String?) = PyAddPipEnvPanel(project, module, existingSdks, newProjectPath, context) diff --git a/python/src/com/jetbrains/python/sdk/add/target/PyDetectedSdkOnTarget.kt b/python/src/com/jetbrains/python/sdk/add/target/PyDetectedSdkOnTarget.kt index 9013c667b258..9b915d4f8433 100644 --- a/python/src/com/jetbrains/python/sdk/add/target/PyDetectedSdkOnTarget.kt +++ b/python/src/com/jetbrains/python/sdk/add/target/PyDetectedSdkOnTarget.kt @@ -5,15 +5,13 @@ import com.intellij.execution.target.TargetEnvironmentConfiguration import com.jetbrains.python.sdk.PyDetectedSdk import com.jetbrains.python.sdk.PyRemoteSdkAdditionalDataMarker import com.jetbrains.python.sdk.PythonSdkAdditionalData -import com.jetbrains.python.sdk.flavors.PyFlavorAndData -import com.jetbrains.python.target.PyTargetAwareAdditionalData /** * Allows passing SDK with such additional data [com.jetbrains.python.sdk.PythonSdkUtil.isRemote] check. * * This class is meant for use in UI and should be used with caution. */ -private class PyDetectedSdkAdditionalData : PythonSdkAdditionalData(), PyRemoteSdkAdditionalDataMarker +class PyDetectedSdkAdditionalData(val temporaryConfiguration: TargetEnvironmentConfiguration?) : PythonSdkAdditionalData(), PyRemoteSdkAdditionalDataMarker /** * Returns new [PyDetectedSdk] with the additional data that corresponds to the local or non-local interpreter based on the provided flag. @@ -22,15 +20,9 @@ private class PyDetectedSdkAdditionalData : PythonSdkAdditionalData(), PyRemoteS */ internal fun createDetectedSdk(name: String, isLocal: Boolean): PyDetectedSdk { val sdk = PyDetectedSdk(name) - if (!isLocal) sdk.sdkAdditionalData = PyDetectedSdkAdditionalData() + if (!isLocal) sdk.sdkAdditionalData = PyDetectedSdkAdditionalData(null) return sdk } -internal fun createDetectedSdk(name: String, targetEnvironmentConfiguration: TargetEnvironmentConfiguration?): PyDetectedSdk { - val sdk = PyDetectedSdk(name) - sdk.sdkAdditionalData = when (targetEnvironmentConfiguration) { - is TargetEnvironmentConfiguration -> PyTargetAwareAdditionalData(PyFlavorAndData.UNKNOWN_FLAVOR_DATA, targetEnvironmentConfiguration) - else -> PythonSdkAdditionalData(PyFlavorAndData.UNKNOWN_FLAVOR_DATA) - } - return sdk -} \ No newline at end of file +internal fun createDetectedSdk(name: String, targetEnvironmentConfiguration: TargetEnvironmentConfiguration?): PyDetectedSdk = + PyDetectedSdk(name).apply { sdkAdditionalData = PyDetectedSdkAdditionalData(targetEnvironmentConfiguration) } \ No newline at end of file