diff options
author | Bruce Smith <bruce@nanorex.com> | 2008-03-20 00:16:05 +0000 |
---|---|---|
committer | Bruce Smith <bruce@nanorex.com> | 2008-03-20 00:16:05 +0000 |
commit | df71c9332043b8bf4a4250fb0fddc2498a70e0a4 (patch) | |
tree | 646bae9015c70bdbaeb747a5f698078394865f01 | |
parent | b45d237e6d9bcb5dd96b24f5b015675743f6ccc2 (diff) | |
download | nanoengineer-df71c9332043b8bf4a4250fb0fddc2498a70e0a4.tar.gz nanoengineer-df71c9332043b8bf4a4250fb0fddc2498a70e0a4.zip |
protect fix_after_readmmp from dna updater exceptions
-rw-r--r-- | cad/src/dna/updater/dna_updater_prefs.py | 2 | ||||
-rwxr-xr-x | cad/src/model/assembly.py | 17 | ||||
-rw-r--r-- | cad/src/model/global_model_changedicts.py | 10 | ||||
-rwxr-xr-x | cad/src/model_updater/master_model_updater.py | 17 |
4 files changed, 42 insertions, 4 deletions
diff --git a/cad/src/dna/updater/dna_updater_prefs.py b/cad/src/dna/updater/dna_updater_prefs.py index 0088cefa4..b4c809f1c 100644 --- a/cad/src/dna/updater/dna_updater_prefs.py +++ b/cad/src/dna/updater/dna_updater_prefs.py @@ -170,6 +170,8 @@ def pref_fix_after_readmmp_after_updaters(): # (described in checkin mail today) # (only needed in "after" version) [bruce 080319] from model_updater.master_model_updater import debug_pref_use_dna_updater # might be recursive if at toplevel + if not debug_pref_use_dna_updater(): + print "bug: the permanent version of this fix is not working, noticed in pref_fix_after_readmmp_after_updaters" res = debug_pref("DNA: do fix_after_readmmp_after_updaters? ", Choice_boolean_True, # same comment as for before_updaters version non_debug = True, diff --git a/cad/src/model/assembly.py b/cad/src/model/assembly.py index 7bb990f96..5d3048ad3 100755 --- a/cad/src/model/assembly.py +++ b/cad/src/model/assembly.py @@ -838,9 +838,20 @@ class assembly( StateMixin, Assembly_API, IdentityCopyMixin): env.do_post_event_updates() #bruce 050627 this replaces update_bonds if do_special_updates_after_readmmp: - # do the "post-updaters" updates of this kind. - from dna.updater.fix_after_readmmp import fix_after_readmmp_after_updaters - fix_after_readmmp_after_updaters(self) + # Do the "post-updaters" updates of this kind. + # For now, there is only one (hardcoded), for the dna updater. + # And [bruce 080319 bugfix] it's only safe if the last potential run + # of the dna updater (in env.do_post_event_updates, above) + # actually happened, and succeeded. + from dna.updater.fix_after_readmmp import fix_after_readmmp_after_updaters + import model.global_model_changedicts as global_model_changedicts + from model.global_model_changedicts import LAST_RUN_SUCCEEDED + if global_model_changedicts.status_of_last_dna_updater_run == LAST_RUN_SUCCEEDED: + fix_after_readmmp_after_updaters(self) + else: + print "fyi: skipped fix_after_readmmp_after_updaters since status_of_last_dna_updater_run = %r, needs to be %r" % \ + ( global_model_changedicts.status_of_last_dna_updater_run, LAST_RUN_SUCCEEDED ) + pass return # from update_parts diff --git a/cad/src/model/global_model_changedicts.py b/cad/src/model/global_model_changedicts.py index 3dce7065c..033acdda4 100644 --- a/cad/src/model/global_model_changedicts.py +++ b/cad/src/model/global_model_changedicts.py @@ -63,4 +63,14 @@ changed_bond_types = {} # == +# status codes for updater runs of all kinds +# (not yet used for all updaters, though). + +LAST_RUN_DIDNT_HAPPEN = 9 # due to all updaters skipped, or that updater disabled, or program just started +LAST_RUN_IS_ONGOING = 10 +LAST_RUN_FAILED = 11 # i.e. raised an exception and ended early +LAST_RUN_SUCCEEDED = 12 + +status_of_last_dna_updater_run = LAST_RUN_DIDNT_HAPPEN + # end diff --git a/cad/src/model_updater/master_model_updater.py b/cad/src/model_updater/master_model_updater.py index 2ecfaafaf..00d40516b 100755 --- a/cad/src/model_updater/master_model_updater.py +++ b/cad/src/model_updater/master_model_updater.py @@ -45,6 +45,13 @@ bruce 080305 added _autodelete_empty_groups. from model.global_model_changedicts import changed_structure_atoms from model.global_model_changedicts import changed_bond_types +from model.global_model_changedicts import LAST_RUN_DIDNT_HAPPEN +from model.global_model_changedicts import LAST_RUN_IS_ONGOING +from model.global_model_changedicts import LAST_RUN_FAILED +from model.global_model_changedicts import LAST_RUN_SUCCEEDED + +import model.global_model_changedicts as global_model_changedicts # for setting flags in it + import foundation.env as env from utilities.Log import redmsg @@ -92,6 +99,7 @@ def _master_model_updater( warn_if_needed = False ): # to also use the global assy to store this. kluge_main_assy = env.mainwindow().assy if not kluge_main_assy.assy_valid: + global_model_changedicts.status_of_last_dna_updater_run = LAST_RUN_DIDNT_HAPPEN msg = "deferring _master_model_updater(warn_if_needed = %r) " \ "since not %r.assy_valid" % (warn_if_needed, kluge_main_assy) print_compact_stack(msg + ": ") # soon change to print... @@ -99,7 +107,7 @@ def _master_model_updater( warn_if_needed = False ): pass env.history.emit_all_deferred_summary_messages() #bruce 080212 (3 places) - + _run_dna_updater() env.history.emit_all_deferred_summary_messages() @@ -119,19 +127,26 @@ def _master_model_updater( warn_if_needed = False ): def _run_dna_updater(): #bruce 080210 split this out # TODO: check some dicts first, to optimize this call when not needed? # TODO: zap the temporary function calls here + #bruce 080319 added sets of status_of_last_dna_updater_run if debug_pref_use_dna_updater(): # never implemented sufficiently: if ...: _reload_dna_updater() _ensure_ok_to_call_dna_updater() # soon will not be needed here from dna.updater.dna_updater_main import full_dna_update # soon will be toplevel import + global_model_changedicts.status_of_last_dna_updater_run = LAST_RUN_IS_ONGOING try: full_dna_update() except: + global_model_changedicts.status_of_last_dna_updater_run = LAST_RUN_FAILED msg = "\n*** exception in dna updater; will attempt to continue" print_compact_traceback(msg + ": ") msg2 = "Error: exception in dna updater (see console for details); will attempt to continue" env.history.message(redmsg(msg2)) + else: + global_model_changedicts.status_of_last_dna_updater_run = LAST_RUN_SUCCEEDED pass + else: + global_model_changedicts.status_of_last_dna_updater_run = LAST_RUN_DIDNT_HAPPEN return # == |