Everyone always belongs to group "all".
This commit is contained in:
parent
085e5fffa7
commit
65dc130228
|
@ -1,25 +1,15 @@
|
||||||
import logging
|
import logging
|
||||||
from ConfigParser import NoSectionError, NoOptionError
|
from ConfigParser import NoSectionError, NoOptionError
|
||||||
|
|
||||||
def getMembership(config, user, _seen=None):
|
def _getMembership(config, user, seen):
|
||||||
"""
|
|
||||||
Generate groups ``user`` is member of, according to ``config``
|
|
||||||
|
|
||||||
:type config: RawConfigParser
|
|
||||||
:type user: str
|
|
||||||
:param _seen: internal use only
|
|
||||||
"""
|
|
||||||
log = logging.getLogger('gitosis.group.getMembership')
|
log = logging.getLogger('gitosis.group.getMembership')
|
||||||
|
|
||||||
if _seen is None:
|
|
||||||
_seen = set()
|
|
||||||
|
|
||||||
for section in config.sections():
|
for section in config.sections():
|
||||||
GROUP_PREFIX = 'group '
|
GROUP_PREFIX = 'group '
|
||||||
if not section.startswith(GROUP_PREFIX):
|
if not section.startswith(GROUP_PREFIX):
|
||||||
continue
|
continue
|
||||||
group = section[len(GROUP_PREFIX):]
|
group = section[len(GROUP_PREFIX):]
|
||||||
if group in _seen:
|
if group in seen:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -34,9 +24,28 @@ def getMembership(config, user, _seen=None):
|
||||||
user=user,
|
user=user,
|
||||||
group=group,
|
group=group,
|
||||||
))
|
))
|
||||||
_seen.add(group)
|
seen.add(group)
|
||||||
yield group
|
yield group
|
||||||
|
|
||||||
for member_of in getMembership(config, '@%s' % group,
|
for member_of in _getMembership(
|
||||||
_seen=_seen):
|
config, '@%s' % group, seen,
|
||||||
|
):
|
||||||
yield member_of
|
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'
|
||||||
|
|
||||||
|
|
|
@ -7,12 +7,14 @@ from gitosis import group
|
||||||
def test_no_emptyConfig():
|
def test_no_emptyConfig():
|
||||||
cfg = RawConfigParser()
|
cfg = RawConfigParser()
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_no_emptyGroup():
|
def test_no_emptyGroup():
|
||||||
cfg = RawConfigParser()
|
cfg = RawConfigParser()
|
||||||
cfg.add_section('group hackers')
|
cfg.add_section('group hackers')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_no_notListed():
|
def test_no_notListed():
|
||||||
|
@ -20,6 +22,7 @@ def test_no_notListed():
|
||||||
cfg.add_section('group hackers')
|
cfg.add_section('group hackers')
|
||||||
cfg.set('group hackers', 'members', 'wsmith')
|
cfg.set('group hackers', 'members', 'wsmith')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_simple():
|
def test_yes_simple():
|
||||||
|
@ -28,6 +31,7 @@ def test_yes_simple():
|
||||||
cfg.set('group hackers', 'members', 'jdoe')
|
cfg.set('group hackers', 'members', 'jdoe')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_leading():
|
def test_yes_leading():
|
||||||
|
@ -36,6 +40,7 @@ def test_yes_leading():
|
||||||
cfg.set('group hackers', 'members', 'jdoe wsmith')
|
cfg.set('group hackers', 'members', 'jdoe wsmith')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_trailing():
|
def test_yes_trailing():
|
||||||
|
@ -44,6 +49,7 @@ def test_yes_trailing():
|
||||||
cfg.set('group hackers', 'members', 'wsmith jdoe')
|
cfg.set('group hackers', 'members', 'wsmith jdoe')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_middle():
|
def test_yes_middle():
|
||||||
|
@ -52,6 +58,7 @@ def test_yes_middle():
|
||||||
cfg.set('group hackers', 'members', 'wsmith jdoe danny')
|
cfg.set('group hackers', 'members', 'wsmith jdoe danny')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_recurse_one():
|
def test_yes_recurse_one():
|
||||||
|
@ -63,6 +70,7 @@ def test_yes_recurse_one():
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'smackers')
|
eq(gen.next(), 'smackers')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_recurse_one_ordering():
|
def test_yes_recurse_one_ordering():
|
||||||
|
@ -74,6 +82,7 @@ def test_yes_recurse_one_ordering():
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'smackers')
|
eq(gen.next(), 'smackers')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_recurse_three():
|
def test_yes_recurse_three():
|
||||||
|
@ -91,6 +100,7 @@ def test_yes_recurse_three():
|
||||||
eq(gen.next(), 'snackers')
|
eq(gen.next(), 'snackers')
|
||||||
eq(gen.next(), 'smackers')
|
eq(gen.next(), 'smackers')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_recurse_junk():
|
def test_yes_recurse_junk():
|
||||||
|
@ -102,6 +112,7 @@ def test_yes_recurse_junk():
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'smackers')
|
eq(gen.next(), 'smackers')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_yes_recurse_loop():
|
def test_yes_recurse_loop():
|
||||||
|
@ -113,6 +124,7 @@ def test_yes_recurse_loop():
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
eq(gen.next(), 'smackers')
|
eq(gen.next(), 'smackers')
|
||||||
eq(gen.next(), 'hackers')
|
eq(gen.next(), 'hackers')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
||||||
def test_no_recurse_loop():
|
def test_no_recurse_loop():
|
||||||
|
@ -122,4 +134,5 @@ def test_no_recurse_loop():
|
||||||
cfg.add_section('group smackers')
|
cfg.add_section('group smackers')
|
||||||
cfg.set('group smackers', 'members', '@hackers')
|
cfg.set('group smackers', 'members', '@hackers')
|
||||||
gen = group.getMembership(config=cfg, user='jdoe')
|
gen = group.getMembership(config=cfg, user='jdoe')
|
||||||
|
eq(gen.next(), 'all')
|
||||||
assert_raises(StopIteration, gen.next)
|
assert_raises(StopIteration, gen.next)
|
||||||
|
|
Loading…
Reference in a new issue