def test_listfy_dicts(): d = dict(a=42) d_vals = d.values() d_keys = d.keys() assert isinstance(listify(d_vals), list) assert listify(d_vals) == list(d_vals) assert isinstance(listify(d_keys), list) assert listify(d_keys) == list(d_keys) assert isinstance(listify(d), list) assert listify(d) == list(d_vals)
def test_listify(): assert listify(12) == [12] assert listify([1, 2, 3]) == [1, 2, 3]
def test_empty_listify(): assert listify(None) == []
def load_config(config_files=None, simulator=None, parse=True, ignore_local=False): """Load configuation information This function supports loading of a number of different files. If no options are passed to `config_files` then the default `$PANDIR/conf_files/pocs.yaml` will be loaded. See Notes for additional information. .. note:: The `config_files` parameter supports a number of options: * `config_files` is a list and loaded in order, so the first entry will have any values overwritten by similarly named keys in the second entry. * Entries can be placed in the `$PANDIR/conf_files` folder and should be passed as just the file name, e.g. [`weather.yaml`, `email.yaml`] for loading `$PANDIR/conf_files/weather.yaml` and `$PANDIR/conf_files/email.yaml` * The `.yaml` extension will be added if not present, so list can be written as just ['weather', 'email']. * `config_files` can also be specified by an absolute path, which can exist anywhere on the filesystem. * Local versions of files can override built-in versions and are automatically loaded if placed in the `$PANDIR/conf_files` folder. The files have a `<>_local.yaml` name, where `<>` is the built-in file. So a `$PANDIR/conf_files/pocs_local.yaml` will override any setting in the default `pocs.yaml` file. * Local files can be ignored (mostly for testing purposes) with the `ignore_local` parameter. Args: config_files (list, optional): A list of files to load as config, see Notes for details of how to specify files. simulator (list, optional): A list of hardware items that should be used as a simulator. parse (bool, optional): If the config file should attempt to create objects such as dates, astropy units, etc. ignore_local (bool, optional): If local files should be ignored, see Notes for details. Returns: dict: A dictionary of config items """ # Default to the pocs.yaml file if config_files is None: config_files = ['pocs'] config_files = listify(config_files) config = dict() config_dir = '{}/conf_files'.format(os.getenv('PANDIR')) for f in config_files: if not f.endswith('.yaml'): f = '{}.yaml'.format(f) if not f.startswith('/'): path = os.path.join(config_dir, f) else: path = f try: _add_to_conf(config, path, parse=parse) except Exception as e: warn("Problem with config file {}, skipping. {}".format(path, e)) # Load local version of config if ignore_local is False: local_version = os.path.join(config_dir, f.replace('.', '_local.')) if os.path.exists(local_version): try: _add_to_conf(config, local_version, parse=parse) except Exception: warn("Problem with local config file {}, skipping".format( local_version)) # parse_config currently only corrects directory names. if parse: config = parse_config(config) return config