def is_base64bytes(value, length=None): """check whether the value is ``length`` base64-encoded bytes if ``length`` is not given, allow any length """ if length is not None: length = int(length) if not isinstance(value, str): raise validate.VdtTypeError(value) try: data = base64.b64decode(value) except binascii.Error: raise validate.VdtValueError(value) if length is not None and len(data) != length: raise validate.VdtValueError(value) return data
def is_file(value): """check whether the value is a valid file system path""" if not isinstance(value, str): raise validate.VdtTypeError(value) if not os.path.isfile(value): raise validate.VdtValueError(value) return value
def is_optionlist(value, *options): """check whether all list items are in ``options``""" try: if not all(isinstance(v, str) for v in options): raise validate.VdtParamError(options, value) except TypeError as e: raise validate.VdtParamError(str(e), value) val = validator.check('force_list', value) if not all(v in options for v in val): raise validate.VdtValueError(value) return val
def validate_convert(value, func, name=None): """Helper function for validate parameter conversion""" if value is None: return None try: return func(value) except (TypeError, ValueError): if name is None: raise validate.VdtValueError(value) else: raise validate.VdtParamError(name, value)
def is_timedelta(value): """create timedeltas""" if isinstance(value, (int, float)): return datetime.timedelta(days=value) elif isinstance(value, str): if value.count(':') > 2: raise validate.VdtValueError(value) try: items = [ (n, float(x)) for n, x in zip(('days', 'hours', 'minutes'), value.split(':')) ] except ValueError: raise validate.VdtTypeError(value) return datetime.timedelta(**dict(items)) else: raise validate.VdtTypeError(value)