From: jsaiz <js...@sc...> - 2008-12-11 13:12:47
|
Hello, I'm developing a mixed Java/Jython project, so Jython is provided to users and also there is some Java code for manipulating the PythonInterpreter and the variables in the Jython namespace. I wonder if there is any mean (was looking for an event/listener mechanism) for detecting in Java whether a variable has been deleted in some namespace. For instance, if a Jython user executes: del(a) Then I want to be notified that variable a has been deleted, preferably with a reference to the deleted variable. Looking at the Javadoc it seems this is not possible, but just in case... Thank you in advance. -- View this message in context: http://www.nabble.com/Detecting-variable-deletions-%28or-additions%29-in-Java-tp20955195p20955195.html Sent from the jython-users mailing list archive at Nabble.com. |
From: Charlie G. <cha...@gm...> - 2008-12-22 20:05:37
|
On Thu, Dec 11, 2008 at 5:12 AM, jsaiz <js...@sc...> wrote: > I wonder if there is any mean (was looking for an event/listener mechanism) > for detecting in Java whether a variable has been deleted in some namespace. > > For instance, if a Jython user executes: > > del(a) > > Then I want to be notified that variable a has been deleted, preferably with > a reference to the deleted variable. If you're trying to catch modifications to the interpreter's namespace, you could install a special dictionary as its locals that fires events when del is called on that dictionary. The following code shows how to do that: import org.python.core.PyDictionary; import org.python.core.PyObject; import org.python.util.PythonInterpreter; public class DelListenerDict extends PyDictionary { @Override public void __delitem__(PyObject key) { super.__delitem__(key); System.out.println(key + " was deleted"); } public static void main(String[] args) { PythonInterpreter interp = new PythonInterpreter(new DelListenerDict()); interp.exec("a = 7"); interp.exec("del a"); } } When executed, that prints out "a was deleted". The interpreter uses the instances of DelListenerDict as its locals, so modifications to the locals are routed through there. Charlie |