summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Smith <bruce@nanorex.com>2008-03-20 00:16:05 +0000
committerBruce Smith <bruce@nanorex.com>2008-03-20 00:16:05 +0000
commitdf71c9332043b8bf4a4250fb0fddc2498a70e0a4 (patch)
tree646bae9015c70bdbaeb747a5f698078394865f01
parentb45d237e6d9bcb5dd96b24f5b015675743f6ccc2 (diff)
downloadnanoengineer-df71c9332043b8bf4a4250fb0fddc2498a70e0a4.tar.gz
nanoengineer-df71c9332043b8bf4a4250fb0fddc2498a70e0a4.zip
protect fix_after_readmmp from dna updater exceptions
-rw-r--r--cad/src/dna/updater/dna_updater_prefs.py2
-rwxr-xr-xcad/src/model/assembly.py17
-rw-r--r--cad/src/model/global_model_changedicts.py10
-rwxr-xr-xcad/src/model_updater/master_model_updater.py17
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
# ==