From 63c7cc6523a9534f13d05bf5ffe216ad6fed95d1 Mon Sep 17 00:00:00 2001 From: enkore Date: Mon, 8 Jun 2015 02:32:39 +0200 Subject: [PATCH] Fix minor bug with required inherited settings in subclasses redefining them --- i3pystatus/core/settings.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/i3pystatus/core/settings.py b/i3pystatus/core/settings.py index ecabdd0..e2daa2b 100644 --- a/i3pystatus/core/settings.py +++ b/i3pystatus/core/settings.py @@ -23,12 +23,18 @@ class SettingsBaseMeta(type): name(setting) in seen or seen.add(name(setting)))] settings = tuple() - required = tuple() + required = set() # getmro returns base classes according to Method Resolution Order, # which always includes the class itself as the first element. for base in inspect.getmro(cls): settings += tuple(getattr(base, "settings", [])) - required += tuple(getattr(base, "required", [])) + required |= set(getattr(base, "required", [])) + # if a derived class defines a default for a setting it is not + # required anymore. + for base in inspect.getmro(cls): + for r in list(required): + if hasattr(base, r): + required.remove(r) return unique(settings), required