/** * Convert java object to its corresponding PyObject representation. * * @param o Java object * @return PyObject */ public static PyObject adapt(Object o) { if (o instanceof PyObject) { return (PyObject) o; } return Py.java2py(o); }
public String getPythonClassName(PyObject pyObject) { return pyObject.getType().getFullName(); }
PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("import sys\nsys.path.append('pathToModiles if they're not there by default')\nimport yourModule"); // execute a function that takes a string and returns a string PyObject someFunc = interpreter.get("funcName"); PyObject result = someFunc.__call__(new PyString("Test!")); String realResult = (String) result.__tojava__(String.class);
public Object getAdaptedObject(Class hint) { if (object == null) { return null; } Object view = object.__tojava__(hint); if (view == Py.NoConversion) { view = object.__tojava__(Object.class); } return view; }
@Override public PyString read(Kryo kryo, Input input, Class<PyString> type) { return new PyString(input.readString()); } }
private static synchronized PythonInterpreter initPythonInterpreter(String[] args, String pythonPath, String scriptName) { if (!jythonInitialized) { // the java stack traces within the jython runtime aren't useful for users System.getProperties().put("python.options.includeJavaStackInExceptions", "false"); PySystemState.initialize(System.getProperties(), new Properties(), args); pythonInterpreter = new PythonInterpreter(); pythonInterpreter.getSystemState().path.add(0, pythonPath); pythonInterpreter.setErr(System.err); pythonInterpreter.setOut(System.out); pythonInterpreter.exec("import " + scriptName); jythonInitialized = true; } return pythonInterpreter; } }
@Override public PyInteger read(Kryo kryo, Input input, Class<PyInteger> type) { return new PyInteger(input.readInt()); } }
@Override public PyLong read(Kryo kryo, Input input, Class<PyLong> type) { int length = input.readShort(); return new PyLong(new BigInteger(input.readBytes(length))); } }
@Override public void write(Kryo kryo, Output output, PyFloat object) { output.writeDouble(object.getValue()); }
@Override public void write(Kryo kryo, Output output, PyInteger object) { output.writeInt(object.getValue()); }
@Override public PyFloat read(Kryo kryo, Input input, Class<PyFloat> type) { return new PyFloat(input.readDouble()); } }
@Override public void write(Kryo kryo, Output output, PyBoolean object) { output.writeBoolean(object.getBooleanValue()); }
public Object pyInstanceToJava(Object pyInstance) { return ((PyJavaInstance) pyInstance).__tojava__(java.lang.Object.class); }
@Override public Object pyInstanceToJava(Object pyInstance) { return ((PyInstance) pyInstance).__tojava__(java.lang.Object.class); }
@Override public PyBoolean read(Kryo kryo, Input input, Class<PyBoolean> type) { return new PyBoolean(input.readBoolean()); } }
@Override public void write(Kryo kryo, Output output, PyString object) { output.writeString(object.asString()); }
@Override public void write(Kryo kryo, Output output, PyLong object) { byte[] data = object.getValue().toByteArray(); output.writeShort(data.length); output.writeBytes(data); }
public Object getWrappedObject() { return object == null ? null : object.__tojava__(Object.class); } }
public Object pyInstanceToJava(Object pyInstance) { return ((PyJavaInstance) pyInstance).__tojava__(java.lang.Object.class); }