Source code for cesard.config

import os
import sys
from osgeo import gdal
import spatialist
import pyroSAR
import cesard


[docs] def keyval_check( key: str, val: str, allowed_keys: list[str] ) -> str | None: """ Check and clean up key,value pairs while parsing a config file. Parameters ---------- key: the parameter key val: the parameter value allowed_keys: a list of allowed keys """ if key not in allowed_keys: msg = f"Parameter '{key}' is not allowed; should be one of {allowed_keys}" raise ValueError(msg) val = val.replace('"', '').replace("'", "") if val in ['None', 'none', '']: val = None return val
[docs] def validate_options( k: str, v: str, options: dict[str, list[str]] ) -> None: """ Validate a configuration option against a set of allowed options. Parameters ---------- k: the configuration key v: the configuration value options: the configuration options Returns ------- """ if k not in options: return if isinstance(v, list): for item in v: validate_options(k, item, options) else: msg = "Parameter '{}': expected value(s) to be one of {}; got '{}' instead" assert v in options[k], msg.format(k, options[k], v)
[docs] def validate_value( k: str, v: str | None | list[str] ) -> None: """ Validate the value of a configuration option. Parameters ---------- k: the configuration key v: the configuration value Returns ------- """ def val_aoi_geometry(x): return x is None or os.path.isfile(x) def val_aoi_tiles(x): return x is None or (isinstance(x, str) and len(x) == 5) def val_work_dir(x): return x is not None and os.path.isdir(v) and os.access(v, os.W_OK) validators = {'aoi_geometry': (val_aoi_geometry, 'must be None or an existing file'), 'aoi_tiles': (val_aoi_tiles, 'must be None or a string of length 5'), 'work_dir': (val_work_dir, 'must be an existing, writable directory')} if k not in validators.keys(): return if isinstance(v, list): for item in v: validate_value(k, item) else: validator, condition = validators[k] if not validator(v): msg = "Parameter '{}': value '{}' did not pass validation ({})." raise ValueError(msg.format(k, v, condition))
[docs] def version_dict() -> dict[str, str]: """ Get the versions of used packages Returns ------- a dictionary containing the versions of relevant python packages. Keys: - python - gdal - spatialist - pyrosar - cesard """ out = { 'python': sys.version, 'gdal': gdal.__version__, 'spatialist': spatialist.__version__, 'pyrosar': pyroSAR.__version__, 'cesard': cesard.__version__ } return out