Collector¶
The collector object is responsible for collecting configuration and setting up converters
For example:
class JsonCollector(Collector):
def start_configuration(self):
return MergedOptions()
def find_missing_config(self, configuration):
assert "important_option" in configuration
def extra_prepare(self, configuration, args_dict):
configuration.update(
{"some_option": args_dict["some_option"]}
, source=<extra_prepare>
)
def read_file(self, location):
return json.loads(location)
def add_configuration(self, configuration, collect_another_source, done, result, src):
configuration.update(result, source=src)
for loc in result.get("others", []):
collect_another_source(
os.path.join(os.path.dirname(src), loc)
, prefix=os.path.splitext(loc)[1]
)
def extra_configuration_collection(self, configuration):
def convert(p, v):
return v * 2
configuration.add_converter(
Converter(
convert=convert
, convert_path=["some", "contrived", "example"]
)
)
collector = JsonCollector()
collector.prepare(
"/path/to/first_config_file.json"
, {"some_option": "stuff"}
)
#### /path/to/first_config_file.json
# { "hello": "there"
# , "others": ["some.json"]
# }
#### /path/to/some.json
# { "contrived":
# { "example": 2
# }
# }
collector.configuration["some_option"] == "stuff"
collector.configuration["some.contrived.example"] == 4
Hooks¶
-
class
option_merge.collector.
Collector
¶ When using the Collector, it is expected that you implement a number of hooks to make this class useful.
-
exception
BadConfigurationErrorKls
(_errors)¶
-
exception
BadFileErrorKls
(message)¶
-
add_configuration
(configuration, collect_another_source, done, result, src)¶ Hook to add to the configuration the loaded result from src into configuration
The collect_another_source function can be used to collect another source
And done is a dictionary of configuration we have already added
-
alter_clone_args_dict
(new_collector, new_args_dict, *args, **kwargs)¶ Hook for altering args_dict given to a clone collector it must return a dictionary
This dictionary will be used in the
prepare
call for the new collector
-
extra_configuration_collection
(configuration)¶ Hook to do any extra configuration collection or converter registration
-
extra_prepare
(configuration, args_dict)¶ Hook for any extra preparation before the converters are activated
-
extra_prepare_after_activation
(configuration, args_dict)¶ Hook for any extra preparation after the converters are activated
-
find_missing_config
(configuration)¶ Hook to raise errors about missing configuration
-
home_dir_configuration_location
()¶ Hook to return the location of the configuration in the user’s home directory
-
read_file
(location)¶ Hook to read in a file and return a dictionary
-
setup
()¶ Called at __init__ time
-
start_configuration
()¶ Hook for starting the base of the configuration
-
exception
Usage¶
-
Collector.
prepare
(configuration_file, args_dict, extra_files=None)¶ Prepare the collector!
- Collect all the configuration
- find missing configuration
- do self.extra_prepare
- Activate the converters
- Do self.extra_prepare_after_activation
-
Collector.
clone
(*args, **kwargs)¶ Create a new collector that is a clone of this one
-
Collector.
register_converters
(specs, Meta, configuration, NotSpecified)¶ Register converters
- specs
- a Dictionary of {(priority, [path]): spec}
- Meta
The class to instantiate to create
meta
The converter will call
spec.normalise(meta, val)
- configuration
- The configuration to add the converter to