gitosis/gitosis/group.py

52 lines
1.3 KiB
Python
Raw Normal View History

2007-05-30 12:57:31 +02:00
import logging
from ConfigParser import NoSectionError, NoOptionError
def _getMembership(config, user, seen):
2007-05-30 12:57:31 +02:00
log = logging.getLogger('gitosis.group.getMembership')
for section in config.sections():
GROUP_PREFIX = 'group '
if not section.startswith(GROUP_PREFIX):
continue
group = section[len(GROUP_PREFIX):]
if group in seen:
2007-05-30 12:57:31 +02:00
continue
try:
members = config.get(section, 'members')
except (NoSectionError, NoOptionError):
members = []
else:
members = members.split()
if user in members:
log.debug('found %(user)r in %(group)r' % dict(
user=user,
group=group,
))
seen.add(group)
2007-05-30 12:57:31 +02:00
yield group
for member_of in _getMembership(
config, '@%s' % group, seen,
):
2007-05-30 12:57:31 +02:00
yield member_of
def getMembership(config, user):
"""
Generate groups ``user`` is member of, according to ``config``
:type config: RawConfigParser
:type user: str
:param _seen: internal use only
"""
seen = set()
for member_of in _getMembership(config, user, seen):
yield member_of
# everyone is always a member of group "all"
yield 'all'