From: <cg...@us...> - 2008-12-06 04:23:49
|
Revision: 5710 http://jython.svn.sourceforge.net/jython/?rev=5710&view=rev Author: cgroves Date: 2008-12-06 04:23:45 +0000 (Sat, 06 Dec 2008) Log Message: ----------- Fix deserializing Jython objects while not in Python code. __builtin__.__import__ was changed to bail if Py.getFrame was null, but it can be called from Java code as in PyObjectInputStream, so it should just use PySystemState.builtins if it doesn't have a set of builtins from the frame. Modified Paths: -------------- branches/newstyle-java-types/src/org/python/core/__builtin__.java Added Paths: ----------- branches/newstyle-java-types/tests/java/org/python/tests/SerializationTest.java Modified: branches/newstyle-java-types/src/org/python/core/__builtin__.java =================================================================== --- branches/newstyle-java-types/src/org/python/core/__builtin__.java 2008-12-06 04:19:46 UTC (rev 5709) +++ branches/newstyle-java-types/src/org/python/core/__builtin__.java 2008-12-06 04:23:45 UTC (rev 5710) @@ -1221,11 +1221,10 @@ public static PyObject __import__(String name, PyObject globals, PyObject locals, PyObject fromlist, int level) { PyFrame frame = Py.getFrame(); - if (frame == null) { - return null; - } - PyObject builtins = frame.f_builtins; - if (builtins == null) { + PyObject builtins; + if (frame != null && frame.f_builtins != null) { + builtins = frame.f_builtins; + } else { builtins = PySystemState.builtins; } Added: branches/newstyle-java-types/tests/java/org/python/tests/SerializationTest.java =================================================================== --- branches/newstyle-java-types/tests/java/org/python/tests/SerializationTest.java (rev 0) +++ branches/newstyle-java-types/tests/java/org/python/tests/SerializationTest.java 2008-12-06 04:23:45 UTC (rev 5710) @@ -0,0 +1,37 @@ +package org.python.tests; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; + +import junit.framework.TestCase; + +import org.python.core.PyStringMap; +import org.python.core.PySystemState; +import org.python.util.PythonInterpreter; +import org.python.util.PythonObjectInputStream; + +public class SerializationTest extends TestCase { + + private PythonInterpreter interp; + + @Override + protected void setUp() throws Exception { + interp = new PythonInterpreter(new PyStringMap(), new PySystemState()); + interp.exec("from java.io import Serializable"); + interp.exec("class Test(Serializable): pass"); + interp.exec("x = Test()"); + } + + public void testDirect() throws IOException, ClassNotFoundException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + new ObjectOutputStream(os).writeObject(interp.get("x")); + new PythonObjectInputStream(new ByteArrayInputStream(os.toByteArray())).readObject(); + } + + public void testJython() { + interp.set("t", this); + interp.exec("t.testDirect()"); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |