| 106 | |
| 107 | |
| 108 | class PreconfiguredGroupProvider: |
| 109 | |
| 110 | def __init__(self, groups) -> None: |
| 111 | self._user_groups = defaultdict(list) |
| 112 | self._lazy_group_parents = defaultdict(list) |
| 113 | |
| 114 | flat_groups = _flatten_groups(groups) |
| 115 | for group, members in flat_groups.items(): |
| 116 | for member in members: |
| 117 | if member.startswith(GROUP_PREFIX): |
| 118 | self._lazy_group_parents[member[1:]].append(group) |
| 119 | else: |
| 120 | self._user_groups[_normalize_user(member)].append(group) |
| 121 | |
| 122 | def get_groups(self, user, known_groups=None): |
| 123 | user_groups = set(self._user_groups[_normalize_user(user)]) |
| 124 | |
| 125 | if known_groups: |
| 126 | for known_group in known_groups: |
| 127 | if known_group in self._lazy_group_parents: |
| 128 | parent_groups = self._lazy_group_parents[known_group] |
| 129 | user_groups.update(parent_groups) |
| 130 | |
| 131 | return user_groups |
| 132 | |
| 133 | |
| 134 | class CombinedGroupProvider: |
no outgoing calls