Source code for datadigitizer.settings

r"""
Settings module.
"""
import os
import configparser
import re
from typing import Dict
from . import version


def _typed_option(s):
    r"""
    Parse data from config file

    Parameters
    -----------
    s: str
        Value of the config value.

    Returns
    --------
    typed_elements: int/float or str or iterable
    """

    if isinstance(s, str):
        str_elements = s.replace(' ', '')
        str_elements = str_elements.replace('(', '').replace(')', '')
        str_elements = str_elements.replace('\'', '').replace('"', '')
        str_elements = str_elements.replace('[', '').replace(']', '')
        str_elements = str_elements.replace('{', '').replace('}', '')
        str_elements = str_elements.split(',')

        typed_elements = []

        for i in str_elements:
            try:
                if '.' in i:
                    new_element = float(i)
                else:
                    _s = re.findall(r"\d{0,9}e.\d{0,9}", i)
                    if len(_s) > 0:
                        new_element = float(i)
                    else:
                        new_element = int(i)

            except ValueError:
                if i.lower() == 'true':
                    new_element = True
                elif i.lower() == 'false':
                    new_element = False
                else:
                    new_element = str(i)

            typed_elements.append(new_element)

        if len(typed_elements) == 1:
            return typed_elements[0]
        else:
            return tuple(typed_elements)
    else:
        return s


[docs] def save_cfg(): r""" Save the configuration file. """ fpath = os.path.abspath(CFG_PATH) with open(fpath, 'w') as fobj: cfg.write(fobj)
APP_NAME = version.__package_name__.replace(' ', '').lower() CFG_FOLDER = os.path.abspath(os.path.expanduser('~') + '/' + '.' + APP_NAME + '/') CFG_NAME = APP_NAME + ".ini" CFG_PATH = os.path.abspath(CFG_FOLDER + "/" + CFG_NAME) if not os.path.exists(CFG_FOLDER): os.mkdir(CFG_FOLDER) folder_settings = {'image folder': os.path.expanduser('~'), 'image name': '', 'data folder': os.path.expanduser('~'), 'data name': ''} cfg_dict = dict(FOLDERS=folder_settings) cfg = configparser.ConfigParser(converters={'_typed_option': _typed_option}) cfg.update(cfg_dict) if not os.path.exists(CFG_PATH): save_cfg() else: user_cfg = configparser.ConfigParser(converters={'_typed_option': _typed_option}) user_cfg.read(CFG_PATH) cfg.update(user_cfg)