sanitize.py

This module contains helper stuff to sanitize the config file in case it was edited by hand. Basically we just ensure bools are True/False and numbers are clamped to a sensible range. We also use a default dictionary to fix missing keys.

do_sanitize(dict_cfg)

Sanitize the dictionary in place

:param dict_cfg: The dictionary to sanitize :type dict_cfg: dict

This method takes a dictionary and clamps its values to sensible values.

Source code in src/sanitize.py
def do_sanitize(dict_cfg: dict):
    """
    Sanitize the dictionary in place

    :param dict_cfg: The dictionary to sanitize
    :type dict_cfg: dict

    This method takes a dictionary and clamps its values to sensible values.
    """

    # --------------------------------------------------------------------------

    # these are in the cron dict
    dict_cron = dict_cfg[K.S_KEY_CRON]

    dict_cron[K.S_KEY_CRON_ENABLED] = F.bool(dict_cron[K.S_KEY_CRON_ENABLED])
    dict_cron[K.S_KEY_CRON_INTERVAL] = _do_clamp(
        dict_cron[K.S_KEY_CRON_INTERVAL], R_INTERVAL
    )

    # --------------------------------------------------------------------------

    dict_cap = dict_cfg[K.S_KEY_CAPTION]

    dict_cap[K.S_KEY_CAPTION_SHOW] = F.bool(dict_cap[K.S_KEY_CAPTION_SHOW])
    dict_cap[K.S_KEY_CAPTION_POS] = _do_clamp(
        dict_cap[K.S_KEY_CAPTION_POS], R_POS
    )
    dict_cap[K.S_KEY_CAPTION_WRAP] = _do_clamp(
        dict_cap[K.S_KEY_CAPTION_WRAP], R_WRAP
    )

    # --------------------------------------------------------------------------

    dict_info = dict_cfg[K.S_KEY_INFO]

    dict_info[K.S_KEY_APOD_TITLE] = F.bool(dict_info[K.S_KEY_APOD_TITLE])
    dict_info[K.S_KEY_APOD_DATE] = F.bool(dict_info[K.S_KEY_APOD_DATE])
    dict_info[K.S_KEY_APOD_COPY] = F.bool(dict_info[K.S_KEY_APOD_COPY])
    dict_info[K.S_KEY_APOD_EXP] = F.bool(dict_info[K.S_KEY_APOD_EXP])

    # --------------------------------------------------------------------------

    dict_font = dict_cfg[K.S_KEY_FONT]

    dict_font[K.S_KEY_FONT_NAME] = str(dict_font[K.S_KEY_FONT_NAME])
    dict_font[K.S_KEY_FONT_SIZE] = _do_clamp(
        dict_font[K.S_KEY_FONT_SIZE], R_FONT_SIZE
    )
    dict_font[K.S_KEY_FONT_COLOR] = _clamp_list(
        dict_font[K.S_KEY_FONT_COLOR], R_COLOR
    )
    dict_font[K.S_KEY_FONT_TRANS] = _do_clamp(
        dict_font[K.S_KEY_FONT_TRANS], R_COLOR
    )

    # --------------------------------------------------------------------------

    dict_box = dict_cfg[K.S_KEY_BOX]

    dict_box[K.S_KEY_BOX_COLOR] = _clamp_list(
        dict_box[K.S_KEY_BOX_COLOR], R_COLOR
    )
    dict_box[K.S_KEY_BOX_TRANS] = _do_clamp(
        dict_box[K.S_KEY_BOX_TRANS], R_COLOR
    )
    dict_box[K.S_KEY_BOX_RAD] = _do_clamp(dict_box[K.S_KEY_BOX_RAD], R_BOX_RAD)
    dict_box[K.S_KEY_BOX_PAD] = _do_clamp(dict_box[K.S_KEY_BOX_PAD], R_BOX_PAD)

    # --------------------------------------------------------------------------

    dict_pad = dict_cfg[K.S_KEY_PAD]

    dict_pad[K.S_KEY_PAD_L] = _do_clamp(dict_pad[K.S_KEY_PAD_L], R_EXT_PAD)
    dict_pad[K.S_KEY_PAD_T] = _do_clamp(dict_pad[K.S_KEY_PAD_T], R_EXT_PAD)
    dict_pad[K.S_KEY_PAD_R] = _do_clamp(dict_pad[K.S_KEY_PAD_R], R_EXT_PAD)
    dict_pad[K.S_KEY_PAD_B] = _do_clamp(dict_pad[K.S_KEY_PAD_B], R_EXT_PAD)