mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
PY-88148 PY-88157
Fix gray package colors for non-uv/poetry. Now getDeclaredPackageNames() from PythonPackageManager returns extracted declared deps for pyprojec.toml managers and all installed names for others. Added refresh of packages in PTW after removing some pkg. (cherry picked from commit 7942e4274aaadbf1c8b6ebce5abe27294624d41d) IJ-MR-195246 GitOrigin-RevId: 53348fcd3ec2ddb4d7678421898ba05079341298
This commit is contained in:
committed by
intellij-monorepo-bot
parent
33ecee8b25
commit
8bf5f7f51e
@@ -59,7 +59,17 @@ import kotlin.jvm.Throws
|
||||
* @see com.jetbrains.python.packaging.management.ui.PythonPackageManagerUI to execute commands with UI handlers
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
abstract class PythonPackageManager(val project: Project, val sdk: Sdk) : Disposable.Default {
|
||||
abstract class PythonPackageManager @ApiStatus.Internal constructor(
|
||||
val project: Project,
|
||||
val sdk: Sdk,
|
||||
/**
|
||||
* Whether this manager has an explicit list of top-level dependencies (e.g. from pyproject.toml).
|
||||
* When true, only packages from [extractDependenciesCached] are treated as "declared" in the UI,
|
||||
* and the rest are shown as transitive.
|
||||
* When false (default), all installed packages are considered declared.
|
||||
*/
|
||||
internal val installedMightBeTransitive: Boolean = false,
|
||||
) : Disposable.Default {
|
||||
private val isInited = AtomicBoolean(false)
|
||||
private val initializationJob = PyPackageCoroutine.launch(project, NON_INTERACTIVE_ROOT_TRACE_CONTEXT, start = CoroutineStart.LAZY) {
|
||||
initInstalledPackages()
|
||||
|
||||
@@ -294,6 +294,7 @@ class PyPackagingToolWindowService(val project: Project, val serviceScope: Corou
|
||||
text = message("python.packaging.notification.deleted", selectedPackages.joinToString(", ") { it.name }),
|
||||
displayId = PYTHON_PACKAGE_DELETED
|
||||
)
|
||||
refreshInstalledPackages()
|
||||
toolWindowPanel?.clearFocus()
|
||||
}
|
||||
}
|
||||
@@ -394,10 +395,12 @@ class PyPackagingToolWindowService(val project: Project, val serviceScope: Corou
|
||||
suspend fun refreshInstalledPackages() {
|
||||
val context = sdkContext ?: return
|
||||
|
||||
val declaredPackageNames = context.manager.extractDependenciesCached()
|
||||
?.getOrNull()
|
||||
?.map { it.name }?.toSet()
|
||||
?: emptySet()
|
||||
val declaredPackageNames = if (context.manager.installedMightBeTransitive) {
|
||||
context.manager.extractDependenciesCached()?.getOrNull() ?: emptyList()
|
||||
}
|
||||
else {
|
||||
context.manager.listInstalledPackages()
|
||||
}.mapTo(mutableSetOf()) { it.name }
|
||||
|
||||
withContext(Dispatchers.Default) {
|
||||
val packageIndex = PackageIndex(context.manager)
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.jetbrains.annotations.TestOnly
|
||||
import java.nio.file.Path
|
||||
|
||||
@ApiStatus.Internal
|
||||
class PoetryPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk) {
|
||||
class PoetryPackageManager(project: Project, sdk: Sdk) : PythonPackageManager(project, sdk, installedMightBeTransitive = true) {
|
||||
override val repositoryManager: PythonRepositoryManager = PipRepositoryManager.getInstance(project)
|
||||
|
||||
override suspend fun syncCommand(): PyResult<Unit> {
|
||||
|
||||
@@ -31,7 +31,7 @@ import kotlinx.coroutines.Deferred
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
internal class UvPackageManager(project: Project, sdk: Sdk, uvExecutionContextDeferred: Deferred<UvExecutionContext<*>>) : PythonPackageManager(project, sdk) {
|
||||
internal class UvPackageManager(project: Project, sdk: Sdk, uvExecutionContextDeferred: Deferred<UvExecutionContext<*>>) : PythonPackageManager(project, sdk, installedMightBeTransitive = true) {
|
||||
override val repositoryManager: PythonRepositoryManager = PipRepositoryManager.getInstance(project)
|
||||
private lateinit var uvLowLevel: PyResult<UvLowLevel<*>>
|
||||
private val uvExecutionContextDeferred = uvExecutionContextDeferred.also { it.cancelOnDispose(this) }
|
||||
|
||||
Reference in New Issue
Block a user