Ejemplo n.º 1
0
def attr_triple(value):
    """
    Check that interprets the value as `urwid.AttrSpec` triple for the colour
    modes 1,16 and 256.  It assumes a <6 tuple of attribute strings for
    mono foreground, mono background, 16c fg, 16c bg, 256 fg and 256 bg
    respectively. If any of these are missing, we downgrade to the next
    lower available pair, defaulting to 'default'.

    :raises: VdtValueTooLongError, VdtTypeError
    :rtype: triple of `urwid.AttrSpec`
    """
    keys = ['dfg', 'dbg', '1fg', '1bg', '16fg', '16bg', '256fg', '256bg']
    acc = {}
    if not isinstance(value, (list, tuple)):
        value = value,
    if len(value) > 6:
        raise VdtValueTooLongError(value)
    # ensure we have exactly 6 attribute strings
    attrstrings = (value + (6 - len(value)) * [None])[:6]
    # add fallbacks for the empty list
    attrstrings = (2 * ['default']) + attrstrings
    for i, value in enumerate(attrstrings):
        if value:
            acc[keys[i]] = value
        else:
            acc[keys[i]] = acc[keys[i - 2]]
    try:
        mono = AttrSpec(acc['1fg'], acc['1bg'], 1)
        normal = AttrSpec(acc['16fg'], acc['16bg'], 16)
        high = AttrSpec(acc['256fg'], acc['256bg'], 256)
    except AttrSpecError as e:
        raise ValidateError(str(e))
    return mono, normal, high
Ejemplo n.º 2
0
def limit_option(value, min=0, max=None, warn_default=0, alert_default=0):
    valid_options = ['WARN', 'ALERT']

    # Check min/max parameters
    if min is not None:
        try:
            min = int(min)
        except ValueError:
            raise VdtParamError('min', min)
    if max is not None:
        try:
            max = int(max)
        except ValueError:
            raise VdtParamError('max', max)

    # Check value is a list
    if not isinstance(value, list):
        raise VdtTypeError(value)

    # Check for too many or too few values
    if len(value) > len(valid_options):
        raise VdtValueTooLongError(value)
    # elif len(value) < 1:
    #     raise VdtValueTooShortError(value)
    returnDict = {'WARN': warn_default, 'ALERT': alert_default}
    valueDict = {}
    for entry in value:
        # Check list value is a string
        try:
            entry = str(entry)
        except ValueError:
            raise VdtValueError(entry)

        optionParts = entry.split(':', 1)

        limitType = optionParts[0].strip().upper()
        limitVal = optionParts[1]

        if limitType not in valid_options:
            raise VdtValueError(limitType)
        try:
            limitVal = int(limitVal)
        except ValueError:
            raise VdtTypeError(limitVal)

        # Check limits values fall in range
        if max is not None and limitVal > max:
            raise VdtValueTooBigError(limitVal)
        elif min is not None and limitVal < min:
            raise VdtValueTooSmallError(limitVal)

        # Check duplicate
        if limitType in valueDict:
            raise VdtValueError(value)
        valueDict[limitType] = limitVal

    returnDict.update(valueDict)
    # print returnDict
    return ','.join(
        ['%s: %s' % (key, value) for (key, value) in returnDict.items()])
Ejemplo n.º 3
0
    def _is_dict(self, value, min=None, max=None):
        """
        Validation function for dict values.

        Reference: https://github.com/DiffSK/configobj/blob/master/src/configobj/validate.py
        """
        # Get boundary values
        (min_val, max_val) = _is_num_param(('min', 'max'), (min, max))

        # Check if value is string
        if isinstance(value, str):
            # Convert string value
            try:
                value = ast.literal_eval(value)
            except ValueError:
                if value == 'dict()' or value == 'dict':
                    value = dict()
                else:
                    raise ValidateError(
                        'A value "{}" could not be converted to a dict!'.
                        format(value))
            except Exception as e:
                raise e

            # Validate whether the value is a dict
            if not isinstance(value, dict):
                raise ValidateError(
                    'A value of type {} was passed when a dict was expected!'.
                    format(type(value)))

        elif isinstance(value, dict):
            pass

        else:
            raise VdtTypeError(value)

        # Validate whether the value is within the boundaries
        if (min_val is not None) and (len(value) < min_val):
            raise VdtValueTooShortError(value)

        if (max_val is not None) and (len(value) > max_val):
            raise VdtValueTooLongError(value)

        return value
Ejemplo n.º 4
0
def option_list(value, options=None, min=None, max=None):
    if options and not isinstance(options, list):
        raise VdtParamError('options', options)

    if min is not None:
        try:
            min = int(min)
        except ValueError:
            raise VdtParamError('min', min)

    if max is not None:
        try:
            max = int(max)
        except ValueError:
            raise VdtParamError('max', max)

    if min < 0:
        raise VdtParamError('min', min)

    if max < min:
        raise VdtParamError('max', max)

    if isinstance(value, str):
        strVal = value.strip()
        value = []
        if strVal:
            value = [strVal]

    if not isinstance(value, list):
        raise VdtTypeError(value)

    if max and len(value) > max:
        raise VdtValueTooLongError(value)
    elif min and len(value) < min:
        raise VdtValueTooShortError(value)

    if not options:
        return value

    for entry in value:
        if entry not in options:
            raise VdtValueError(value)

    return value
Ejemplo n.º 5
0
def sample_option(value, samples_default=1, interval_default=1):

    valid_options = ['SAMPLES', 'INTERVAL']

    # Check samples_default and interval_default parameters
    try:
        samples_default = int(samples_default)
    except ValueError:
        raise VdtParamError('samples_default', samples_default)
    if samples_default < 1:
        raise VdtParamError('samples_default', samples_default)
    try:
        interval_default = int(interval_default)
    except ValueError:
        raise VdtParamError('interval_default', interval_default)
    if interval_default < 1:
        raise VdtParamError('interval_default', interval_default)

    returnDict = {'SAMPLES': samples_default, 'INTERVAL': interval_default}

    if value and not isinstance(value, list):
        raise VdtTypeError(value)

    if value is None or len(value) == 0:
        return returnDict

    if len(value) > len(valid_options):
        raise VdtValueTooLongError(value)

    updateDict = {}
    for entry in value:
        try:
            entry = str(entry)
        except ValueError:
            raise VdtValueError(entry)

        optionParts = entry.split(':', 1)
        if len(optionParts) != 2:
            raise VdtValueError(entry)

        limitType = optionParts[0].strip().upper()
        limitVal = optionParts[1]

        if limitType not in valid_options:
            raise VdtValueError(limitType)
        try:
            limitVal = int(limitVal)
        except ValueError:
            raise VdtTypeError(limitVal)

        if limitVal < 1:
            raise VdtValueTooSmallError(limitVal)

        if limitType in updateDict:
            raise VdtValueError(value)

        updateDict[limitType] = limitVal

    returnDict.update(updateDict)
    return ','.join(
        ['%s: %s' % (key, value) for (key, value) in returnDict.items()])