@staticmethod<EOL><INDENT>def ColumnTypeParser(description):<DEDENT>
if not description:<EOL><INDENT>raise DataTableException("<STR_LIT>")<EOL><DEDENT>if not isinstance(description, (six.string_types, tuple)):<EOL><INDENT>raise DataTableException("<STR_LIT>"<EOL>"<STR_LIT>" % type(description))<EOL><DEDENT>if isinstance(description, six.string_types):<EOL><INDENT>description = (description,)<EOL><DEDENT>for elem in description[:<NUM_LIT:3>]:<EOL><INDENT>if not isinstance(elem, six.string_types):<EOL><INDENT>raise DataTableException("<STR_LIT>"<EOL>"<STR_LIT>" %<EOL>type(elem))<EOL><DEDENT><DEDENT>desc_dict = {"<STR_LIT:id>": description[<NUM_LIT:0>],<EOL>"<STR_LIT:label>": description[<NUM_LIT:0>],<EOL>"<STR_LIT:type>": "<STR_LIT:string>",<EOL>"<STR_LIT>": {}}<EOL>if len(description) > <NUM_LIT:1>:<EOL><INDENT>desc_dict["<STR_LIT:type>"] = description[<NUM_LIT:1>].lower()<EOL>if len(description) > <NUM_LIT:2>:<EOL><INDENT>desc_dict["<STR_LIT:label>"] = description[<NUM_LIT:2>]<EOL>if len(description) > <NUM_LIT:3>:<EOL><INDENT>if not isinstance(description[<NUM_LIT:3>], dict):<EOL><INDENT>raise DataTableException("<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>" % type(description[<NUM_LIT:3>]))<EOL><DEDENT>desc_dict["<STR_LIT>"] = description[<NUM_LIT:3>]<EOL>if len(description) > <NUM_LIT:4>:<EOL><INDENT>raise DataTableException("<STR_LIT>")<EOL><DEDENT><DEDENT><DEDENT><DEDENT>if desc_dict["<STR_LIT:type>"] not in ["<STR_LIT:string>", "<STR_LIT>", "<STR_LIT>",<EOL>"<STR_LIT:date>", "<STR_LIT>", "<STR_LIT>"]:<EOL><INDENT>raise DataTableException(<EOL>"<STR_LIT>" % desc_dict["<STR_LIT:type>"])<EOL><DEDENT>return desc_dict<EOL>
Parses a single column description. Internal helper method.

        Args:
          description: a column description in the possible formats:
           'id'
           ('id',)
           ('id', 'type')
           ('id', 'type', 'label')
           ('id', 'type', 'label', {'custom_prop1': 'custom_val1'})
        Returns:
          Dictionary with the following keys: id, label, type, and
          custom_properties where:
            - If label not given, it equals the id.
            - If type not given, string is used by default.
            - If custom properties are not given, an empty dictionary is used by
              default.

        Raises:
          DataTableException: The column description did not match the RE, or
              unsupported type was passed.