From e92971ff09e81dca7ba6c0f98aea95bf4f5864e6 Mon Sep 17 00:00:00 2001 From: Goffi Date: Thu, 21 Jun 2018 01:21:44 +0200 Subject: [PATCH] tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler --- sat_frontends/jp/base.py | 4 ++-- sat_frontends/tools/misc.py | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/sat_frontends/jp/base.py b/sat_frontends/jp/base.py index c7392c20..7301d66d 100644 --- a/sat_frontends/jp/base.py +++ b/sat_frontends/jp/base.py @@ -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)) diff --git a/sat_frontends/tools/misc.py b/sat_frontends/tools/misc.py index 406bf5d2..85f0d11f 100644 --- a/sat_frontends/tools/misc.py +++ b/sat_frontends/tools/misc.py @@ -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) +