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
This commit is contained in:
Ilya.Kazakevich
2022-10-18 00:27:41 +00:00
committed by intellij-monorepo-bot
parent c2365b36c5
commit c6d6a21b1e
4 changed files with 24 additions and 16 deletions
@@ -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
@@ -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<FullPathOnTarget>("SDK_PYTHON_PATH")
/**
* @return path to python binary on target
*/
@@ -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<PyAddSdkView>(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)
@@ -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
}
internal fun createDetectedSdk(name: String, targetEnvironmentConfiguration: TargetEnvironmentConfiguration?): PyDetectedSdk =
PyDetectedSdk(name).apply { sdkAdditionalData = PyDetectedSdkAdditionalData(targetEnvironmentConfiguration) }