Skip to content

Commit bf42d8a

Browse files
committed
feat: expose registered package manager
1 parent 4d32f1d commit bf42d8a

4 files changed

Lines changed: 23 additions & 0 deletions

File tree

api/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [1.37.0]
99

1010
- Aligned the API package version with the Python Environments extension version.
11+
- Added `getPackageManager` to retrieve the registered package manager for an environment.

src/api.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,14 @@ export interface PythonPackageManagerRegistrationApi {
10911091
}
10921092

10931093
export interface PythonPackageGetterApi {
1094+
/**
1095+
* Get the registered package manager associated with a Python Environment.
1096+
*
1097+
* @param environment The Python Environment whose package manager is required.
1098+
* @returns The registered package manager, or undefined if no package manager is available.
1099+
*/
1100+
getPackageManager(environment: PythonEnvironment): Promise<PackageManager | undefined>;
1101+
10941102
/**
10951103
* Refresh the list of packages in a Python Environment.
10961104
*

src/features/pythonApi.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ export class PythonEnvironmentApiImpl implements PythonEnvironmentApi {
303303
}
304304
return manager.manage(context, options);
305305
}
306+
async getPackageManager(context: PythonEnvironment): Promise<PackageManager | undefined> {
307+
await waitForEnvManagerId([context.envId.managerId]);
308+
return this.envManagers.getPackageManager(context);
309+
}
306310
async refreshPackages(context: PythonEnvironment): Promise<Package[] | undefined> {
307311
await waitForEnvManagerId([context.envId.managerId]);
308312
const manager = this.envManagers.getPackageManager(context);

src/test/integration/packageManager.integration.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,16 @@ for (const profile of profiles) {
9494
assert.ok(!packages?.some((pkg) => pkg.name === 'requests'), 'Package not uninstalled');
9595
});
9696

97+
test(`${profile.name} Package Manager should list available package versions`, async () => {
98+
const packageManager = await api.getPackageManager(environment!);
99+
assert.ok(packageManager, 'Package manager not available');
100+
assert.ok(packageManager.getPackageAvailableVersions, 'Available versions method not available');
101+
102+
const versions = await packageManager.getPackageAvailableVersions(environment!, 'requests');
103+
assert.ok(versions, 'Package versions not available');
104+
assert.ok(versions.length > 0, 'No package versions available');
105+
});
106+
97107
suiteTeardown(async () => {
98108
try {
99109
await deleteEnvironmentDirectory(vscode.Uri.joinPath(workspaceUri, profile.environmentDirectory));

0 commit comments

Comments
 (0)