Source code for adles.group

import logging


[docs]class Group: """ Manages a group of users that has been loaded from a specification """ def __init__(self, name, group, instance=None): """ :param str name: Name of the group :param dict group: Dict specification of the group :param int instance: Instance number of a template group """ self._log = logging.getLogger('Group') self._log.debug("Initializing Group '%s'", name) if instance: self.is_template = True self.instance = instance else: self.is_template = False # !!! NOTE: ad-groups must be handled externally by caller !!! if "ad-group" in group: group_type = "ad" self.ad_group = group["ad-group"] users = [] if instance: # Template groups # This is the " X" in the spec self.ad_group += " " + str(instance) elif "filename" in group: from adles.utils import read_json group_type = "standard" if instance: # Template group users = [(user, pw) for user, pw in read_json(group["filename"]) [str(instance)].items()] else: # Standard group users = [(user, pw) for user, pw in read_json(group["filename"]).items()] elif "user-list" in group: group_type = "standard" users = group["user-list"] else: self._log.error("Invalid group dict for group '%s': %s", name, str(group)) raise Exception() self.group_type = group_type self.users = users self.size = int(len(self.users)) self.name = str(name) self._log.debug("Finished initializing Group '%s' with %d users", self.name, self.size) def __str__(self): return self.name def __eq__(self, other): return self.name == other.name and self.users == other.users and \ self.group_type == other.group_type def __ne__(self, other): return not self.__eq__(other)
[docs]def get_ad_groups(groups): """ Extracts Active Directory-type groups from a dict of groups. :param dict groups: Dict of groups and lists of groups :return: List of AD groups extracted :rtype: list(:class:`Group`) """ ad_groups = [] for _, group in groups.items(): # Ignore the group name, nab the group if isinstance(group, list): for i in group: if isinstance(i, Group): if i.group_type == "ad": ad_groups.append(i) elif isinstance(group, Group): if group.group_type == "ad": ad_groups.append(group) else: logging.error("Invalid type '%s' for a group in get_ad_groups: %s", type(group).__name__, str(group)) return ad_groups