code: def makedminfo(tabdesc, group_spec=None):
    if group_spec is None:
      group_spec = {}
    class DMGroup(object):
      def __init__(self):
        self.columns = []
        self.type = None
        self.spec = None
    dm_groups = defaultdict(DMGroup)
    for c, d in six.iteritems(tabdesc):
      if c in ('_define_hypercolumn_', '_keywords_', '_private_keywords_'):
        continue
      group = d.get("dataManagerGroup", "StandardStMan")
      type_ = d.get("dataManagerType", "StandardStMan")
      if not group:
        group = "StandardStMan"
      if not type_:
        type_ = "StandardStMan"
      dm_group = dm_groups[group]
      dm_group.columns.append(c)
      if dm_group.spec is None:
        dm_group.spec = group_spec.get(group, {})
      if dm_group.type is None:
        dm_group.type = type_
      elif not dm_group.type == type_:
        raise ValueError("Mismatched dataManagerType '%s' "
                          "for dataManagerGroup '%s' "
                          "Previously, the type was '%s'" %
                              (type_, group, dm_group.type))
    return {
      '*%d'%(i+1): {
        'COLUMNS': dm_group.columns,
        'TYPE': dm_group.type,
        'NAME': group,
        'SPEC' : dm_group.spec,
        'SEQNR': i
      } for i, (group, dm_group)
      in enumerate(six.iteritems(dm_groups))
    }