From: Andre M. D. <amd...@qu...> - 2004-10-08 07:32:05
|
Hi, I want to provide my program with a sort of "Reset" button that will restore all locals to the way they were initially, is there a way of storing this "state" and going back to it later? All global objects must have their initial values and there must not be any additional global objects. Is there a way of doing this? Thanks, Andre |
From: Jeff E. <JEm...@lg...> - 2004-10-08 14:36:51
|
I'll throw you a few pointers and you can probably put it together with some experimentation. org.python.util.PythonInterpreter.getLocals() org.python.util.PythonInterpreter.setLocals() org.python.core.PyStringMap.copy() -----Original Message----- From: jyt...@li... [mailto:jyt...@li...] On Behalf Of Andre Michel Descombes Sent: Friday, October 08, 2004 1:33 AM To: jyt...@li... Subject: [Jython-users] Restoring locals Hi, I want to provide my program with a sort of "Reset" button that will=20 restore all locals to the way they were initially, is there a way of=20 storing this "state" and going back to it later? All global objects must have their initial values and there must not be any additional global=20 objects. Is there a way of doing this? Thanks, Andre ------------------------------------------------------- This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more http://productguide.itmanagersjournal.com/guidepromo.tmpl _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Todd M. <tm...@in...> - 2004-10-08 13:23:12
|
Hello Andre, I don't know of any "automatic" way of doing this, but I'm doing a similar operation for similar reasons (a Cancel button in my case). I explicitly save original state values in member data within my objects. The original state can be easily reset when the Reset/Cancel button is hit by just coping the saved values back. As a confessed object-oriented fanatic, I'm wondering if your use of the term "locals" impies that you aren't using objects. I'm a firm believer that they save a lot of headaches in general, and are particularly useful for doing what you describe here. If you are using objects, then some of the changed data may be within the object's member data (that is, not in locals). Cheers, Todd Moyer Andre Michel Descombes wrote: > Hi, > > I want to provide my program with a sort of "Reset" button that will > restore all locals to the way they were initially, is there a way of > storing this "state" and going back to it later? All global objects must > have their initial values and there must not be any additional global > objects. > Is there a way of doing this? > > Thanks, > > Andre > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Andre M. D. <amd...@qu...> - 2004-10-08 14:09:43
|
Hi Todd, I refer to the locals() function in jython which contains every object and function in the environment, I wanted to save that single object and restore it later instead of having to do it for every object individually. Any Ideas? Cheers, Andre > > Hello Andre, > > I don't know of any "automatic" way of doing this, but I'm doing a > similar operation for similar reasons (a Cancel button in my case). I > explicitly save original state values in member data within my > objects. The original state can be easily reset when the Reset/Cancel > button is hit by just coping the saved values back. > > As a confessed object-oriented fanatic, I'm wondering if your use of > the term "locals" impies that you aren't using objects. I'm a firm > believer that they save a lot of headaches in general, and are > particularly useful for doing what you describe here. If you are > using objects, then some of the changed data may be within the > object's member data (that is, not in locals). > > Cheers, > Todd Moyer > > > Andre Michel Descombes wrote: > >> Hi, >> >> I want to provide my program with a sort of "Reset" button that will >> restore all locals to the way they were initially, is there a way of >> storing this "state" and going back to it later? All global objects >> must have their initial values and there must not be any additional >> global objects. >> Is there a way of doing this? >> >> Thanks, >> >> Andre >> >> >> ------------------------------------------------------- >> This SF.net email is sponsored by: IT Product Guide on ITManagersJournal >> Use IT products in your business? Tell us what you think of them. >> Give us >> Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find >> out more >> http://productguide.itmanagersjournal.com/guidepromo.tmpl >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users > > > > > |
From: Todd M. <tm...@in...> - 2004-10-08 23:24:08
|
Unless I'm missing something, locals() will give you the local variables for the scope it's called from. That will not include the globals or other local scopes and will only have pointers to objects. Saving those pointers will not allow you to restore an object's internal state. I think you have to be more precise with objects. Aren't there a relatively small number of ojects that need to be restored? If they are in a hierarchy, you can tell the root object to save it's internal state and have each node pass the command down to it's children. Each object effected will have to have a method to save and restore it's state. It's not trivial but not all that hard either. I don't see how a brute force method based on locals() could work. Cheers, Todd Andre Michel Descombes wrote: > Hi Todd, > > I refer to the locals() function in jython which contains every object > and function in the environment, I wanted to save that single object and > restore it later instead of having to do it for every object > individually. Any Ideas? > > Cheers, > Andre > >> >> Hello Andre, >> >> I don't know of any "automatic" way of doing this, but I'm doing a >> similar operation for similar reasons (a Cancel button in my case). I >> explicitly save original state values in member data within my >> objects. The original state can be easily reset when the Reset/Cancel >> button is hit by just coping the saved values back. >> >> As a confessed object-oriented fanatic, I'm wondering if your use of >> the term "locals" impies that you aren't using objects. I'm a firm >> believer that they save a lot of headaches in general, and are >> particularly useful for doing what you describe here. If you are >> using objects, then some of the changed data may be within the >> object's member data (that is, not in locals). >> >> Cheers, >> Todd Moyer >> >> >> Andre Michel Descombes wrote: >> >>> Hi, >>> >>> I want to provide my program with a sort of "Reset" button that will >>> restore all locals to the way they were initially, is there a way of >>> storing this "state" and going back to it later? All global objects >>> must have their initial values and there must not be any additional >>> global objects. >>> Is there a way of doing this? >>> >>> Thanks, >>> >>> Andre >>> >>> >>> ------------------------------------------------------- >>> This SF.net email is sponsored by: IT Product Guide on ITManagersJournal >>> Use IT products in your business? Tell us what you think of them. >>> Give us >>> Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find >>> out more >>> http://productguide.itmanagersjournal.com/guidepromo.tmpl >>> _______________________________________________ >>> Jython-users mailing list >>> Jyt...@li... >>> https://lists.sourceforge.net/lists/listinfo/jython-users >> >> >> >> >> >> > |
From: Jim A. <ji...@tr...> - 2004-10-11 05:19:57
|
We have a very high throughput application where we needed to do something similar, and the overhead of copying the entire PyStringMap was too slow. Our app uses Java code to run user's Jython 'snippets'; each request contains hundreds of them, but they are optimized by combining them into one big Jython script. This application needed to perform 50-100 'locals' resets per request; each request also processes pages of user scripts which MAY add/change variables; though this is rare, so resetting everything is overkill. The process also saves the results of some initialization scripts to that the results can be re-applied to subsequently created 'locals' instead of rerunning the scripts. Using the code below and other optimizations we are now able to process each request (again, hundreds of pages of scripts with at least one reset for each) in less than one second. Basically, I have hacked PyStringMap to track NewValues and their OriginalValues based on a flag ('trackingChanges'). I have since learned (from posts to this list) that instead of hacking it, I could subclass it and pass my subclass to my PythonInterpreter constructor. At some point I will clean this up, which will move me closer to being able to use 'standard' Jython [but I have other hacks too .. ;^) ]. The changes to PyStringMap are below; my code then uses it by doing things like: PyStringMap currentLocals = (PyStringMap)jython.getLocals(); currentLocals.setTracking( true ); fillInitNewValues = currentLocals.getNewValues().copy(); fillInitOriginalValues = currentLocals.getOriginalValues().copy(); ... currentLocals.update( originalValueMap ); // 'copy' causes functions to lose their pointers back to globals. ... // Now delete anything that was added too. Note that if we try to delete something that is not there, // it will throw an exception: this is a double-check that the logic is working correctly. if (newValueMap != null ) { PyObject[] newKeysList = newValueMap.keys().list; for ( int i = 0; i < newKeysList.length; i++ ) { PyObject po = newKeysList[ i ]; if ( po != null ) { String newKey = ( ( PyString )po ).internedString(); try { currentLocals.__delitem__( newKey ); } catch ( PyException pe ) { // This is a KeyError System.out.println( "Trying to remove variable '" + newKey + "' from currentLocals, but it is not there." ); } } } } %< -------------------------- ... PyStringMap ... ... private boolean trackingChanges = false; public PyStringMap originalValues = null; // Original value of anything changed public PyStringMap newValues = null; // Anything newly added while tracking ... public void setTracking( boolean turnOn ) { // , boolean lockValues ) { if (turnOn) { trackingChanges = true; originalValues = new PyStringMap(); // HashMap(); newValues = new PyStringMap(); // HashMap(); //lockExistingValues = lockValues; } else { trackingChanges = false; //lockExistingValues = false; originalValues = null; // Clear 'em all out newValues = null; } } public void resetTracking() { trackingChanges = true; originalValues = new PyStringMap(); // HashMap(); newValues = new PyStringMap(); // HashMap(); } ... public synchronized void __setitem__(String key, PyObject value) { // *** jra TRACKING HACK ---------------------- if (trackingChanges) { // ONLY set while user code is running ?: PyObject originalValue = __finditem__(key); // It's 'in scope' already; AND we did NOT do it: if ( (originalValue != null) && ( newValues.__finditem__(key) == null ) ) { if ( !(originalValue == value) ) // Make sure it IS a different object; otherwise just ignore it. if ( originalValues.__finditem__(key) == null ) // We have NOT already saved the original value? originalValues.__setitem__(key, originalValue); // Save it's original value for later restoration } else { newValues.__setitem__(key, value); // Save list of what we've added new, or added and changed. } } // *** end TRACKING HACK ---------------------- if (2*filled > keys.length) resize(keys.length+1); insertkey(key, value); } %< -------------------------- On Oct 8, 2004, at 12:32 AM, Andre Michel Descombes wrote: > Hi, > > I want to provide my program with a sort of "Reset" button that will > restore all locals to the way they were initially, is there a way of > storing this "state" and going back to it later? All global objects > must have their initial values and there must not be any additional > global objects. > Is there a way of doing this? > > Thanks, > > Andre > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on > ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give > us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |