pass
+class metadata_monitor(object):
+ def __init__(self, session, meta):
+ self.session = session
+ self.meta = meta
+
+ def __enter__(self):
+ self.old = {}
+ for (k, v) in self.meta.items():
+ self.old[k] = v
+
+ def __exit__(self, type, value, traceback):
+ d = self.session['dialog']
+
+ altered = {}
+ added = {}
+
+ for (k, v) in self.meta.items():
+ if k not in self.old:
+ added[k] = v
+ elif self.old[k] != v:
+ altered[k] = v
+
+ if not (len(added) or len(altered)):
+ return
+
+ msg = "The last action has changed some image properties:\n\n"
+ if len(added):
+ msg += "New image properties:\n"
+ for (k, v) in added.items():
+ msg += ' %s: "%s"\n' % (k, v)
+ msg += "\n"
+ if len(altered):
+ msg += "Updated image properties:\n"
+ for (k, v) in altered.items():
+ msg += ' %s: "%s" -> "%s"\n' % (k, self.old[k], v)
+ msg += "\n"
+
+ self.session['metadata'].update(added)
+ self.session['metadata'].update(altered)
+ d.msgbox(msg, title="Image Property Changes", width=MSGBOX_WIDTH)
+
+
def confirm_exit(d, msg=''):
return not d.yesno("%s Do you want to exit?" % msg, width=YESNO_WIDTH)
def confirm_reset(d):
return not d.yesno("Are you sure you want to reset everything?",
- width=YESNO_WIDTH)
+ width=YESNO_WIDTH, defaultno=1)
def update_background_title(session):
(code, choice) = d.menu(
text="Choose one of the following or press <Back> to go back.",
- width=MENU_WIDTH, choices=choices, cancel="Back", help_button=1,
+ width=MENU_WIDTH, choices=choices, cancel="Back",
default_item=default_item, title="Image Registration Menu")
if code in (d.DIALOG_CANCEL, d.DIALOG_ESC):
"information about image properties. Press <BACK> when done.",
height=18, width=MENU_WIDTH, choices=choices, menu_height=10,
ok_label="Edit", extra_button=1, extra_label="Add", cancel="Back",
- help_button=1, title="Image Metadata")
+ help_button=1, title="Image Properties")
if code in (d.DIALOG_CANCEL, d.DIALOG_ESC):
break
if 'checksum' in session:
del session['checksum']
- image_os.out = out
- image_os.do_sysprep()
-
- for (k, v) in image_os.meta.items():
- session['metadata'][str(k)] = str(v)
+ # Monitor the metadata changes during syspreps
+ with metadata_monitor(session, image_os.meta):
+ image_os.out = out
+ image_os.do_sysprep()
+ image_os.out.finalize()
# Disable syspreps that have ran
for sysprep in session['exec_syspreps']:
image_os.disable_sysprep(sysprep)
- image_os.out.finalize()
finally:
dev.umount()
finally:
if not d.yesno("%s\n\nDo you want to continue?" % msg, width=70,
height=12, title="Image Shrinking"):
- dev.out = InfoBoxOutput(d, "Image Shrinking", height=3)
- session['metadata']['SIZE'] = str(dev.shrink())
+
+ with metadata_monitor(session, dev.meta):
+ dev.out = InfoBoxOutput(d, "Image Shrinking", height=3)
+ dev.shrink()
+ dev.out.finalize()
+
session['shrinked'] = True
update_background_title(session)
- dev.out.finalize()
def customization_menu(session):