From b8d4a0292b8737b8cf313a1e79a2f7bef8783bfe Mon Sep 17 00:00:00 2001 From: Henrik Lemke Date: Thu, 27 Dec 2018 21:40:56 +0100 Subject: [PATCH] startup and more --- eco/bernina/bernina.py | 28 +++++++++++++++++++++++++--- eco/bernina/config.py | 4 ++-- eco/ecocnf.py | 14 ++++++++++++++ eco/utilities/config.py | 16 +++++++++++++--- startup.py | 4 ++-- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/eco/bernina/bernina.py b/eco/bernina/bernina.py index 14287dc..da4c74a 100644 --- a/eco/bernina/bernina.py +++ b/eco/bernina/bernina.py @@ -1,16 +1,18 @@ from ..utilities.config import initFromConfigList from epics import PV -from .config import components, config from .. import ecocnf from ..aliases import NamespaceCollection +import logging -itglobals = globals() +from .config import components, config +_namespace = globals() +_scope_name = 'bernina' alias_namespaces = NamespaceCollection() for key, value in initFromConfigList(components, lazy=ecocnf.startup_lazy).items(): - globals()[key] = value + _namespace[key] = value if not ecocnf.startup_lazy: try: @@ -21,3 +23,23 @@ for key, value in initFromConfigList(components, lazy=ecocnf.startup_lazy).items except: pass alias_namespaces.bernina.store() + + +def initDevice(name): + if name=='all': + logging.info(f'initializing all components from {_scope_name}.') + name = list(components.keys()) + if not name in components.keys(): + raise KeyError(f'Could not find {name} in configuration!') + if type(name) is list: + for tname in name: + initDevice(tname) + else: + initFromConfigList + + + + + + + diff --git a/eco/bernina/config.py b/eco/bernina/config.py index 02d5c04..e967488 100755 --- a/eco/bernina/config.py +++ b/eco/bernina/config.py @@ -16,12 +16,12 @@ from ..utilities.config import ( Alias, init_device, initFromConfigList, - ExperimentConfiguration, + Configuration, ) _eco_lazy_init = False -config = ExperimentConfiguration( +config = Configuration( "/sf/bernina/config/exp/bernina_config_eco.json", name="bernina_config" ) diff --git a/eco/ecocnf.py b/eco/ecocnf.py index 62a1dca..53054a6 100644 --- a/eco/ecocnf.py +++ b/eco/ecocnf.py @@ -1,3 +1,8 @@ +import logging +import json +from pathlib import Path +from .eco.utilities.config import Configuration + startup_lazy = False scopes = [ @@ -5,3 +10,12 @@ scopes = [ {"name": "Bernina", "facility": "SwissFEL", "module": "bernina"}, {"name": "SwissMX", "facility": "SwissFEL", "module": "swissmx"}, ] + + + + +settings = Configuration(Path.home() / '.ecorc', name='eco_startup_settings') + + + + diff --git a/eco/utilities/config.py b/eco/utilities/config.py index a33f519..aeb016e 100644 --- a/eco/utilities/config.py +++ b/eco/utilities/config.py @@ -51,6 +51,17 @@ def init_device(type_string, name, args=[], kwargs={}, verbose=True, lazy=True): raise expt +def get_dependencies(inp): + outp = [] + if isinstance(inp, dict): + inp = inp.values() + for ta in inp: + if isinstance(ta, Component): + outp.append(ta.name) + elif isinstance(ta, dict) or isinstance(ta, list): + outp.append(get_dependencies(ta)) + return outp + def replaceComponent(inp, dict_all): if isinstance(inp, list): outp = [] @@ -74,7 +85,6 @@ def replaceComponent(inp, dict_all): return inp return outp - def initFromConfigList(config_list, lazy=False): op = {} for td in config_list: @@ -93,7 +103,7 @@ def initFromConfigList(config_list, lazy=False): return op -class ExperimentConfiguration: +class Configuration: """Configuration collector object collecting important settings for arbitrary use, linking to one or few standard config files in the file system. Sould also be used for config file writing.""" @@ -144,7 +154,7 @@ def loadConfig(fina): def writeConfig(fina, obj): with open(fina, "w") as f: - json.dump(obj, f) + json.dump(obj, f,indent=4) def parseChannelListFile(fina): diff --git a/startup.py b/startup.py index f32d038..67dc13f 100644 --- a/startup.py +++ b/startup.py @@ -78,9 +78,9 @@ def main(): shell.enable_matplotlib() shell() else: - from IPython import embed + from IPython import start_ipython - embed() + start_ipython() if __name__ == "__main__":