From: Paul D. <pau...@ds...> - 2007-01-14 19:07:54
|
Hi all, I'd appreciate some help here as I am very stuck implementing csv! I am just trying to get the Dialect class to work, but keep getting distracted stepping through the Jython core, finding new things that I didn't realise Jython did! I need to stay focused and get this module implemented! I am focusing on implementing the Dialect class right now so I need to understand how to do Jython classes in Java. The Dialect has several attributes but for the sake of this post I will focus on the "delimiter" attribute which is "A one-character string used to separate fields" which defaults to a comma. >From the FAQ (http://wiki.python.org/jython/JythonFaq/ExtendingJython) I see I need to implement __findattr_(), __setattr__(), and __delattr__(). So does that mean I should create a Dialect class in my module that overrides these methods and maintain my own "dict" containing the "delimiter" field? If this is the case and I need to maintain my own "dict" then what is the point of the reflection provided by Jython? If I create a class like this: public class MyModule { public static class Foo extends PyObject { public int Bar; } } Then Jython will reflectively create the "Foo" Jython class and the "bar" field. I can access the field by calling __getattr__() but I can't set it using __setattr__() which leads me to believe this is not the correct way to do it! Come to think of it, is the above even the correct way to create a Jython class? I am not sure whether this is just me getting confused or whether I am missing something obvious, but all my attempts to implement Dialect are so far failing! Please, some guidance would be much appreciated! Cheers, Paul. |
From: Leo U. <leo...@ya...> - 2007-01-14 22:40:24
|
interesting, import org.python.core.*; public class PyThing extends PyObject{ static PyType type = PyType.fromClass(PyThing.class); public int thing = 1; public PyThing(){ super(type); } } this gives me a PyThing to create in the jython interpreter. I can access "thing" like you say but I cannot set it. PyReflectedField is bombing because __set__ is not overriden and the implementation in PyObject throws an exception. With that said, it is kind of wicked that "thing" is autoexposed like it is. Maybe an annotative approach would be better in the future to deal with this @Expose public int thing leouser --- Paul Drummond <pau...@ds...> wrote: > Hi all, > > I'd appreciate some help here as I am very stuck > implementing csv! I am just trying to get the > Dialect class to work, but keep getting distracted > stepping through the Jython core, finding new things > that I didn't realise Jython did! I need to stay > focused and get this module implemented! > > I am focusing on implementing the Dialect class > right now so I need to understand how to do Jython > classes in Java. The Dialect has several attributes > but for the sake of this post I will focus on the > "delimiter" attribute which is "A one-character > string used to separate fields" which defaults to a > comma. > > >From the FAQ > (http://wiki.python.org/jython/JythonFaq/ExtendingJython) > I see I need to implement __findattr_(), > __setattr__(), and __delattr__(). So does that mean > I should create a Dialect class in my module that > overrides these methods and maintain my own "dict" > containing the "delimiter" field? > > If this is the case and I need to maintain my own > "dict" then what is the point of the reflection > provided by Jython? If I create a class like this: > > public class MyModule { > > public static class Foo extends PyObject { > public int Bar; > } > > } > > Then Jython will reflectively create the "Foo" > Jython class and the "bar" field. I can access the > field by calling __getattr__() but I can't set it > using __setattr__() which leads me to believe this > is not the correct way to do it! Come to think of > it, is the above even the correct way to create a > Jython class? > > I am not sure whether this is just me getting > confused or whether I am missing something obvious, > but all my attempts to implement Dialect are so far > failing! Please, some guidance would be much > appreciated! > > Cheers, > Paul. > > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get > the chance to share your > opinions on IT & business topics through brief > surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Jython-dev mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-dev > ____________________________________________________________________________________ Never miss an email again! Yahoo! Toolbar alerts you the instant new Mail arrives. http://tools.search.yahoo.com/toolbar/features/mail/ |
From: Paul D. <pau...@ds...> - 2007-01-14 23:42:23
|
Leo User wrote: > interesting, > > import org.python.core.*; > > public class PyThing extends PyObject{ > > static PyType type = > PyType.fromClass(PyThing.class); > > public int thing = 1; > > public PyThing(){ > super(type); > } > > } > > this gives me a PyThing to create in the jython > interpreter. I can access "thing" like you say but I > cannot set it. PyReflectedField is bombing because > __set__ is not overriden and the implementation in > PyObject throws an exception. Yeah, this is the problem I have. I figured I must be doing it wrong when I got the exception. Any idea why PyReflectedField doesn't implement __set__()? What's the point in auto-exposing a field if you can't set it? > With that said, it is kind of wicked that "thing" is autoexposed > like it is. Maybe an annotative approach would be better in the > future to deal with this > > @Expose > public int thing Yeah, being explicit (with annotations or an alternative method) would be good. Currently, I am struggling trying to understand what Jython does and doesn't do in terms of reflection. There are lots of implicit rules to folow like "if a field is public it is auto-exposed" and "if a method has "PyObject[] args, String[] kw" as arguments then it will support keywords", etc, etc. The only way to figure these things out is to step through the code which is why I am making such slow progress! But anyway, back to the immediate problem. Given that PyReflectedField doesn't allowing setting an attribute, how should I progress? I am trying to learn from looking at the code in other modules but I get bogged down and confused quite quickly ;) I could just have my own "dict" and manipulate it via the ___xxxattr__() methods but I don't want to do that if it's reinventing the wheel or too crude or whatever! Any ideas? Cheers, Paul. |
From: Leo U. <leo...@ya...> - 2007-01-15 00:40:54
|
Well one way may be to be explicit about what is can be set, this appears to work ok: import org.python.core.*; public class PyThing extends PyObject{ static PyType type = PyType.fromClass(PyThing.class); public static void typeSetup(PyObject dict, PyType.Newstyle marker){ dict.__setitem__("thing", new PyFieldDescr("thing", PyThing.class, "thing")); dict.__setitem__("__new__",new PyNewWrapper(PyObject.class,"__new__",-1,-1) { public PyObject new_impl(boolean init,PyType subtype,PyObject[]args,String[]keywords) { return new PyThing(); } }); } public int thing = 1; public PyThing(){ super(type); } } leouser --- Paul Drummond <pau...@ds...> wrote: > Leo User wrote: > > interesting, > > > > import org.python.core.*; > > > > public class PyThing extends PyObject{ > > > > static PyType type = > > PyType.fromClass(PyThing.class); > > > > public int thing = 1; > > > > public PyThing(){ > > super(type); > > } > > > > } > > > > this gives me a PyThing to create in the jython > > interpreter. I can access "thing" like you say > but I > > cannot set it. PyReflectedField is bombing > because > > __set__ is not overriden and the implementation in > > PyObject throws an exception. > > Yeah, this is the problem I have. I figured I must > be doing it wrong when I got the exception. > > Any idea why PyReflectedField doesn't implement > __set__()? > > What's the point in auto-exposing a field if you > can't set it? > > > With that said, it is kind of wicked that "thing" > is autoexposed > > like it is. Maybe an annotative approach would be > better in the > > future to deal with this > > > > @Expose > > public int thing > > Yeah, being explicit (with annotations or an > alternative method) would be good. Currently, I am > struggling trying to understand what Jython does and > doesn't do in terms of reflection. There are > lots of implicit rules to folow like "if a field is > public it is auto-exposed" and "if a method has > "PyObject[] args, String[] kw" as arguments then it > will support keywords", etc, etc. The only way > to figure these things out is to step through the > code which is why I am making such slow progress! > > But anyway, back to the immediate problem. Given > that PyReflectedField doesn't allowing setting an > attribute, how should I progress? I am trying to > learn from looking at the code in other modules > but I get bogged down and confused quite quickly ;) > > > I could just have my own "dict" and manipulate it > via the ___xxxattr__() methods but I don't want to > do that if it's reinventing the wheel or too crude > or whatever! Any ideas? > > Cheers, > Paul. > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get > the chance to share your > opinions on IT & business topics through brief > surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Jython-dev mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-dev > ____________________________________________________________________________________ Be a PS3 game guru. Get your game face on with the latest PS3 news and previews at Yahoo! Games. http://videogames.yahoo.com/platform?platform=120121 |
From: Leo U. <leo...@ya...> - 2007-01-15 03:10:10
|
--- Paul Drummond <pau...@ds...> wrote: > Any idea why PyReflectedField doesn't implement > __set__()? > > What's the point in auto-exposing a field if you > can't set it? This does seem wrong... I was taking a quick look through the source and Im not sure if there is any code that actually interacts with the overriden set method of PyReflectedField. Ive got some more code to wade through but no success as of yet. > > > With that said, it is kind of wicked that "thing" > is autoexposed > > like it is. Maybe an annotative approach would be > better in the > > future to deal with this > > > > @Expose > > public int thing > > Yeah, being explicit (with annotations or an > alternative method) would be good. Currently, I am > struggling trying to understand what Jython does and > doesn't do in terms of reflection. There are > lots of implicit rules to folow like "if a field is > public it is auto-exposed" and "if a method has > "PyObject[] args, String[] kw" as arguments then it > will support keywords", etc, etc. The only way > to figure these things out is to step through the > code which is why I am making such slow progress! > Im not sure how jython developers can adequately program to this if its trial and error/guesswork. Back to the original point, there needs to be a better way. Im not a particular fan of having public being automatically exposed. There may be reasons a class designer uses public besides wanting it to be auto-exposed. > But anyway, back to the immediate problem. Given > that PyReflectedField doesn't allowing setting an > attribute, how should I progress? I am trying to > learn from looking at the code in other modules > but I get bogged down and confused quite quickly ;) > I think the example I gave in the last post may help out. Remember, were all in this together... :D . leouser ____________________________________________________________________________________ TV dinner still cooling? Check out "Tonight's Picks" on Yahoo! TV. http://tv.yahoo.com/ |