tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler

This commit is contained in:
Goffi 2018-06-21 01:21:44 +02:00
commit e92971ff09
2 changed files with 16 additions and 11 deletions

View file

@ -369,8 +369,8 @@ class Jp(object):
pubsub_group.add_argument("-m", "--max", type=int, default=10,
help=_(u"maximum number of items to get ({no_limit} to get all items)".format(no_limit=C.NO_LIMIT)))
if flags:
raise exceptions.InternalError('unknowns flags: {flags}'.format(flags=u', '.join(flags)))
if not flags.all_used:
raise exceptions.InternalError('unknown flags: {flags}'.format(flags=u', '.join(flags.unused)))
if defaults:
raise exceptions.InternalError('unused defaults: {defaults}'.format(defaults=defaults))

View file

@ -67,24 +67,29 @@ class FlagsHandler(object):
the instance is initialized with an iterable
then attribute return True if flag is set, False else.
WARNING: If a flag is checked, it is removed (i.e. unset)
this is done to use bool(flags_handler) to check if all flags
have been used
"""
def __init__(self, flags):
self.flags = set(flags or [])
self._used_flags = set()
def __getattr__(self, flag):
try:
self.flags.remove(flag)
except KeyError:
return False
else:
return True
self._used_flags.add(flag)
return flag in self.flags
def __len__(self):
return len(self.flags)
def __iter__(self):
return self.flags.__iter__()
@property
def all_used(self):
"""Return True if all flags have been used"""
return self._used_flags.issuperset(self.flags)
@property
def unused(self):
"""Return flags which has not been used yet"""
return self.flags.difference(self._used_flags)