Issue1709
Created on 2011-02-22.20:53:46 by anamitrab, last changed 2013-02-19.23:46:05 by fwierzbicki.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | Remove |
| unnamed | anamitrab, 2011-02-27.04:53:35 | |||
| graycol.gif | anamitrab, 2011-02-27.04:53:36 | |||
| ecblank.gif | anamitrab, 2011-02-27.04:53:36 | |||
| Messages | |||
|---|---|---|---|
| msg6402 (view) | Author: Anamitra Bhattacharyya (anamitrab) | Date: 2011-02-22.21:00:02 | |
The test case is simple and is shown below using a java test class
package com.ibm.tivoli.maximo.script;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.script.*;
import org.python.util.PythonInterpreter;
import java.io.*;
public class TestJythonDateModule {
/**
* @param args
*/
public static void main(String[] args) throws Exception
{
if(args.length>=1 && args[0].equals("usejsr"))
{
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("jython");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\harrier75\\datetimetest.py")));
//engine.eval(reader);;
CompiledScript cs = ((Compilable)engine).compile(reader);
cs.eval();
}
else
{
PythonInterpreter jython = new PythonInterpreter();
InputStream scriptStream = new FileInputStream("c:\\harrier75\\datetimetest.py");
try {
jython.execfile(scriptStream);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
The datetimetest.py script is as below
import datetime
today = datetime.date.today()
print today
print 'ctime:', today.ctime()
print 'tuple:', today.timetuple()
print 'ordinal:', today.toordinal()
print 'Year:', today.year
print 'Mon :', today.month
print 'Day :', today.day
When we run the above test java class using the usejsr option - it gives an error as below. the non jsr 223 approach works perfect. This implies the jsr223 approach is broken and does not work for datetime module.
usejsr option
--------------
C:\harrier75\applications\maximo\businessobjects\classes>C:\harrier75\tools\java
\jre\bin\java -classpath .;C:\harrier75\jython\jython.jar;C:\harrier75\jython\Li
b com.ibm.tivoli.maximo.script.TestJythonDateModule usejsr
2011-02-20
ctime:Exception in thread "main" javax.script.ScriptException: AttributeError: '
java.sql.Date' object has no attribute 'ctime' in <script> at line number 5
at org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:
191)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:42)
at org.python.jsr223.PyScriptEngine.access$300(PyScriptEngine.java:20)
at org.python.jsr223.PyScriptEngine$PyCompiledScript.eval(PyScriptEngine
.java:220)
at javax.script.CompiledScript.eval(CompiledScript.java:101)
at com.ibm.tivoli.maximo.script.TestJythonDateModule.main(TestJythonDate
Module.java:27)
Caused by:
Traceback (most recent call last):
File "<script>", line 5, in <module>
AttributeError: 'java.sql.Date' object has no attribute 'ctime'
at org.python.core.PyException.fillInStackTrace(PyException.java:70)
at java.lang.Throwable.<init>(Throwable.java:56)
at org.python.core.PyException.<init>(PyException.java:46)
at org.python.core.PyException.<init>(PyException.java:43)
at org.python.core.PyException.<init>(PyException.java:61)
at org.python.core.Py.AttributeError(Py.java:166)
at org.python.core.PyObject.noAttributeError(PyObject.java:930)
at org.python.core.PyObject.object___getattribute__(PyObject.java:3692)
at org.python.core.PyObject$object___getattribute___exposer.__call__(Unk
nown Source)
at org.python.core.Deriveds.__findattr_ex__(Deriveds.java:59)
at org.python.core.PyObjectDerived.__findattr_ex__(PyObjectDerived.java:
983)
at org.python.core.PyObject.__getattr__(PyObject.java:923)
at org.python.pycode._pyx0.f$0(<script>:10)
at org.python.pycode._pyx0.call_function(<script>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1261)
at org.python.core.__builtin__.eval(__builtin__.java:484)
at org.python.core.__builtin__.eval(__builtin__.java:488)
at org.python.util.PythonInterpreter.eval(PythonInterpreter.java:198)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:40)
... 4 more
The same thing if I run without the usejsr option I get this output
C:\harrier75\applications\maximo\businessobjects\classes>C:\harrier75\tools\java
\jre\bin\java -classpath .;C:\harrier75\jython\jython.jar;C:\harrier75\jython\Li
b com.ibm.tivoli.maximo.script.TestJythonDateModule
2011-02-20
ctime: Sun Feb 20 00:00:00 2011
tuple: (2011, 2, 20, 0, 0, 0, 6, 51, -1)
ordinal: 734188
Year: 2011
Mon : 2
Day : 20
C:\harrier75\applications\maximo\businessobjects\classes>
|
|||
| msg6403 (view) | Author: Philip Jenvey (pjenvey) | Date: 2011-02-23.05:02:16 | |
Like I said on the ML ( http://old.nabble.com/Re%3A-jython-2.5.2-jsr-223-bug-p30988917.html ), the fact that the jsr223 ScriptEngineScope has always done this __tojava__/Py.java2py dance must cause this datetime.date.__tojava__ returns a java.sql.Date. That doesn't necessarily mean Py.java2py(java.sql.Date) will give you a datetime.date back Plus I think this "feature" could cause a significant slowdown of python code executing with the scope of the jsr223 context. Historically it's behavior adopted from the old jsr223 implementation. It needs to be rethought Anamitra, thanks for the logging this, in your case you may be able to hack around the problem by disabling datetime.date's tojava conversion by calling this after importing datetime: del datetime.date.__tojava__ this issue likely also affects datetime.time/datetime, Decimal and threading.Thread objects |
|||
| msg6411 (view) | Author: Anamitra Bhattacharyya (anamitrab) | Date: 2011-02-27.04:53:36 | |
thanks Philip - that workaround worked. Anamitra >--------------------------------------------------------------------------------------------------------------------------------------------------| |Philip Jenvey <report@bugs.jython.org> | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | To: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |Anamitra Bhattacharyya/Bedford/IBM@IBMUS | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | Date: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |02/23/2011 12:05 AM | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | Subject: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |[issue1709] jsr223 bug when dealing with datetime module | >--------------------------------------------------------------------------------------------------------------------------------------------------| Philip Jenvey <pjenvey@underboss.org> added the comment: Like I said on the ML ( http://old.nabble.com/Re%3A-jython-2.5.2-jsr-223-bug-p30988917.html ), the fact that the jsr223 ScriptEngineScope has always done this __tojava__/Py.java2py dance must cause this datetime.date.__tojava__ returns a java.sql.Date. That doesn't necessarily mean Py.java2py(java.sql.Date) will give you a datetime.date back Plus I think this "feature" could cause a significant slowdown of python code executing with the scope of the jsr223 context. Historically it's behavior adopted from the old jsr223 implementation. It needs to be rethought Anamitra, thanks for the logging this, in your case you may be able to hack around the problem by disabling datetime.date's tojava conversion by calling this after importing datetime: del datetime.date.__tojava__ this issue likely also affects datetime.time/datetime, Decimal and threading.Thread objects ---------- nosy: +otmarhumbel, pjenvey _______________________________________ Jython tracker <report@bugs.jython.org> <http://bugs.jython.org/issue1709> _______________________________________ |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2013-02-19 23:46:05 | fwierzbicki | set | priority: normal nosy: + fwierzbicki versions: + Jython 2.5, - 2.5.2rc |
| 2011-02-27 04:53:36 | anamitrab | set | files:
+ unnamed, graycol.gif, ecblank.gif messages: + msg6411 |
| 2011-02-23 05:05:41 | pjenvey | set | nosy: + nriley |
| 2011-02-23 05:02:16 | pjenvey | set | nosy:
+ pjenvey, otmarhumbel messages: + msg6403 |
| 2011-02-22 21:00:03 | anamitrab | set | messages: + msg6402 |
| 2011-02-22 20:53:46 | anamitrab | create | |
Supported by Python Software Foundation,
Powered by Roundup