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
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)
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)
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)
def is_cmdline(value): """ Parse command line input """ try: return shlex.split(value) except: raise validate.VdtTypeError(value)
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
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)
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)
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)
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)
def is_cmdline(value): try: return shlex.split(value) except: raise validate.VdtTypeError(value)