remove redundant pip based python package manager; PY-75983

(cherry picked from commit a1d3cb3a5f31763f38c6c5c2d7c7f855d83e1f0a)

GitOrigin-RevId: c0ce987c8f9bdf3856cd69febe8a19a8af69491e
This commit is contained in:
Aleksandr Sorotskii
2024-11-12 18:33:21 +01:00
committed by intellij-monorepo-bot
parent c3f76c2982
commit c8b62d5056
6 changed files with 79 additions and 88 deletions

View File

@@ -17,7 +17,7 @@ import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.packaging.PyExecutionException
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification
import com.jetbrains.python.packaging.pip.PipBasedPackageManager
import com.jetbrains.python.packaging.pip.PipPythonPackageManager
import com.jetbrains.python.sdk.flavors.conda.PyCondaFlavorData
import com.jetbrains.python.sdk.getOrCreateAdditionalData
import com.jetbrains.python.sdk.targetEnvConfiguration
@@ -27,8 +27,8 @@ import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
@ApiStatus.Experimental
class CondaPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(project, sdk) {
override val repositoryManager: CondaRepositoryManger = CondaRepositoryManger(project, sdk)
class CondaPackageManager(project: Project, sdk: Sdk) : PipPythonPackageManager(project, sdk) {
override val repositoryManager = CondaRepositoryManger(project, sdk)
override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
if (specification is CondaPackageSpecification) {
@@ -72,7 +72,7 @@ class CondaPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(p
override suspend fun reloadPackagesCommand(): Result<List<PythonPackage>> =
try {
val output =runConda("list", emptyList(), message("conda.packaging.list.progress"))
val output = runConda("list", emptyList(), message("conda.packaging.list.progress"))
Result.success(parseCondaPackageList(output))
}
catch (ex: ExecutionException) {

View File

@@ -1,6 +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.jetbrains.python.packaging.management
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.writeAction
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
@@ -8,6 +9,7 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.util.messages.Topic
import com.jetbrains.python.packaging.PyPackageManager
import com.jetbrains.python.packaging.common.PackageManagerHolder
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageManagementListener
@@ -39,8 +41,19 @@ abstract class PythonPackageManager(val project: Project, val sdk: Sdk) {
return reloadPackages()
}
abstract suspend fun reloadPackages(): Result<List<PythonPackage>>
open suspend fun reloadPackages(): Result<List<PythonPackage>> {
val packages = reloadPackagesCommand().getOrElse {
return Result.failure(it)
}
installedPackages = packages
ApplicationManager.getApplication().messageBus.apply {
syncPublisher(PACKAGE_MANAGEMENT_TOPIC).packagesChanged(sdk)
syncPublisher(PyPackageManager.PACKAGE_MANAGER_TOPIC).packagesRefreshed(sdk)
}
return Result.success(packages)
}
protected abstract suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String>
protected abstract suspend fun updatePackageCommand(specification: PythonPackageSpecification): Result<String>

View File

@@ -1,73 +0,0 @@
// 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.packaging.pip
import com.intellij.execution.ExecutionException
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.PyPackageManager
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.management.runPackagingTool
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Experimental
abstract class PipBasedPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk) {
@Volatile
override var installedPackages: List<PythonPackage> = emptyList()
override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
try {
Result.success(runPackagingTool("install", specification.buildInstallationString() + options, PyBundle.message("python.packaging.install.progress", specification.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun updatePackageCommand(specification: PythonPackageSpecification): Result<String> =
try {
Result.success(runPackagingTool("install", listOf("--upgrade") + specification.buildInstallationString(), PyBundle.message("python.packaging.update.progress", specification.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun uninstallPackageCommand(pkg: PythonPackage): Result<String> =
try {
Result.success(runPackagingTool("uninstall", listOf(pkg.name), PyBundle.message("python.packaging.uninstall.progress", pkg.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun reloadPackagesCommand(): Result<List<PythonPackage>> =
try {
val output = runPackagingTool("list", emptyList(), PyBundle.message("python.packaging.list.progress"))
val packages = output.lineSequence()
.filter { it.isNotBlank() }
.map {
val line = it.split("\t")
PythonPackage(line[0], line[1], isEditableMode = false)
}
.sortedWith(compareBy(PythonPackage::name))
.toList()
Result.success(packages)
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun reloadPackages(): Result<List<PythonPackage>> {
val packages = reloadPackagesCommand().onFailure { return Result.failure(it) }.getOrThrow()
installedPackages = packages
ApplicationManager.getApplication().messageBus.apply {
syncPublisher(PACKAGE_MANAGEMENT_TOPIC).packagesChanged(sdk)
syncPublisher(PyPackageManager.PACKAGE_MANAGER_TOPIC).packagesRefreshed(sdk)
}
return Result.success(packages)
}
}

View File

@@ -1,11 +1,62 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.packaging.pip
import com.intellij.execution.ExecutionException
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.management.PythonRepositoryManager
import com.jetbrains.python.packaging.management.runPackagingTool
import org.jetbrains.annotations.ApiStatus
import kotlin.collections.plus
@ApiStatus.Experimental
class PipPythonPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(project, sdk) {
override val repositoryManager: PipRepositoryManager = PipRepositoryManager(project, sdk)
open class PipPythonPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk) {
@Volatile
override var installedPackages: List<PythonPackage> = emptyList()
override val repositoryManager: PythonRepositoryManager = PipRepositoryManager(project, sdk)
override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
try {
Result.success(runPackagingTool("install", specification.buildInstallationString() + options, PyBundle.message("python.packaging.install.progress", specification.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun updatePackageCommand(specification: PythonPackageSpecification): Result<String> =
try {
Result.success(runPackagingTool("install", listOf("--upgrade") + specification.buildInstallationString(), PyBundle.message("python.packaging.update.progress", specification.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun uninstallPackageCommand(pkg: PythonPackage): Result<String> =
try {
Result.success(runPackagingTool("uninstall", listOf(pkg.name), PyBundle.message("python.packaging.uninstall.progress", pkg.name)))
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
override suspend fun reloadPackagesCommand(): Result<List<PythonPackage>> =
try {
val output = runPackagingTool("list", emptyList(), PyBundle.message("python.packaging.list.progress"))
val packages = output.lineSequence()
.filter { it.isNotBlank() }
.map {
val line = it.split("\t")
PythonPackage(line[0], line[1], isEditableMode = false)
}
.sortedWith(compareBy(PythonPackage::name))
.toList()
Result.success(packages)
}
catch (ex: ExecutionException) {
Result.failure(ex)
}
}

View File

@@ -4,7 +4,6 @@ package com.jetbrains.python.run.runAnything
import com.intellij.openapi.actionSystem.DataContext
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.pip.PipBasedPackageManager
import com.jetbrains.python.packaging.repository.PyPIPackageRepository
import com.jetbrains.python.packaging.repository.PyPackageRepository
import com.jetbrains.python.psi.icons.PythonPsiApiIcons
@@ -33,7 +32,7 @@ class PyRunAnythingPipProvider : PyRunAnythingPackageProvider() {
override fun getPackageManager(dataContext: DataContext): PythonPackageManager? {
val pythonSdk = getSdk(dataContext) ?: return null
return (PythonPackageManager.forSdk(dataContext.project, pythonSdk) as? PipBasedPackageManager) ?: return null
return PythonPackageManager.forSdk(dataContext.project, pythonSdk)
}
override fun getPackageRepository(dataContext: DataContext): PyPackageRepository? {

View File

@@ -5,17 +5,19 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification
import com.jetbrains.python.packaging.pip.PipBasedPackageManager
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.pip.PipRepositoryManager
import org.jetbrains.annotations.TestOnly
import java.util.regex.Pattern
import org.jetbrains.annotations.TestOnly
class PoetryPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk) {
@Volatile
override var installedPackages: List<PythonPackage> = emptyList()
override val repositoryManager: PipRepositoryManager = PipRepositoryManager(project, sdk)
class PoetryPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(project, sdk) {
@Volatile
private var outdatedPackages: Map<String, PoetryOutdatedVersion> = emptyMap()
override val repositoryManager: PipRepositoryManager = PipRepositoryManager(project, sdk)
override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
poetryInstallPackage(sdk, specification.getVersionForPoetry(), options)
@@ -36,7 +38,6 @@ class PoetryPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(
internal fun getOutdatedPackages(): Map<String, PoetryOutdatedVersion> = outdatedPackages
/**
* Updates the list of outdated packages by running the Poetry command
* `poetry show --outdated`, parsing its output, and storing the results.