@@ -94,7 +94,8 @@ private record CondaEnv(
94
94
Map <String , Package > packages ,
95
95
String pythonVersion ,
96
96
String pypiIndex ,
97
- boolean noDeps
97
+ boolean noDeps ,
98
+ List <String > extraIndexUrls
98
99
) {}
99
100
100
101
/**
@@ -110,12 +111,12 @@ public String buildCondaYaml(String condaYaml) {
110
111
throw new IllegalArgumentException ("Cannot build env from yaml" );
111
112
}
112
113
113
- return buildCondaYaml (env .packages , env .pythonVersion , env .pypiIndex , env .noDeps );
114
+ return buildCondaYaml (env .packages , env .pythonVersion , env .pypiIndex , env .noDeps , env . extraIndexUrls );
114
115
}
115
116
116
117
@ Nullable
117
118
private String buildCondaYaml (Map <String , Package > packages , String pythonVersion , String pypiIndex ,
118
- boolean noDeps )
119
+ boolean noDeps , List < String > extraIndexUrls )
119
120
{
120
121
try {
121
122
var installedEnv = envs .values ().stream ()
@@ -149,14 +150,15 @@ private String buildCondaYaml(Map<String, Package> packages, String pythonVersio
149
150
}
150
151
151
152
return buildYaml (new CondaEnv (installedEnv .name , packages , installedEnv .pythonVersion ,
152
- pypiIndex , noDeps ));
153
+ pypiIndex , noDeps , extraIndexUrls ));
153
154
}
154
155
155
156
} catch (Exception e ) {
156
157
LOG .error ("Error while building conda yaml for packages {}: " , packages , e );
157
158
}
158
159
159
- return buildYaml (new CondaEnv ("py" + pythonVersion , packages , pythonVersion , pypiIndex , noDeps ));
160
+ return buildYaml (new CondaEnv ("py" + pythonVersion , packages , pythonVersion , pypiIndex , noDeps ,
161
+ extraIndexUrls ));
160
162
}
161
163
162
164
public void notifyInstalled (String condaYaml ) {
@@ -199,7 +201,7 @@ public String resolveEnvName(String condaYaml) {
199
201
}
200
202
201
203
@ Nullable
202
- private CondaEnv build (String condaYaml ) {
204
+ CondaEnv build (String condaYaml ) {
203
205
var yaml = new Yaml ();
204
206
//noinspection unchecked
205
207
var res = (Map <String , Object >) yaml .load (condaYaml );
@@ -214,6 +216,7 @@ private CondaEnv build(String condaYaml) {
214
216
String pythonVersion = null ;
215
217
String pypiIndex = null ;
216
218
boolean noDeps = false ;
219
+ List <String > extraIndexUrls = new ArrayList <>();
217
220
218
221
for (var dep : deps ) {
219
222
if (dep instanceof String ) {
@@ -246,6 +249,12 @@ private CondaEnv build(String condaYaml) {
246
249
pypiIndex = parts .length > 1 ? parts [1 ] : null ;
247
250
continue ;
248
251
}
252
+ if (((String ) pipDep ).startsWith ("--extra-index-url" )) {
253
+ var parts = ((String ) pipDep ).split (" " );
254
+ var extraIndex = parts .length > 1 ? parts [1 ] : null ;
255
+ extraIndexUrls .add (extraIndex );
256
+ continue ;
257
+ }
249
258
if (((String ) pipDep ).startsWith ("--no-deps" )) {
250
259
noDeps = true ;
251
260
}
@@ -281,7 +290,8 @@ private CondaEnv build(String condaYaml) {
281
290
}
282
291
}
283
292
284
- return new CondaEnv (name , pkgs , pythonVersion , pypiIndex == null ? DEFAULT_PYPI_INDEX : pypiIndex , noDeps );
293
+ return new CondaEnv (name , pkgs , pythonVersion , pypiIndex == null ? DEFAULT_PYPI_INDEX : pypiIndex , noDeps ,
294
+ extraIndexUrls );
285
295
}
286
296
287
297
private String buildYaml (CondaEnv env ) {
@@ -292,6 +302,10 @@ private String buildYaml(CondaEnv env) {
292
302
pkgs .add ("--no-deps" );
293
303
}
294
304
305
+ for (var extraUrl : env .extraIndexUrls ) {
306
+ pkgs .add ("--extra-index-url " + extraUrl );
307
+ }
308
+
295
309
for (var p : env .packages .values ()) {
296
310
pkgs .add (p .version != null ? p .name + "==" + p .version : p .name );
297
311
}
0 commit comments