config: int type object: null sets prop to default value
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 17 Mar 2016 07:49:06 +0000 (03:49 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 18 Mar 2016 21:54:59 +0000 (17:54 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
barectf/config.py
barectf/metadata.py

index 114271fdb36b7700d52ecb9abcaed66adad0f70e..114e4fd35405a398501c7a08e4d3c089d3592f1c 100644 (file)
@@ -1292,101 +1292,117 @@ class _YamlConfigParser:
         if 'align' in node:
             align = node['align']
 
-            if not _is_int_prop(align):
-                raise ConfigError('"align" property of integer type object must be an integer')
+            if align is None:
+                obj.set_default_align()
+            else:
+                if not _is_int_prop(align):
+                    raise ConfigError('"align" property of integer type object must be an integer')
 
-            if not _is_valid_alignment(align):
-                raise ConfigError('invalid alignment: {}'.format(align))
+                if not _is_valid_alignment(align):
+                    raise ConfigError('invalid alignment: {}'.format(align))
 
-            obj.align = align
+                obj.align = align
 
         # signed
         if 'signed' in node:
             signed = node['signed']
 
-            if not _is_bool_prop(signed):
-                raise ConfigError('"signed" property of integer type object must be a boolean')
+            if signed is None:
+                obj.set_default_signed()
+            else:
+                if not _is_bool_prop(signed):
+                    raise ConfigError('"signed" property of integer type object must be a boolean')
 
-            obj.signed = signed
+                obj.signed = signed
 
         # byte order
         if 'byte-order' in node:
             byte_order = node['byte-order']
 
-            if not _is_str_prop(byte_order):
-                raise ConfigError('"byte-order" property of integer type object must be a string ("le" or "be")')
+            if byte_order is None:
+                obj.byte_order = self._bo
+            else:
+                if not _is_str_prop(byte_order):
+                    raise ConfigError('"byte-order" property of integer type object must be a string ("le" or "be")')
 
-            byte_order = _byte_order_str_to_bo(byte_order)
+                byte_order = _byte_order_str_to_bo(byte_order)
 
-            if byte_order is None:
-                raise ConfigError('invalid "byte-order" property in integer type object')
-        else:
-            byte_order = self._bo
+                if byte_order is None:
+                    raise ConfigError('invalid "byte-order" property in integer type object')
 
-        obj.byte_order = byte_order
+                obj.byte_order = byte_order
+        else:
+            obj.byte_order = self._bo
 
         # base
         if 'base' in node:
             base = node['base']
 
-            if not _is_str_prop(base):
-                raise ConfigError('"base" property of integer type object must be a string ("bin", "oct", "dec", or "hex")')
-
-            if base == 'bin':
-                base = 2
-            elif base == 'oct':
-                base = 8
-            elif base == 'dec':
-                base = 10
-            elif base == 'hex':
-                base = 16
+            if base is None:
+                obj.set_default_base()
             else:
-                raise ConfigError('unknown "base" property value: "{}" ("bin", "oct", "dec", and "hex" are accepted)'.format(base))
+                if not _is_str_prop(base):
+                    raise ConfigError('"base" property of integer type object must be a string ("bin", "oct", "dec", or "hex")')
+
+                if base == 'bin':
+                    base = 2
+                elif base == 'oct':
+                    base = 8
+                elif base == 'dec':
+                    base = 10
+                elif base == 'hex':
+                    base = 16
+                else:
+                    raise ConfigError('unknown "base" property value: "{}" ("bin", "oct", "dec", and "hex" are accepted)'.format(base))
 
-            obj.base = base
+                obj.base = base
 
         # encoding
         if 'encoding' in node:
             encoding = node['encoding']
 
-            if not _is_str_prop(encoding):
-                raise ConfigError('"encoding" property of integer type object must be a string ("none", "ascii", or "utf-8")')
+            if encoding is None:
+                obj.set_default_encoding()
+            else:
+                if not _is_str_prop(encoding):
+                    raise ConfigError('"encoding" property of integer type object must be a string ("none", "ascii", or "utf-8")')
 
-            encoding = _encoding_str_to_encoding(encoding)
+                encoding = _encoding_str_to_encoding(encoding)
 
-            if encoding is None:
-                raise ConfigError('invalid "encoding" property in integer type object')
+                if encoding is None:
+                    raise ConfigError('invalid "encoding" property in integer type object')
 
-            obj.encoding = encoding
+                obj.encoding = encoding
 
         # property mappings
         if 'property-mappings' in node:
             prop_mappings = node['property-mappings']
 
-            if not _is_array_prop(prop_mappings):
-                raise ConfigError('"property-mappings" property of integer type object must be an array')
-
-            if len(prop_mappings) > 1:
-                raise ConfigError('length of "property-mappings" array in integer type object must be 1')
+            if prop_mappings is None:
+                obj.set_default_property_mappings()
+            else:
+                if not _is_array_prop(prop_mappings):
+                    raise ConfigError('"property-mappings" property of integer type object must be an array')
 
-            del obj.property_mappings[:]
+                if len(prop_mappings) > 1:
+                    raise ConfigError('length of "property-mappings" array in integer type object must be 1')
 
-            for index, prop_mapping in enumerate(prop_mappings):
-                if not _is_assoc_array_prop(prop_mapping):
-                    raise ConfigError('elements of "property-mappings" property of integer type object must be associative arrays')
+                for index, prop_mapping in enumerate(prop_mappings):
+                    if not _is_assoc_array_prop(prop_mapping):
+                        raise ConfigError('elements of "property-mappings" property of integer type object must be associative arrays')
 
-                if 'type' not in prop_mapping:
-                    raise ConfigError('missing "type" property in integer type object\'s "property-mappings" array\'s element #{}'.format(index))
+                    if 'type' not in prop_mapping:
+                        raise ConfigError('missing "type" property in integer type object\'s "property-mappings" array\'s element #{}'.format(index))
 
-                prop_type = prop_mapping['type']
+                    prop_type = prop_mapping['type']
 
-                if not _is_str_prop(prop_type):
-                    raise ConfigError('"type" property of integer type object\'s "property-mappings" array\'s element #{} must be a string'.format(index))
+                    if not _is_str_prop(prop_type):
+                        raise ConfigError('"type" property of integer type object\'s "property-mappings" array\'s element #{} must be a string'.format(index))
 
-                if prop_type == 'clock':
-                    self._set_int_clock_prop_mapping(obj, prop_mapping)
-                else:
-                    raise ConfigError('unknown property mapping type "{}" in integer type object\'s "property-mappings" array\'s element #{}'.format(prop_type, index))
+                    if prop_type == 'clock':
+                        self._set_int_clock_prop_mapping(obj, prop_mapping)
+                    else:
+                        raise ConfigError('unknown property mapping type "{}" in integer type object\'s "property-mappings" array\'s element #{}'.format(prop_type, index))
 
         return obj
 
index e37de04badfbed06aec1ce92e22cca46f7d5fa67..10aeaf5f33c30ef47e48be50821dd07b40131b01 100644 (file)
@@ -75,12 +75,33 @@ class PropertyMapping:
 
 class Integer(Type):
     def __init__(self):
+        self.set_default_size()
+        self.set_default_align()
+        self.set_default_signed()
+        self.set_default_byte_order()
+        self.set_default_base()
+        self.set_default_encoding()
+        self.set_default_property_mappings()
+
+    def set_default_size(self):
         self._size = None
+
+    def set_default_align(self):
         self._align = None
+
+    def set_default_signed(self):
         self._signed = False
+
+    def set_default_byte_order(self):
         self._byte_order = None
+
+    def set_default_base(self):
         self._base = 10
+
+    def set_default_encoding(self):
         self._encoding = Encoding.NONE
+
+    def set_default_property_mappings(self):
         self._property_mappings = []
 
     @property
This page took 0.02804 seconds and 4 git commands to generate.