From cf7cf41b4c70686a69ec9f3d6a8f0157f556f68c Mon Sep 17 00:00:00 2001 From: John Omotani Date: Sun, 3 May 2020 21:32:01 +0100 Subject: [PATCH] Provide 'doc' property of OptionsFactory Allows getting the documentation from the OptionsFactory. --- optionsfactory/optionsfactory.py | 18 ++++++++++++------ optionsfactory/tests/test_mutableoptions.py | 9 +++++++++ optionsfactory/tests/test_options.py | 9 +++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/optionsfactory/optionsfactory.py b/optionsfactory/optionsfactory.py index bbc209b..00720cf 100644 --- a/optionsfactory/optionsfactory.py +++ b/optionsfactory/optionsfactory.py @@ -86,6 +86,13 @@ def defaults(self): """ return deepcopy(self.__defaults) + @property + def doc(self): + """Get the documentation for the options defined for this OptionsFactory + + """ + return {key: value.doc for key, value in self.__defaults.items()} + def add(self, **kwargs): """Create a more specific version of the factory with extra options. For example, may be useful for a subclass like @@ -183,7 +190,9 @@ def __create_mutable(self, values=None, parent=None): del values[key] # Return new MutableOptions instance - return OptionsFactory.MutableOptions(values, self.__defaults, parent=parent) + return OptionsFactory.MutableOptions( + values, self.__defaults, self.doc, parent=parent + ) def __create_immutable(self, values=None): # Create MutableOptions instance: use to check the values and evaluate defaults @@ -198,7 +207,7 @@ class MutableOptions: """ - def __init__(self, data, defaults, parent=None): + def __init__(self, data, defaults, doc, parent=None): self.__defaults = { key: value if not isinstance(value, OptionsFactory) else None for key, value in defaults.items() @@ -226,10 +235,7 @@ def __init__(self, data, defaults, parent=None): for key, value in data.items(): self.__data[key] = _checked(value, meta=self.__defaults[key], name=key) - self.__doc = { - key: value.doc if value is not None else self.__data[key].doc - for key, value in self.__defaults.items() - } + self.__doc = doc @property def doc(self): diff --git a/optionsfactory/tests/test_mutableoptions.py b/optionsfactory/tests/test_mutableoptions.py index 8986f1d..a4ba167 100644 --- a/optionsfactory/tests/test_mutableoptions.py +++ b/optionsfactory/tests/test_mutableoptions.py @@ -180,6 +180,15 @@ def test_defaults(self): assert opts.g == 11 assert opts.h == 3 + assert factory.doc["a"] is None + assert factory.doc["b"] is None + assert factory.doc["c"] is None + assert factory.doc["d"] is None + assert factory.doc["e"] is None + assert factory.doc["f"] == "option f" + assert factory.doc["g"] == "option g" + assert factory.doc["h"] == "option h" + def test_initialise(self): factory = MutableOptionsFactory( a=1, diff --git a/optionsfactory/tests/test_options.py b/optionsfactory/tests/test_options.py index 929ee5b..8a69ce3 100644 --- a/optionsfactory/tests/test_options.py +++ b/optionsfactory/tests/test_options.py @@ -135,6 +135,15 @@ def test_defaults(self): ] ) + assert factory.doc["a"] is None + assert factory.doc["b"] is None + assert factory.doc["c"] is None + assert factory.doc["d"] is None + assert factory.doc["e"] is None + assert factory.doc["f"] == "option f" + assert factory.doc["g"] == "option g" + assert factory.doc["h"] == "option h" + def test_initialise(self): factory = OptionsFactory( a=1,