From 2a0d551f3c59a3a0ef868312929650fa5a511442 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Fri, 6 Jun 2025 02:14:29 +0200 Subject: [PATCH] Migrate to PyResult GitOrigin-RevId: 1e89a6eebccaf3fa42b3d64c7e483af29583b8d6 --- .../services/systemPython/impl/CoreSystemPythonProvider.kt | 6 ++++-- .../intellij/python/community/services/systemPython/spi.kt | 3 ++- .../services/systemPython/systemPythonServiceImpl.kt | 1 + .../env/systemPython/SystemPythonServiceShowCaseTest.kt | 7 ++++++- .../junit5Tests/env/systemPython/impl/EnvProviderTest.kt | 1 + .../env/systemPython/impl/EnvTestPythonProvider.kt | 4 +++- .../com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt | 7 ++++--- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/CoreSystemPythonProvider.kt b/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/CoreSystemPythonProvider.kt index 7f5dea1e3c73..b8fa47f11cf7 100644 --- a/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/CoreSystemPythonProvider.kt +++ b/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/CoreSystemPythonProvider.kt @@ -5,14 +5,16 @@ import com.intellij.platform.eel.EelApi import com.intellij.platform.eel.provider.localEel import com.intellij.python.community.services.systemPython.SystemPythonProvider import com.jetbrains.python.PythonBinary +import com.jetbrains.python.Result +import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.sdk.flavors.PythonSdkFlavor import kotlinx.coroutines.Dispatchers /** - * [SystemPythonProvider] based ob [PythonSdkFlavor] (kind of a bridge) + * [SystemPythonProvider] based ob [PythonSdkFlavor] (kind of bridge) */ internal object CoreSystemPythonProvider : SystemPythonProvider { - override suspend fun findSystemPythons(eelApi: EelApi): Result> { + override suspend fun findSystemPythons(eelApi: EelApi): PyResult> { if (eelApi != localEel) return Result.success(emptySet()) with(Dispatchers.IO) { val paths = PythonSdkFlavor.getApplicableFlavors(false) diff --git a/python/services/system-python/src/com/intellij/python/community/services/systemPython/spi.kt b/python/services/system-python/src/com/intellij/python/community/services/systemPython/spi.kt index 359fca8d1193..295b6a316cd4 100644 --- a/python/services/system-python/src/com/intellij/python/community/services/systemPython/spi.kt +++ b/python/services/system-python/src/com/intellij/python/community/services/systemPython/spi.kt @@ -5,6 +5,7 @@ import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.platform.eel.EelApi import com.intellij.python.community.services.systemPython.SystemPythonProvider.Companion.EP import com.jetbrains.python.PythonBinary +import com.jetbrains.python.errorProcessing.PyResult /** * Register [EP] to [findSystemPythons] @@ -19,5 +20,5 @@ interface SystemPythonProvider { */ val uiCustomization: UICustomization? get() = null - suspend fun findSystemPythons(eelApi: EelApi): Result> + suspend fun findSystemPythons(eelApi: EelApi): PyResult> } \ No newline at end of file diff --git a/python/services/system-python/src/com/intellij/python/community/services/systemPython/systemPythonServiceImpl.kt b/python/services/system-python/src/com/intellij/python/community/services/systemPython/systemPythonServiceImpl.kt index 94445972e329..23255af87ce3 100644 --- a/python/services/system-python/src/com/intellij/python/community/services/systemPython/systemPythonServiceImpl.kt +++ b/python/services/system-python/src/com/intellij/python/community/services/systemPython/systemPythonServiceImpl.kt @@ -18,6 +18,7 @@ import com.intellij.python.community.services.systemPython.impl.CoreSystemPython import com.jetbrains.python.PythonBinary import com.jetbrains.python.Result import com.jetbrains.python.errorProcessing.PyResult +import com.jetbrains.python.getOrNull import com.jetbrains.python.sdk.installer.installBinary import kotlinx.coroutines.* import kotlinx.coroutines.sync.Mutex diff --git a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/SystemPythonServiceShowCaseTest.kt b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/SystemPythonServiceShowCaseTest.kt index bc9c1f2e7988..fa6b77838be8 100644 --- a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/SystemPythonServiceShowCaseTest.kt +++ b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/SystemPythonServiceShowCaseTest.kt @@ -5,6 +5,8 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.diagnostic.fileLogger import com.intellij.openapi.util.SystemInfo +import com.intellij.platform.eel.ExecuteProcessException +import com.intellij.platform.eel.ThrowsChecked import com.intellij.platform.eel.provider.getEelDescriptor import com.intellij.platform.eel.provider.utils.readWholeText import com.intellij.platform.eel.spawnProcess @@ -21,6 +23,8 @@ import com.intellij.testFramework.common.timeoutRunBlocking import com.intellij.testFramework.junit5.RegistryKey import com.intellij.testFramework.junit5.TestDisposable import com.intellij.testFramework.registerExtension +import com.jetbrains.python.Result +import com.jetbrains.python.errorProcessing.MessageError import com.jetbrains.python.getOrThrow import com.jetbrains.python.sdk.flavors.PythonSdkFlavor import com.jetbrains.python.venvReader.VirtualEnvReader @@ -42,6 +46,7 @@ import kotlin.time.Duration.Companion.minutes @PyEnvTestCase class SystemPythonServiceShowCaseTest { + @ThrowsChecked(ExecuteProcessException::class) @Test fun testListPythons(): Unit = timeoutRunBlocking(10.minutes) { for (systemPython in SystemPythonService().findSystemPythons(forceRefresh = true)) { @@ -87,7 +92,7 @@ class SystemPythonServiceShowCaseTest { @Test fun testRefresh(@TestDisposable disposable: Disposable): Unit = timeoutRunBlocking(10.minutes) { val mockProvider = mockk() - coEvery { mockProvider.findSystemPythons(any()) } returns Result.failure(java.lang.AssertionError("...")) + coEvery { mockProvider.findSystemPythons(any()) } returns Result.failure(MessageError("...")) coEvery { mockProvider.uiCustomization } returns null val sut = SystemPythonService() sut.findSystemPythons() diff --git a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvProviderTest.kt b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvProviderTest.kt index 6115a02dc1ab..bee07c9b7e72 100644 --- a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvProviderTest.kt +++ b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvProviderTest.kt @@ -13,6 +13,7 @@ import com.intellij.testFramework.common.timeoutRunBlocking import com.intellij.testFramework.junit5.TestDisposable import com.intellij.testFramework.registerExtension import com.jetbrains.python.PythonBinary +import com.jetbrains.python.Result import com.jetbrains.python.getOrThrow import io.mockk.coEvery import io.mockk.mockk diff --git a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvTestPythonProvider.kt b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvTestPythonProvider.kt index 966cb2d76175..d7f016c1a2ce 100644 --- a/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvTestPythonProvider.kt +++ b/python/services/system-python/tests/com/intellij/python/junit5Tests/env/systemPython/impl/EnvTestPythonProvider.kt @@ -9,6 +9,8 @@ import com.intellij.python.community.services.systemPython.SystemPythonProvider import com.intellij.python.community.testFramework.testEnv.TypeVanillaPython import com.intellij.python.community.testFramework.testEnv.TypeVanillaPython3 import com.jetbrains.python.PythonBinary +import com.jetbrains.python.Result +import com.jetbrains.python.errorProcessing.PyResult import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.toSet @@ -17,7 +19,7 @@ import kotlinx.coroutines.flow.toSet * Register tests pythons as system pythons */ internal class EnvTestPythonProvider : SystemPythonProvider { - override suspend fun findSystemPythons(eelApi: EelApi): Result> { + override suspend fun findSystemPythons(eelApi: EelApi): PyResult> { var pythons = emptySet() if (eelApi == localEel) { // Add Py27 temporary to test Py27 diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt index d327e6251727..68c9af7faa9f 100644 --- a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt +++ b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt @@ -6,21 +6,22 @@ import com.intellij.platform.eel.provider.localEel import com.intellij.python.community.services.systemPython.SystemPythonProvider import com.intellij.python.community.services.systemPython.UICustomization import com.jetbrains.python.PythonBinary -import com.jetbrains.python.errorProcessing.asKotlinResult +import com.jetbrains.python.Result +import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.icons.PythonIcons import com.jetbrains.python.sdk.uv.impl.createUvLowLevel import com.jetbrains.python.sdk.uv.impl.hasUvExecutable import java.nio.file.Path internal class UvSystemPythonProvider : SystemPythonProvider { - override suspend fun findSystemPythons(eelApi: EelApi): Result> { + override suspend fun findSystemPythons(eelApi: EelApi): PyResult> { if (eelApi != localEel || !hasUvExecutable()) { // TODO: support for remote execution return Result.success(emptySet()) } val uv = createUvLowLevel(Path.of(".")) - return uv.listUvPythons().asKotlinResult() + return uv.listUvPythons() } @Suppress("HardCodedStringLiteral") // tool name is untranslatable