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);
/** * Returns either <code>object.__findattr__("keys").__call__()</code> * or <code>object.__findattr__("keySet").__call__()</code>. */ public TemplateCollectionModel keys() throws TemplateModelException { try { PyObject method = object.__findattr__(KEYS); if (method == null) { method = object.__findattr__(KEYSET); } if (method != null) { return (TemplateCollectionModel) wrapper.wrap(method.__call__()); } } catch (PyException e) { throw new TemplateModelException(e); } throw new TemplateModelException( "'?keys' is not supported as there is no 'keys' nor 'keySet' attribute on an instance of " + JythonVersionAdapterHolder.INSTANCE.getPythonClassName(object)); }
@Override public String getPythonClassName(PyObject pyObject) { return pyObject.getType().getName(); }
/** * Returns either {@link PyObject#__tojava__(java.lang.Class)} with * {@link java.lang.Number}.class as argument. If that fails, returns * {@link PyObject#__float__()}. */ public Number getAsNumber() throws TemplateModelException { try { Object value = object.__tojava__(java.lang.Number.class); if (value == null || value == Py.NoConversion) { return Double.valueOf(object.__float__().getValue()); } return (Number) value; } catch (PyException e) { throw new TemplateModelException(e); } } }
obj = object.__findattr__(key); if (obj == null) { obj = object.__finditem__(key); obj = object.__finditem__(key); if (obj == null) { obj = object.__findattr__(key);
public String toString() { PyType self_type=getType(); PyObject impl=self_type.lookup("__repr__"); if (impl!=null) { PyObject res=impl.__get__(this,self_type).__call__(); if (!(res instanceof PyString)) throw Py.TypeError("__repr__ returned non-string (type "+res.getType().fastGetName()+")"); return((PyString)res).toString(); } return super.toString(); }
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 String toString() { PyObject mod = __dict__.__finditem__("__module__"); String modStr = (mod == null || !Py.isInstance(mod, PyString.TYPE)) ? "?" : mod.toString(); return String.format("<class %s.%s at %s>", modStr, __name__, Py.idstr(this)); }
public void setDict(PyObject newDict) { if (newDict instanceof PyStringMap||newDict instanceof PyDictionary) { dict=newDict; if (dict.__finditem__(PyString.fromInterned("__del__"))!=null&&!JyAttribute.hasAttr(this,JyAttribute.FINALIZE_TRIGGER_ATTR)) { FinalizeTrigger.ensureFinalizer(this); } } else { throw Py.TypeError("__dict__ must be set to a Dictionary "+newDict.getClass().getName()); } }
public Object invoke(Object... args) throws Exception { PyObject[] pyArgs = new PyObject[args.length]; for (int i = 0; i < args.length; i++) pyArgs[i] = Py.java2py(args[i]); PyObject pyResult = fn.__call__(pyArgs); if (pyResult == null) return null; // todo: number conversions should be handled higher up in the code, and not at the Jython level. if (pyResult instanceof PyLong || pyResult instanceof PyInteger) return pyResult.__tojava__(Long.class); Object result = pyResult.__tojava__(Object.class); if (result == Py.NoConversion) throw new RuntimeException("Cannot convert Python object " + pyResult + " to java."); return result; }
public static PyString _UnpickleableError__str__(PyObject self, PyObject[] args, String[] kwargs) { PyObject selfArgs = self.__getattr__("args"); PyObject a = selfArgs.__len__() > 0 ? selfArgs.__getitem__(0) : new PyString("(what)"); return new PyString("Cannot pickle %s objects").__mod__(a).__str__(); }
public PyFloat __float__() { PyType self_type=getType(); PyObject impl=self_type.lookup("__float__"); if (impl!=null) { PyObject res=impl.__get__(this,self_type).__call__(); if (res instanceof PyFloat) return(PyFloat)res; throw Py.TypeError("__float__"+" returned non-"+"float"+" (type "+res.getType().fastGetName()+")"); } return super.__float__(); }
public static int py2int(PyObject o, String msg) { if (o instanceof PyInteger) { return ((PyInteger) o).getValue(); } Object obj = o.__tojava__(Integer.TYPE); if (obj == Py.NoConversion) { throw Py.TypeError(msg); } return ((Integer) obj).intValue(); }
public static PyObject reversed(PyObject seq) { PyObject reversed = seq.__findattr__("__reversed__"); if (reversed != null) { return reversed.__call__(); } else if (seq.__findattr__("__getitem__") != null && seq.__findattr__("__len__") != null && seq.__findattr__("keys") == null) { reversed = new PyReversedIterator(seq); } else { throw Py.TypeError("argument to reversed() must be a sequence"); } return reversed; }
private static void runModule(InteractiveConsole interp, String moduleName, boolean set_argv0) { // PEP 338 - Execute module as a script try { PyObject runpy = imp.importName("runpy", true); PyObject runmodule = runpy.__findattr__("_run_module_as_main"); runmodule.__call__(Py.newStringOrUnicode(moduleName), Py.newBoolean(set_argv0)); } catch (Throwable t) { Py.printException(t); interp.cleanup(); System.exit(-1); } }
interpreter.set("myvariable", Integer(21)); PyObject answer = interpreter.eval("'the answer is: %s' % (2*myvariable)"); System.out.println(answer.toString());
private static String warn_hcategory(PyObject category) { PyObject name = category.__findattr__("__name__"); if (name != null) { return "[" + name + "]"; } return "[warning]"; }
private static char toChar(String name, PyObject src, char dflt) { if (src == null) { return dflt; } boolean isStr = Py.isInstance(src, PyString.TYPE); if (src == Py.None || isStr && src.__len__() == 0) { return '\0'; } else if (!isStr || src.__len__() != 1) { throw Py.TypeError(String.format("\"%s\" must be an 1-character string", name)); } return src.toString().charAt(0); }