diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py index d3e0b11de3ab1ea803db5dd5fe472c1579746eb8..5a9a25b306b537c56bfea19c8f7f685a2cadff10 100644 --- a/image_creator/dialog_menu.py +++ b/image_creator/dialog_menu.py @@ -41,6 +41,7 @@ import os import textwrap import StringIO import json +import re from image_creator import __version__ as version from image_creator.util import MD5, FatalError @@ -471,9 +472,11 @@ def add_property(session): """Add a new property to the image""" d = session['dialog'] + regexp = re.compile('^[A-Za-z_]+$') + while 1: - (code, answer) = d.inputbox("Please provide a name for a new image" - " property:", width=WIDTH) + (code, answer) = d.inputbox("Please provide a case-insensitive name " + "for a new image property:", width=WIDTH) if code in (d.DIALOG_CANCEL, d.DIALOG_ESC): return False @@ -482,11 +485,22 @@ def add_property(session): d.msgbox("A property name cannot be empty", width=SMALL_WIDTH) continue + if not re.match(regexp, name): + d.msgbox("Allowed characters for name: [a-zA-Z0-9_]", width=WIDTH) + continue + + # Image properties are case-insensitive + name = name.upper() + + if name in session['metadata']: + d.msgbox("Image property: `%s' already exists" % name, width=WIDTH) + continue + break while 1: (code, answer) = d.inputbox("Please provide a value for image " - "property %s" % name, width=WIDTH) + "property: `%s'" % name, width=WIDTH) if code in (d.DIALOG_CANCEL, d.DIALOG_ESC): return False