mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-57184: Store local conda path
We can't store it for random target since target lacks of ID, but for local it is possible GitOrigin-RevId: e8f68f8e68347e5493daab7ca15f81f1e42eda66
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d783fbc288
commit
6358b3a523
@@ -117,5 +117,6 @@
|
||||
<orderEntry type="library" name="jackson" level="project" />
|
||||
<orderEntry type="library" name="jackson-databind" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.python.community.core.impl" />
|
||||
<orderEntry type="module" module-name="intellij.platform.core" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -12,7 +12,6 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl
|
||||
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
|
||||
import com.intellij.execution.target.FullPathOnTarget
|
||||
import com.jetbrains.python.sdk.PythonSdkAdditionalData
|
||||
import com.jetbrains.python.sdk.PythonSdkType
|
||||
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
|
||||
@@ -24,6 +23,7 @@ import kotlinx.coroutines.withContext
|
||||
import java.nio.file.Path
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.io.path.isExecutable
|
||||
import kotlin.io.path.pathString
|
||||
|
||||
/**
|
||||
* See [com.jetbrains.env.conda.PyCondaSdkTest]
|
||||
@@ -42,6 +42,7 @@ suspend fun PyCondaCommand.createCondaSdkFromExistingEnv(condaIdentity: PyCondaE
|
||||
PythonSdkType.getInstance())
|
||||
sdk.sdkAdditionalData = additionalData
|
||||
sdk.homePath = sdk.getPythonBinaryPath(project).getOrThrow()
|
||||
saveLocalPythonCondaPath(Path.of(fullCondaPathOnTarget))
|
||||
return sdk
|
||||
}
|
||||
|
||||
@@ -57,7 +58,12 @@ suspend fun PyCondaCommand.createCondaSdkAlongWithNewEnv(newCondaEnvInfo: NewCon
|
||||
val error = ProcessHandlerReader(process).runProcessAndGetError(uiContext, sink)
|
||||
|
||||
return error?.let { Result.failure(Exception(it)) }
|
||||
?: Result.success(createCondaSdkFromExistingEnv(PyCondaEnvIdentity.NamedEnv(newCondaEnvInfo.envName), existingSdks, project))
|
||||
?: Result.success(
|
||||
createCondaSdkFromExistingEnv(PyCondaEnvIdentity.NamedEnv(newCondaEnvInfo.envName), existingSdks, project)).apply {
|
||||
onSuccess {
|
||||
saveLocalPythonCondaPath(Path.of(this@createCondaSdkAlongWithNewEnv.fullCondaPathOnTarget))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,7 +71,7 @@ suspend fun PyCondaCommand.createCondaSdkAlongWithNewEnv(newCondaEnvInfo: NewCon
|
||||
*/
|
||||
suspend fun suggestCondaPath(configuration: TargetEnvironmentConfiguration?): FullPathOnTarget? {
|
||||
val request = configuration?.createEnvironmentRequest(null) ?: LocalTargetEnvironmentRequest()
|
||||
val possiblePaths: Array<FullPathOnTarget> = when (request.targetPlatform.platform) {
|
||||
var possiblePaths: Array<FullPathOnTarget> = when (request.targetPlatform.platform) {
|
||||
Platform.UNIX -> arrayOf("~/anaconda3/bin/conda",
|
||||
"~/miniconda3/bin/conda",
|
||||
"/usr/local/bin/conda",
|
||||
@@ -80,6 +86,12 @@ suspend fun suggestCondaPath(configuration: TargetEnvironmentConfiguration?): Fu
|
||||
"%USERPROFILE%\\Miniconda3\\condabin\\conda.bat"
|
||||
)
|
||||
}
|
||||
// If conda is local then store path
|
||||
if (configuration == null) {
|
||||
loadLocalPythonCondaPath()?.let {
|
||||
possiblePaths = arrayOf(it.pathString) + possiblePaths
|
||||
}
|
||||
}
|
||||
return possiblePaths.firstNotNullOfOrNull { request.getExpandedPathIfExecutable(it) }
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.jetbrains.python.sdk.add.target.conda
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent
|
||||
import java.nio.file.Path
|
||||
import kotlin.io.path.pathString
|
||||
|
||||
private const val PYCHARM_CONDA_FULL_LOCAL_PATH = "PYCHARM_CONDA_FULL_LOCAL_PATH"
|
||||
|
||||
|
||||
fun saveLocalPythonCondaPath(condaPath: Path) {
|
||||
PropertiesComponent.getInstance().setValue(PYCHARM_CONDA_FULL_LOCAL_PATH, condaPath.pathString)
|
||||
}
|
||||
|
||||
fun loadLocalPythonCondaPath(): Path? = PropertiesComponent.getInstance().getValue(PYCHARM_CONDA_FULL_LOCAL_PATH)?.let {
|
||||
Path.of(it)
|
||||
}
|
||||
@@ -9,6 +9,8 @@ import com.intellij.execution.target.local.LocalTargetEnvironmentRequest
|
||||
import com.intellij.testFramework.ProjectRule
|
||||
import com.jetbrains.getPythonVersion
|
||||
import com.jetbrains.python.psi.LanguageLevel
|
||||
import com.jetbrains.python.sdk.add.target.conda.loadLocalPythonCondaPath
|
||||
import com.jetbrains.python.sdk.add.target.conda.saveLocalPythonCondaPath
|
||||
import com.jetbrains.python.sdk.flavors.conda.CondaEnvSdkFlavor
|
||||
import com.jetbrains.python.sdk.flavors.conda.NewCondaEnvRequest.*
|
||||
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
|
||||
@@ -33,6 +35,13 @@ internal class PyCondaTest {
|
||||
@JvmField
|
||||
internal val chain = RuleChain.outerRule(ProjectRule()).around(condaRule).around(yamlRule)
|
||||
|
||||
|
||||
@Test
|
||||
fun testLocalPathSaveLoad() {
|
||||
saveLocalPythonCondaPath(condaRule.condaPath)
|
||||
Assert.assertEquals("Incorrectly loaded path", condaRule.condaPath, loadLocalPythonCondaPath())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCondaCreateByYaml() = runTest {
|
||||
PyCondaEnv.createEnv(condaRule.condaCommand,
|
||||
|
||||
Reference in New Issue
Block a user