99} from 'vscode' ;
1010import {
1111 DidChangePackagesEventArgs ,
12+ GetPackagesOptions ,
1213 IconPath ,
1314 Package ,
1415 PackageChangeKind ,
@@ -100,9 +101,38 @@ export class CondaPackageManager implements PackageManager, Disposable {
100101 ) ;
101102 }
102103
103- async getPackages ( environment : PythonEnvironment ) : Promise < Package [ ] | undefined > {
104- if ( ! this . packages . has ( environment . envId . id ) ) {
105- await this . refresh ( environment ) ;
104+ async getPackages ( environment : PythonEnvironment , options ?: GetPackagesOptions ) : Promise < Package [ ] | undefined > {
105+ if ( options ?. skipCache || ! this . packages . has ( environment . envId . id ) ) {
106+ const args = [ 'list' , '-p' , environment . environmentPath . fsPath , '--json' ] ;
107+ const data = await runCondaExecutable ( args ) ;
108+
109+ let condaPackages : { name : string ; version : string } [ ] ;
110+ try {
111+ condaPackages = JSON . parse ( data ) as { name : string ; version : string } [ ] ;
112+ } catch ( e ) {
113+ traceError ( `Failed to parse conda list JSON output: ${ data } ` , e ) ;
114+ return [ ] ;
115+ }
116+
117+ const packages : Package [ ] = [ ] ;
118+ for ( const condaPkg of condaPackages ) {
119+ if ( condaPkg . name && condaPkg . version ) {
120+ packages . push (
121+ this . api . createPackageItem (
122+ {
123+ name : condaPkg . name ,
124+ displayName : condaPkg . name ,
125+ version : condaPkg . version ,
126+ description : condaPkg . version ,
127+ } ,
128+ environment ,
129+ this ,
130+ ) ,
131+ ) ;
132+ }
133+ }
134+ this . packages . set ( environment . envId . id , packages ) ;
135+ return packages ;
106136 }
107137 return this . packages . get ( environment . envId . id ) ;
108138 }
@@ -112,38 +142,6 @@ export class CondaPackageManager implements PackageManager, Disposable {
112142 this . packages . clear ( ) ;
113143 }
114144
115- async fetchPackages ( environment : PythonEnvironment ) : Promise < Package [ ] > {
116- const args = [ 'list' , '-p' , environment . environmentPath . fsPath , '--json' ] ;
117- const data = await runCondaExecutable ( args ) ;
118-
119- let condaPackages : { name : string ; version : string } [ ] ;
120- try {
121- condaPackages = JSON . parse ( data ) as { name : string ; version : string } [ ] ;
122- } catch ( e ) {
123- traceError ( `Failed to parse conda list JSON output: ${ data } ` , e ) ;
124- return [ ] ;
125- }
126-
127- const packages : Package [ ] = [ ] ;
128- for ( const condaPkg of condaPackages ) {
129- if ( condaPkg . name && condaPkg . version ) {
130- packages . push (
131- this . api . createPackageItem (
132- {
133- name : condaPkg . name ,
134- displayName : condaPkg . name ,
135- version : condaPkg . version ,
136- description : condaPkg . version ,
137- } ,
138- environment ,
139- this ,
140- ) ,
141- ) ;
142- }
143- }
144- return packages ;
145- }
146-
147145 setPackages (
148146 environment : PythonEnvironment ,
149147 packages : Package [ ] ,
0 commit comments