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))
  }