This is an automated email from the ASF dual-hosted git repository.

gyeongtae pushed a commit to branch branch-0.12
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/branch-0.12 by this push:
     new 5fdd0a1141 [ZEPPELIN-6308] Extract hardcoded py4j values to constants
5fdd0a1141 is described below

commit 5fdd0a11413b1819057f2bec8bf14a8688b64105
Author: YeonKyung Ryu <80758099+celin...@users.noreply.github.com>
AuthorDate: Sun Sep 7 19:44:44 2025 +0900

    [ZEPPELIN-6308] Extract hardcoded py4j values to constants
    
    ### What is this PR for?
    This PR extracts hardcoded py4j values to constants in Python interpreters 
to improve maintainability. It creates a new PythonConstants class to 
centralize py4j version and file path constants, replacing hardcoded strings 
across multiple Python interpreter classes. This addresses the TODO comment 
requesting to avoid hardcoded py4j values.
    
    ### What type of PR is it?
    Refactoring
    
    ### Todos
    * [x] - Create PythonConstants class with py4j constants
    * [x] - Replace hardcoded py4j values in IPythonInterpreter
    * [x] - Replace hardcoded py4j values in PythonInterpreter
    * [x] - Replace hardcoded py4j values in PythonDockerInterpreter
    
    ### What is the Jira issue?
    [ZEPPELIN-6308](https://issues.apache.org/jira/browse/ZEPPELIN-6308)
    
    ### How should this be tested?
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the license files need to update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Closes #5056 from celinayk/ZEPPELIN-6308.
    
    Signed-off-by: ParkGyeongTae <gyeong...@apache.org>
    (cherry picked from commit 4297661d8f15453a30a898dc9151c6ab6c181e7f)
    Signed-off-by: ParkGyeongTae <gyeong...@apache.org>
---
 .../apache/zeppelin/python/IPythonInterpreter.java |  5 ++--
 .../apache/zeppelin/python/PythonConstants.java    | 34 ++++++++++++++++++++++
 .../zeppelin/python/PythonDockerInterpreter.java   |  3 +-
 .../apache/zeppelin/python/PythonInterpreter.java  |  8 +++--
 4 files changed, 44 insertions(+), 6 deletions(-)

diff --git 
a/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java 
b/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
index d40cef49b8..5d352028a8 100644
--- a/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
+++ b/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
@@ -178,10 +178,9 @@ public class IPythonInterpreter extends 
JupyterKernelInterpreter {
   protected Map<String, String> setupKernelEnv() throws IOException {
     Map<String, String> envs = super.setupKernelEnv();
     if (useBuiltinPy4j) {
-      //TODO(zjffdu) don't do hard code on py4j here
-      File py4jDestFile = new File(kernelWorkDir, "py4j-src-0.10.9.7.zip");
+      File py4jDestFile = new File(kernelWorkDir, 
PythonConstants.PY4J_ZIP_FILENAME);
       FileUtils.copyURLToFile(getClass().getClassLoader().getResource(
-              "python/py4j-src-0.10.9.7.zip"), py4jDestFile);
+              PythonConstants.PY4J_RESOURCE_PATH), py4jDestFile);
       if (additionalPythonPath != null) {
         // put the py4j at the end, because additionalPythonPath may already 
contain py4j.
         // e.g. IPySparkInterpreter
diff --git 
a/python/src/main/java/org/apache/zeppelin/python/PythonConstants.java 
b/python/src/main/java/org/apache/zeppelin/python/PythonConstants.java
new file mode 100644
index 0000000000..7134c542dd
--- /dev/null
+++ b/python/src/main/java/org/apache/zeppelin/python/PythonConstants.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.zeppelin.python;
+
+/**
+ * Constants for Python interpreters
+ */
+public class PythonConstants {
+  
+  // Py4j constants
+  public static final String PY4J_VERSION = "0.10.9.7";
+  public static final String PY4J_ZIP_FILENAME = "py4j-src-" + PY4J_VERSION + 
".zip";
+  public static final String PY4J_RESOURCE_PATH = "python/" + 
PY4J_ZIP_FILENAME;
+  
+  private PythonConstants() {
+    // Utility class, prevent instantiation
+  }
+}
+
diff --git 
a/python/src/main/java/org/apache/zeppelin/python/PythonDockerInterpreter.java 
b/python/src/main/java/org/apache/zeppelin/python/PythonDockerInterpreter.java
index 845bb88ae7..af550dd88a 100644
--- 
a/python/src/main/java/org/apache/zeppelin/python/PythonDockerInterpreter.java
+++ 
b/python/src/main/java/org/apache/zeppelin/python/PythonDockerInterpreter.java
@@ -91,7 +91,8 @@ public class PythonDockerInterpreter extends Interpreter {
           ":/_zeppelin ";
 
       // set PYTHONPATH
-      String pythonPath = 
".:/_python_workdir/py4j-src-0.10.9.7.zip:/_python_workdir";
+      String pythonPath = ".:/_python_workdir/" +
+          PythonConstants.PY4J_ZIP_FILENAME + ":/_python_workdir";
 
       setPythonCommand("docker run -i --rm " +
           mountPythonScript +
diff --git 
a/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java 
b/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
index 46dbf8badd..d82263f946 100644
--- a/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
+++ b/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
@@ -186,7 +186,10 @@ public class PythonInterpreter extends Interpreter {
     copyResourceToPythonWorkDir("python/zeppelin_context.py", 
"zeppelin_context.py");
     copyResourceToPythonWorkDir("python/backend_zinline.py", 
"backend_zinline.py");
     copyResourceToPythonWorkDir("python/mpl_config.py", "mpl_config.py");
-    copyResourceToPythonWorkDir("python/py4j-src-0.10.9.7.zip", 
"py4j-src-0.10.9.7.zip");
+    copyResourceToPythonWorkDir(
+        PythonConstants.PY4J_RESOURCE_PATH,
+        PythonConstants.PY4J_ZIP_FILENAME);
+
   }
 
   protected boolean useIPython() {
@@ -212,7 +215,8 @@ public class PythonInterpreter extends Interpreter {
     Map<String, String> env = EnvironmentUtils.getProcEnvironment();
     appendToPythonPath(env, pythonWorkDir.getAbsolutePath());
     if (useBuiltinPy4j) {
-      appendToPythonPath(env, pythonWorkDir.getAbsolutePath() + 
"/py4j-src-0.10.9.7.zip");
+      appendToPythonPath(env,
+          pythonWorkDir.getAbsolutePath() + "/" + 
PythonConstants.PY4J_ZIP_FILENAME);
     }
     LOGGER.info("PYTHONPATH: {}", env.get("PYTHONPATH"));
     return env;

Reply via email to