[CORD-1539] Static choices from xproto to GUI

Change-Id: I7ad877884c7803bb64c086c860b73c48951f5231
diff --git a/lib/xos-genx/xosgenx/jinja2_extensions/gui.py b/lib/xos-genx/xosgenx/jinja2_extensions/gui.py
new file mode 100644
index 0000000..bd23fdb
--- /dev/null
+++ b/lib/xos-genx/xosgenx/jinja2_extensions/gui.py
@@ -0,0 +1,90 @@
+from base import xproto_string_type, unquote
+
+def xproto_type_to_ui_type(f):
+    try:
+        content_type = f['options']['content_type']
+        content_type = eval(content_type)
+    except:
+        content_type = None
+        pass
+
+    if 'choices' in f['options']:
+        return 'select';
+    elif content_type == 'date':
+        return 'date'
+    elif f['type'] == 'bool':
+        return 'boolean'
+    elif f['type'] == 'string':
+        return xproto_string_type(f['options'])
+    elif f['type'] in ['int','uint32','int32'] or 'link' in f:
+        return 'number'
+    elif f['type'] in ['double','float']:
+        return 'string'
+
+def xproto_options_choices_to_dict(choices):
+    list = []
+
+    for c in eval(choices):
+        list.append({'id': c[0], 'label': c[1]})
+    if len(list) > 0:
+        return list
+    else:
+        return None
+
+def xproto_validators(f):
+    # To be cleaned up when we formalize validation in xproto
+    validators = []
+
+    # bound-based validators
+    bound_validators = [('max_length','maxlength'), ('min', 'min'), ('max', 'max')]
+
+    for v0, v1 in bound_validators:
+        try:
+            validators.append({'name':v1, 'int_value':int(f['options'][v0])})
+        except KeyError:
+            pass
+
+    # validators based on content_type
+    content_type_validators = ['ip', 'url', 'email']
+
+    for v in content_type_validators:
+        #if f['name']=='ip': pdb.set_trace()
+        try:
+            val = unquote(f['options']['content_type'])==v
+            if not val:
+                raise KeyError
+
+            validators.append({'name':v, 'bool_value': True})
+        except KeyError:
+            pass
+
+    # required validator
+    try:
+        required = f['options']['blank']=='False' and f['options']['null']=='False'
+        if required:
+            validators.append({'name':'required', 'bool_value':required})
+    except KeyError:
+        pass
+
+    return validators
+
+def is_number(s):
+    try:
+        float(s)
+        return True
+    except ValueError:
+        return False
+
+def xproto_default_to_gui(default):
+    val = "null"
+    if is_number(default):
+        val = str(default)
+    elif eval(default) == True:
+        val = 'true'
+    elif eval(default) == False:
+        val = 'false'
+    elif eval(default) == None:
+        val = 'null'
+    else:
+        val = str(default)
+    return val
\ No newline at end of file