Search in sources :

Example 1 with PyInteger

use of org.python.core.PyInteger in project freemarker by apache.

the class JythonModelCache method create.

@Override
protected TemplateModel create(Object obj) {
    boolean asHash = false;
    boolean asSequence = false;
    JythonVersionAdapter versionAdapter = JythonVersionAdapterHolder.INSTANCE;
    if (versionAdapter.isPyInstance(obj)) {
        Object jobj = versionAdapter.pyInstanceToJava(obj);
        // FreeMarker-aware, Jython-wrapped Java objects are left intact
        if (jobj instanceof TemplateModel) {
            return (TemplateModel) jobj;
        }
        if (jobj instanceof Map) {
            asHash = true;
        }
        if (jobj instanceof Date) {
            return new DateModel((Date) jobj, BeansWrapper.getDefaultInstance());
        } else if (jobj instanceof Collection) {
            asSequence = true;
            // doesn't support sets.
            if (!(jobj instanceof List)) {
                obj = new ArrayList((Collection) jobj);
            }
        }
    }
    // If it's not a PyObject, first make a PyObject out of it.
    if (!(obj instanceof PyObject)) {
        obj = Py.java2py(obj);
    }
    if (asHash || obj instanceof PyDictionary || obj instanceof PyStringMap) {
        return JythonHashModel.FACTORY.create(obj, wrapper);
    }
    if (asSequence || obj instanceof PySequence) {
        return JythonSequenceModel.FACTORY.create(obj, wrapper);
    }
    if (obj instanceof PyInteger || obj instanceof PyLong || obj instanceof PyFloat) {
        return JythonNumberModel.FACTORY.create(obj, wrapper);
    }
    if (obj instanceof PyNone) {
        return null;
    }
    return JythonModel.FACTORY.create(obj, wrapper);
}
Also used : DateModel(freemarker.ext.beans.DateModel) ArrayList(java.util.ArrayList) PyFloat(org.python.core.PyFloat) TemplateModel(freemarker.template.TemplateModel) PyInteger(org.python.core.PyInteger) PyDictionary(org.python.core.PyDictionary) Date(java.util.Date) PyNone(org.python.core.PyNone) PyLong(org.python.core.PyLong) PyStringMap(org.python.core.PyStringMap) Collection(java.util.Collection) PyObject(org.python.core.PyObject) ArrayList(java.util.ArrayList) List(java.util.List) PySequence(org.python.core.PySequence) PyStringMap(org.python.core.PyStringMap) Map(java.util.Map) PyObject(org.python.core.PyObject)

Example 2 with PyInteger

use of org.python.core.PyInteger in project apex-malhar by apache.

the class PythonOperatorTest method testJavaOperator.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testJavaOperator() {
    PythonOperator oper = new PythonOperator();
    String setupScript = "import operator\n";
    setupScript += "def square():\n";
    setupScript += "  return val*val\n\n";
    oper.addSetupScript(setupScript);
    oper.setScript("square()");
    oper.setPassThru(true);
    CollectorTestSink sink = new CollectorTestSink();
    oper.result.setSink(sink);
    HashMap<String, Object> tuple = new HashMap<String, Object>();
    tuple.put("val", new Integer(2));
    oper.setup(null);
    oper.beginWindow(0);
    oper.inBindings.process(tuple);
    oper.endWindow();
    Assert.assertEquals("number emitted tuples", 1, sink.collectedTuples.size());
    for (Object o : sink.collectedTuples) {
        PyInteger val = (PyInteger) o;
        Assert.assertEquals("emitted should be 4", new Integer(4), (Integer) val.__tojava__(Integer.class));
    }
}
Also used : PyInteger(org.python.core.PyInteger) HashMap(java.util.HashMap) PyInteger(org.python.core.PyInteger) CollectorTestSink(org.apache.apex.malhar.lib.testbench.CollectorTestSink) Test(org.junit.Test)

Aggregations

PyInteger (org.python.core.PyInteger)2 DateModel (freemarker.ext.beans.DateModel)1 TemplateModel (freemarker.template.TemplateModel)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 CollectorTestSink (org.apache.apex.malhar.lib.testbench.CollectorTestSink)1 Test (org.junit.Test)1 PyDictionary (org.python.core.PyDictionary)1 PyFloat (org.python.core.PyFloat)1 PyLong (org.python.core.PyLong)1 PyNone (org.python.core.PyNone)1 PyObject (org.python.core.PyObject)1 PySequence (org.python.core.PySequence)1 PyStringMap (org.python.core.PyStringMap)1