From: Heshan S. <hes...@gm...> - 2008-04-30 13:03:52
|
Hi, Following annotationScript.py script works fine in python.But when I try to execute it from java like below I am getting an exception like this, Exception in thread "main" Traceback (innermost last): (no code object) at line 0 SyntaxError: ('Lexical error at line 11, column 1. Encountered: "@" (64), after : ""', ('/home/heshan/workspace/IdeaProjects/PYtest/src/pythonScripts/annotationScript.py', 11, 1, '@annotate("double", "f", a="double")')) Can anyone explain why is this happening here and suggest a way to overcome this #annotationScript.py script def annotate(returns, operationName, **params): def decorate(func): params['returns'] = returns params['operationName'] = operationName func.__annotations__ = params return func return decorate @annotate("double", "f", a="double") def f(a): return a @annotate("int", "add", var1="integer", var2="integer") def add(var1,var2): return var1+var2 @annotate("double", "deduct", var1="integer", var2="integer") def deduct(var1,var2): return var1-var2 class MyClass: @annotate("double", "MyClass.multiply", var1="integer", var2="integer") def multiply(var1,var2): return var1*var2 ##print f.__annotations__ ## above line gives an output like this : {'a': 'double', 'returns': 'double', 'operationName': 'f'} #------------------------------------------------------------------------------------------------------- // My java code PySystemState.initialize(); PythonInterpreter interp = new PythonInterpreter(); interp.exec("import sys"); interp.exec("print sys.path"); String str1 = "/home/heshan/workspace/IdeaProjects/PYtest/src/pythonScripts/annotationScript.py"; interp.execfile(str1); PyObject obj = interp.eval("f.__annotations__"); System.out.println("obj returned : " + obj); -- Regards, Heshan Suriyaarachchi |
From: Frank W. <fwi...@gm...> - 2008-04-30 13:18:15
|
The only Jython that supports generators is the prototyped newcompiler -- which is a bit tricky to use and definitely not for production. Jython 2.2 will never have them (they where introduced in Python 2.4) but trunk should get them (I hope) in a number of weeks when JavaOne has passed and I can get going on translating new compiler onto trunk. -Frank |
From: Heshan S. <hes...@gm...> - 2008-04-30 13:36:15
|
Hi Frank, If I want to work with decorators(as I have shown in my previous mail) in jython , 1. Do I have to wait till the next release of jython? 2. Will the next release support decorators? 3. When will the next release be available? 4. Is there any alternative method in which I can do something similar (other than using decorators)? :) Then what is it? 4. If I want the above feature soooo badly, what can I do to contribute ? On Wed, Apr 30, 2008 at 6:48 PM, Frank Wierzbicki <fwi...@gm...> wrote: > The only Jython that supports generators is the prototyped newcompiler > -- which is a bit tricky to use and definitely not for production. > Jython 2.2 will never have them (they where introduced in Python 2.4) > but trunk should get them (I hope) in a number of weeks when JavaOne > has passed and I can get going on translating new compiler onto trunk. > > -Frank > -- Regards, Heshan Suriyaarachchi |
From: Frank W. <fwi...@gm...> - 2008-04-30 16:33:51
|
On Wed, Apr 30, 2008 at 9:36 AM, Heshan Suriyaarachchi <hes...@gm...> wrote: > Hi Frank, > If I want to work with decorators(as I have shown in my > previous mail) in jython , > 1. Do I have to wait till the next release of jython? For a production version, yes. > 2. Will the next release support decorators? Definitely! > 3. When will the next release be available? That's a harder question to ask -- especially for the prod version. I want to get a beta Jython 2.5 out by the end of this summer and I want to see a prod within 2008 -- but there is some fuzziness there since so much needs to be done. > 4. Is there any alternative method in which I can do something similar > (other than using decorators)? :) Then what is it? This one is pretty easy -- decorators are really just syntactic sugar for a function call so for example: class Spam(object): @staticmethod def egg(self): pass can be rewritten: class Spam(object): def egg(self): pass egg = staticmethod(egg) > 4. If I want the above feature soooo badly, what can I do to contribute ? This task is probably not a beginning task -- we have a new parser that is close to complete and parsing 2.5 Python very well and a prototyped new compiler. The new compiler needs to be at least partially converted to Java to start moving the current support from the 2.3ish level in trunk to the targetted 2.5 level. For contributing, you could look at libraries in 2.5 that are not yet known to work in Jython that interest you. -Frank |
From: Frank W. <fwi...@gm...> - 2008-04-30 16:37:30
|
I don't think the indention came out quite right before here is another try: #Decorated version class Spam(object): @staticmethod def egg(self): pass #can be rewritten with a function call: class Spam(object): def egg(self): pass egg = staticmethod(egg) |