Esempio n. 1
0
def _parse_range_expr(value, converter=float):
    """
    Parse a string in the form of min:max or min:step:max and return a
    numpy array.

    Parameters
    ----------
    value : str
        The string to be parsed.
    converter : callable
        function that converts a string representation to a number.

    Returns
    -------
    np.ndarray
        The parsed numpy array.
    """
    try:
        limits = value.split(':')
        limits = [converter(i) for i in limits]
        if len(limits) == 2:
            value = np.arange(limits[0], limits[1])
        elif len(limits) == 3:
            value = np.arange(limits[0], limits[2], limits[1])
    except Exception:
        raise validate.VdtTypeError(value)

    return value
Esempio n. 2
0
def is_group(value):
    """
    Check whether groupname or gid as argument exists.
    if this function recieved groupname, convert gid and exec validation.
    """

    if type(value) == str:
        try:
            entry = grp.getgrnam(value)
            value = entry.gr_gid
        except KeyError:
            err_message = ('{0}: No such group.'.format(value))
            raise validate.VdtValueError(err_message)

        return value

    elif type(value) == int:
        try:
            grp.getgrgid(value)
        except KeyError:
            err_message = ('{0}: No such group.'.format(value))
            raise validate.VdtValueError(err_message)

        return value

    else:
        err_message = ('Please, use str or int to "user" parameter.')
        raise validate.VdtTypeError(err_message)
Esempio n. 3
0
def is_user(value, min=None, max=None):
    """
    Check whether username or uid as argument exists.
    if this function recieved username, convert uid and exec validation.
    """

    if type(value) == str:
        try:
            entry = pwd.getpwnam(value)
            value = entry.pw_uid
        except KeyError:
            err_message = ('{0}: No such user.'.format(value))
            raise validate.VdtValueError(err_message)

        return value

    elif type(value) == int:
        try:
            pwd.getpwuid(value)
        except KeyError:
            err_message = ('{0}: No such user.'.format(value))
            raise validate.VdtValueError(err_message)

        return value

    else:
        err_message = ('Please, use str or int to "user" parameter.')
        raise validate.VdtTypeError(err_message)
Esempio n. 4
0
def is_dir(value):
    """
    This function checks whether given path as argument exists.
    :param str value: Assumed directory path
    :rtype: str
    :return: If given value is valid, retuning given value.
    """
    value = os.path.expanduser(value)
    value = os.path.expandvars(value)
    value = os.path.abspath(value)

    if os.path.exists(value):
        if os.path.isdir(value):
            if os.access(value, os.R_OK):
                return value

            else:
                err_message = ('{path}: Permission denied.'
                               ''.format(path=value))
                raise validate.VdtValueError(err_message)
        else:
            err_message = ('{value} is file.' ''.format(value=value))
            raise validate.VdtTypeError(err_message)
    else:
        err_message = ('{path}: No such file or directory.'
                       ''.format(path=value))
        raise validate.VdtValueError(err_message)
Esempio n. 5
0
def is_cmdline(value):
    """
    Parse command line input
    """
    try:
        return shlex.split(value)
    except:
        raise validate.VdtTypeError(value)
Esempio n. 6
0
def is_logging_level(value):
    """
    Coerces a string to an integer logging level which
    maps to a standard python logging level
    """
    try:
        level = format_loglevel(value)
    except:
        raise validate.VdtTypeError(value)

    return level
Esempio n. 7
0
def is_octal(value, min_val=None, max_val=None):
    """
    Coerces a value to octal
    """
    if not isinstance(value, str):
        return validate.is_integer(value, min_val, max_val)

    try:
        value = int(value, 8)
    except ValueError:
        raise validate.VdtTypeError(value)
    return validate.is_integer(value, min_val, max_val)
Esempio n. 8
0
def is_octal(value, min_val=None, max_val=None):
    """
    Coerces a value to octal
    """
    if sys.version_info[0] < 3:
        if not isinstance(value, StringTypes):
            return validate.is_integer(value, min_val, max_val)
    else:
        if not isinstance(value, str):
            return validate.is_integer(value, min_val, max_val)

    try:
        value = int(value, 8)
    except ValueError:
        raise validate.VdtTypeError(value)
    return validate.is_integer(value, min_val, max_val)
Esempio n. 9
0
def is_logging_level(value):
    """
    Coerces a string to an integer logging level which
    maps to a standard python logging level
    """
    std_levels = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'critical': logging.CRITICAL
    }

    try:
        level = value.lower().strip()
    except:
        raise validate.VdtTypeError(value)

    if not std_levels.get(level):
        raise validate.ValidateError(value)

    return std_levels.get(level)
Esempio n. 10
0
def is_pid(value):
    """
    This function checks whether file path
    that is specified at "pid_file" option eixsts,
    whether write permission to the file path.

    Return the following value:
    case1: exists path and write permission
        is_pid('/tmp')
            '/tmp/hogehoge.pid'

    case2: non-exists path and write permission
        is_pid('/tmp/hogehoge')
            '/tmp/hogehoge'
        In this case, hogehoge doesn't exist.
        but hogehoge is considered as a file.
        Thus, create pid file named 'hogehoge'.

    case3: complete non-exists path
        is_pid('/tmp/hogehoge/fugafuga')
            IOError: [Error 2] No such file or directory.
        The last part of given path is only considered pid_file's name.
        In this case, "fugafuga" is considered pid_file's name.

    In any case, check whether given path exists before checking permission.

    Notes: Even if given relative path, works fine.
           But, if don't use as much as possible if good.

           Recommended giving the absolute path including the pid file name.
    """

    value = os.path.expanduser(value)
    value = os.path.expandvars(value)
    value = os.path.abspath(value)

    pid_file = 'blackbird.pid'

    if os.path.exists(value):

        if os.path.isdir(value):

            if os.access(value, os.W_OK):
                return os.path.join(value, pid_file)

            else:
                err_message = ('{path}: Permission denied.'
                               ''.format(path=value)
                               )
                raise validate.VdtValueError(err_message)

        else:
            err_message = 'pid file already exists.'
            raise AlreadyLocked(err_message)

    else:
        directory = os.path.split(value)[0]

        if os.path.isdir(directory):

            if os.access(directory, os.W_OK):
                return value

            else:
                err_message = ('{directory}: Permission denied.'
                               ''.format(directory=directory)
                               )
                raise validate.VdtValueError(err_message)

        else:

            if os.path.exists(directory):
                err_message = ('{directory} is file.'
                               ''.format(directory=directory)
                               )
                raise validate.VdtTypeError(err_message)

            else:
                err_message = ('{directory}: No such file or directory.'
                               ''.format(directory=directory)
                               )
                raise validate.VdtValueError(err_message)
Esempio n. 11
0
def is_cmdline(value):
    try:
        return shlex.split(value)
    except:
        raise validate.VdtTypeError(value)