Settings will be inherited between modules

This commit is contained in:
Matthieu Coudron 2014-12-17 00:48:49 +01:00
parent 735f244270
commit f440322b36

View File

@ -1,8 +1,10 @@
from i3pystatus.core.util import KeyConstraintDict from i3pystatus.core.util import KeyConstraintDict
from i3pystatus.core.exceptions import ConfigKeyError, ConfigMissingError from i3pystatus.core.exceptions import ConfigKeyError, ConfigMissingError
import inspect
class SettingsBase: class SettingsBase:
""" """
Support class for providing a nice and flexible settings interface Support class for providing a nice and flexible settings interface
@ -15,16 +17,21 @@ class SettingsBase:
Settings are stored as attributes of self. Settings are stored as attributes of self.
""" """
settings = tuple() settings = (
("enable_log", "Set to true to log error to .i3pystatus-<pid> file"),
)
"""settings should be tuple containing two types of elements: """settings should be tuple containing two types of elements:
* bare strings, which must be valid Python identifiers. * bare strings, which must be valid Python identifiers.
* two-tuples, the first element being a identifier (as above) and the second * two-tuples, the first element being a identifier (as above)
a docstring for the particular setting""" and the second a docstring for the particular setting"""
required = tuple() required = tuple()
"""required can list settings which are required""" """required can list settings which are required"""
enable_log = False
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
def get_argument_dict(args, kwargs): def get_argument_dict(args, kwargs):
if len(args) == 1 and not kwargs: if len(args) == 1 and not kwargs:
@ -33,9 +40,20 @@ class SettingsBase:
return args[0] return args[0]
return kwargs return kwargs
self.settings = self.flatten_settings(self.settings) def merge_with_parents_settings():
sm = KeyConstraintDict(self.settings, self.required) settings = tuple()
# getmro returns base classes according to Method Resolution Order
for cls in inspect.getmro(self.__class__):
if hasattr(cls, "settings"):
settings = settings + cls.settings
return settings
settings = merge_with_parents_settings()
settings = self.flatten_settings(settings)
sm = KeyConstraintDict(settings, self.required)
settings_source = get_argument_dict(args, kwargs) settings_source = get_argument_dict(args, kwargs)
try: try: