def get_nm_group(nm_host, gname=None, gid=None, groupnames=None):
    "\n    Return a dict of information about a group\n    in NM, by either name or ID. If gname is specified,\n    it will be resolved to the id.\n\n    groupnames, if specified, is the output dict from get_group_names();\n    if it is not specified, get_group_names() will be called internally.\n\n    :param nm_host: NodeMeister hostname/IP\n    :type nm_host: string\n    :param gname: name of group to get\n    :type gname: string\n    :param gid: ID of group to get, overrides gname\n    :type gid: int\n    :param groupnames: output of get_group_names(), to prevent calling it again if we already have it\n    :type groupnames: dict\n    :rtype: dict\n    :returns: unserialized JSON dict representing the specified group, of the form:\n      {'name': <string>, 'parameters': [<param IDs>], 'classes': [<class IDs>], 'parents': [<group IDs>], 'groups': [<group IDs>], 'id': <int>, 'description': <string>}\n    "
    if ((gid is None) and (gname is None)):
        raise ValueError('get_nm_group called without gname or gid')
    if (gid is None):
        if (groupnames is None):
            groupnames = get_group_names(nm_host)
        for n in groupnames:
            if (groupnames[n] == gname):
                gid = n
        if (gid is None):
            return {}
    j = get_json(('http://%s/enc/groups/%d/' % (nm_host, gid)))
    return j
Return a dict of information about a group
in NM, by either name or ID. If gname is specified,
it will be resolved to the id.

groupnames, if specified, is the output dict from get_group_names();
if it is not specified, get_group_names() will be called internally.

:param nm_host: NodeMeister hostname/IP
:type nm_host: string
:param gname: name of group to get
:type gname: string
:param gid: ID of group to get, overrides gname
:type gid: int
:param groupnames: output of get_group_names(), to prevent calling it again if we already have it
:type groupnames: dict
:rtype: dict
:returns: unserialized JSON dict representing the specified group, of the form:
  {'name': <string>, 'parameters': [<param IDs>], 'classes': [<class IDs>], 'parents': [<group IDs>], 'groups': [<group IDs>], 'id': <int>, 'description': <string>}
def get_nm_group(nm_host, gname=None, gid=None, groupnames=None):
    "\n    Return a dict of information about a group\n    in NM, by either name or ID. If gname is specified,\n    it will be resolved to the id.\n\n    groupnames, if specified, is the output dict from get_group_names();\n    if it is not specified, get_group_names() will be called internally.\n\n    :param nm_host: NodeMeister hostname/IP\n    :type nm_host: string\n    :param gname: name of group to get\n    :type gname: string\n    :param gid: ID of group to get, overrides gname\n    :type gid: int\n    :param groupnames: output of get_group_names(), to prevent calling it again if we already have it\n    :type groupnames: dict\n    :rtype: dict\n    :returns: unserialized JSON dict representing the specified group, of the form:\n      {'name': <string>, 'parameters': [<param IDs>], 'classes': [<class IDs>], 'parents': [<group IDs>], 'groups': [<group IDs>], 'id': <int>, 'description': <string>}\n    "
    if ((gid is None) and (gname is None)):
        raise ValueError('get_nm_group called without gname or gid')
    if (gid is None):
        if (groupnames is None):
            groupnames = get_group_names(nm_host)
        for n in groupnames:
            if (groupnames[n] == gname):
                gid = n
        if (gid is None):
            return {}
    j = get_json(('http://%s/enc/groups/%d/' % (nm_host, gid)))
    return j