Skip to content

Commit 6639fba

Browse files
committed
Fix JVM proxy parsing for pip invoked by Maven/Gradle plugins
1 parent 34f321a commit 6639fba

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

integration-tests/test_gradle_plugin.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,29 @@ def check_gradle_python_resources_dir_and_external_dir_error(self):
496496
util.check_ouput("Cannot set both 'externalDirectory' and 'resourceDirectory' at the same time", out)
497497
assert return_code != 0, out
498498

499+
def check_proxy_settings(self):
500+
with TemporaryTestDirectory() as tmpdir:
501+
target_dir = os.path.join(str(tmpdir), "proxy_test" + self.target_dir_name_sufix())
502+
self.generate_app(target_dir)
503+
build_file = os.path.join(target_dir, self.build_file_name)
504+
append(build_file, self.packages_termcolor())
505+
506+
# Create gradle.properties with dummy proxy
507+
properties_path = os.path.join(target_dir, "gradle.properties")
508+
with open(properties_path, 'a') as f:
509+
f.write("\nsystemProp.http.proxyHost=somethingnonexisting.oracle.com\n")
510+
f.write("systemProp.http.proxyPort=1234\n")
511+
f.write("systemProp.https.proxyHost=somethingnonexisting.oracle.com\n")
512+
f.write("systemProp.https.proxyPort=1234\n")
513+
514+
log = Logger()
515+
gradlew_cmd = util.get_gradle_wrapper(target_dir, self.env)
516+
cmd = gradlew_cmd + ["--info", "assemble"]
517+
out, return_code = util.run_cmd(cmd, self.env, cwd=target_dir, logger=log)
518+
assert return_code != 0, out
519+
expected_proxy = "--proxy http://somethingnonexisting.oracle.com:1234"
520+
util.check_ouput(expected_proxy, out, contains=True, logger=log)
521+
499522

500523
def app1_with_namespaced_vfs(self):
501524
pass
@@ -615,6 +638,9 @@ def test_gradle_python_resources_dir_deprecation(self):
615638
def test_gradle_python_resources_dir_and_external_dir_error(self):
616639
self.check_gradle_python_resources_dir_and_external_dir_error()
617640

641+
def test_proxy_settings(self):
642+
self.check_proxy_settings()
643+
618644
def target_dir_name_sufix(self):
619645
return "_groovy"
620646

@@ -775,6 +801,9 @@ def test_gradle_python_resources_dir_deprecation(self):
775801
def test_gradle_python_resources_dir_and_external_dir_error(self):
776802
self.check_gradle_python_resources_dir_and_external_dir_error()
777803

804+
def test_proxy_settings(self):
805+
self.check_proxy_settings()
806+
778807
def target_dir_name_sufix(self):
779808
return "_kotlin"
780809

org.graalvm.python.embedding.tools/src/main/java/org/graalvm/python/embedding/tools/exec/GraalPyRunner.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import java.util.Arrays;
5656
import java.util.List;
5757
import java.util.Set;
58+
import java.net.InetSocketAddress;
5859

5960
public class GraalPyRunner {
6061

@@ -137,30 +138,20 @@ private static void runVenvBin(Path venvDirectory, String command, BuildToolLog
137138
}
138139

139140
private static void addProxy(ArrayList<String> args) {
140-
// if set, pip takes environment variables http_proxy and https_proxy
141141
if (System.getenv("http_proxy") == null && System.getenv("https_proxy") == null) {
142-
// if not set, use --proxy param
143142
ProxySelector proxySelector = ProxySelector.getDefault();
144143
List<Proxy> proxies = proxySelector.select(URI.create("https://pypi.org"));
145-
146-
String proxyAddr = null;
147144
for (Proxy proxy : proxies) {
148-
if (proxy.type() == Proxy.Type.HTTP) {
149-
proxyAddr = fixProtocol(proxy.address().toString(), "http");
150-
break;
145+
if (proxy.type() == Proxy.Type.HTTP && proxy.address() instanceof InetSocketAddress addr) {
146+
String proxyAddr = "http://" + addr.getHostName() + ":" + addr.getPort();
147+
args.add("--proxy");
148+
args.add(proxyAddr);
149+
return;
151150
}
152151
}
153-
if (proxyAddr != null) {
154-
args.add("--proxy");
155-
args.add(proxyAddr);
156-
}
157152
}
158153
}
159154

160-
private static String fixProtocol(String proxyAddress, String protocol) {
161-
return proxyAddress.startsWith(protocol) ? proxyAddress : protocol + "://" + proxyAddress;
162-
}
163-
164155
private static void runProcess(ProcessBuilder pb, BuildToolLog log) throws IOException, InterruptedException {
165156
Process process = pb.start();
166157
Thread outputReader = new Thread(() -> {

0 commit comments

Comments
 (0)