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.PyExecutionException
import com.jetbrains.python.packaging.common.PythonPackage import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification 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.flavors.conda.PyCondaFlavorData
import com.jetbrains.python.sdk.getOrCreateAdditionalData import com.jetbrains.python.sdk.getOrCreateAdditionalData
import com.jetbrains.python.sdk.targetEnvConfiguration import com.jetbrains.python.sdk.targetEnvConfiguration
@@ -27,8 +27,8 @@ import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls import org.jetbrains.annotations.Nls
@ApiStatus.Experimental @ApiStatus.Experimental
class CondaPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(project, sdk) { class CondaPackageManager(project: Project, sdk: Sdk) : PipPythonPackageManager(project, sdk) {
override val repositoryManager: CondaRepositoryManger = CondaRepositoryManger(project, sdk) override val repositoryManager = CondaRepositoryManger(project, sdk)
override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> = override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
if (specification is CondaPackageSpecification) { if (specification is CondaPackageSpecification) {
@@ -72,7 +72,7 @@ class CondaPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(p
override suspend fun reloadPackagesCommand(): Result<List<PythonPackage>> = override suspend fun reloadPackagesCommand(): Result<List<PythonPackage>> =
try { 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)) Result.success(parseCondaPackageList(output))
} }
catch (ex: ExecutionException) { 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. // 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 package com.jetbrains.python.packaging.management
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.writeAction import com.intellij.openapi.application.writeAction
import com.intellij.openapi.components.service import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project 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.roots.OrderRootType
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
import com.intellij.util.messages.Topic 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.PackageManagerHolder
import com.jetbrains.python.packaging.common.PythonPackage import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageManagementListener import com.jetbrains.python.packaging.common.PythonPackageManagementListener
@@ -39,8 +41,19 @@ abstract class PythonPackageManager(val project: Project, val sdk: Sdk) {
return reloadPackages() 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 installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String>
protected abstract suspend fun updatePackageCommand(specification: PythonPackageSpecification): 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. // 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 package com.jetbrains.python.packaging.pip
import com.intellij.execution.ExecutionException
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk 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 org.jetbrains.annotations.ApiStatus
import kotlin.collections.plus
@ApiStatus.Experimental @ApiStatus.Experimental
class PipPythonPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(project, sdk) { open class PipPythonPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk) {
override val repositoryManager: PipRepositoryManager = PipRepositoryManager(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.intellij.openapi.actionSystem.DataContext
import com.jetbrains.python.PyBundle import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.management.PythonPackageManager 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.PyPIPackageRepository
import com.jetbrains.python.packaging.repository.PyPackageRepository import com.jetbrains.python.packaging.repository.PyPackageRepository
import com.jetbrains.python.psi.icons.PythonPsiApiIcons import com.jetbrains.python.psi.icons.PythonPsiApiIcons
@@ -33,7 +32,7 @@ class PyRunAnythingPipProvider : PyRunAnythingPackageProvider() {
override fun getPackageManager(dataContext: DataContext): PythonPackageManager? { override fun getPackageManager(dataContext: DataContext): PythonPackageManager? {
val pythonSdk = getSdk(dataContext) ?: return null 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? { 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.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.packaging.common.PythonPackage import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.common.PythonPackageSpecification 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 com.jetbrains.python.packaging.pip.PipRepositoryManager
import org.jetbrains.annotations.TestOnly
import java.util.regex.Pattern 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 @Volatile
private var outdatedPackages: Map<String, PoetryOutdatedVersion> = emptyMap() 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> = override suspend fun installPackageCommand(specification: PythonPackageSpecification, options: List<String>): Result<String> =
poetryInstallPackage(sdk, specification.getVersionForPoetry(), options) poetryInstallPackage(sdk, specification.getVersionForPoetry(), options)
@@ -36,7 +38,6 @@ class PoetryPackageManager(project: Project, sdk: Sdk) : PipBasedPackageManager(
internal fun getOutdatedPackages(): Map<String, PoetryOutdatedVersion> = outdatedPackages internal fun getOutdatedPackages(): Map<String, PoetryOutdatedVersion> = outdatedPackages
/** /**
* Updates the list of outdated packages by running the Poetry command * Updates the list of outdated packages by running the Poetry command
* `poetry show --outdated`, parsing its output, and storing the results. * `poetry show --outdated`, parsing its output, and storing the results.