Source code for pylablib.core.utils.library_parameters
"""Storage for global library parameters"""
from . import dictionary, module as module_utils
[docs]class LibraryParametersStorage(object):
"""
Global library parameters storage.
Args:
root_name(str): name of the root module
On creation goes through the root module and all of its submodules and checks if any have ``'_module_parameters'`` variable.
If they do, this variable is interpreted as a dictionary with parameters from that module.
All of the found dictionaries are stored together and the contained parameters can be transparently read and changed.
"""
def __init__(self, root_name):
object.__init__(self)
self.root_name=root_name
self.parameters=self._collect_parameters(self.root_name)
@staticmethod
def _collect_parameters(pkg_name):
all_packages=module_utils.get_loaded_package_modules(pkg_name)
values={}
for name,pkg in all_packages.items():
if hasattr(pkg,"_module_parameters"):
values[name]=pkg._module_parameters
return values
[docs] def refresh(self):
"""Repeat the modules scan (should be called if any of the modules are reloaded)"""
self.parameters=self._collect_parameters(self.root_name)
def __getitem__(self, name):
res=dictionary.Dictionary()
for v in self.parameters.values():
res.update(v)
return res[name]
def __setitem__(self, name, value):
name="/".join(dictionary.normalize_path(name))
for v in self.parameters.values():
if name in v:
v[name]=value
return
raise KeyError("can't find parameter named {}".format(name))
def __str__(self):
return str(self[""].as_dict("flat"))
def __repr__(self):
return "{}({})".format(self.__class__.__name__,str(self))
[docs] def update(self, d):
"""Update parameters with the supplied dictionary"""
for k,v in d.items():
self[k]=v