OXIESEC PANEL
- Current Dir:
/
/
opt
/
alt
/
python311
/
lib
/
python3.11
/
site-packages
/
validators
Server IP: 2a02:4780:11:1594:0:ef5:22d7:a
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
01/09/2025 02:18:04 AM
rwxr-xr-x
📄
__init__.py
1.86 KB
05/14/2024 03:18:23 PM
rw-r--r--
📁
__pycache__
-
05/14/2024 03:18:23 PM
rwxr-xr-x
📄
_extremes.py
1.01 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
_tld.txt
9.4 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
between.py
2.39 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
btc_address.py
1.62 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
card.py
5.63 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
country.py
14.57 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
cron.py
2.23 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
domain.py
2.4 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
email.py
2.72 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
encoding.py
1.34 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
finance.py
3.22 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
hashes.py
3.21 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
hostname.py
4.05 KB
05/14/2024 03:18:23 PM
rw-r--r--
📁
i18n
-
05/14/2024 03:18:23 PM
rwxr-xr-x
📄
iban.py
1.05 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
ip_address.py
4.34 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
length.py
1.45 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
mac_address.py
865 bytes
05/14/2024 03:18:23 PM
rw-r--r--
📄
py.typed
0 bytes
05/14/2024 03:18:23 PM
rw-r--r--
📄
slug.py
750 bytes
05/14/2024 03:18:23 PM
rw-r--r--
📄
uri.py
1.78 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
url.py
7.23 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
utils.py
3.1 KB
05/14/2024 03:18:23 PM
rw-r--r--
📄
uuid.py
1.04 KB
05/14/2024 03:18:23 PM
rw-r--r--
Editing: utils.py
Close
"""Utils.""" # standard from functools import wraps from inspect import getfullargspec from itertools import chain from os import environ from typing import Any, Callable, Dict class ValidationError(Exception): """Exception class when validation failure occurs.""" def __init__(self, function: Callable[..., Any], arg_dict: Dict[str, Any], message: str = ""): """Initialize Validation Failure.""" if message: self.reason = message self.func = function self.__dict__.update(arg_dict) def __repr__(self): """Repr Validation Failure.""" return ( f"ValidationError(func={self.func.__name__}, " + f"args={({k: v for (k, v) in self.__dict__.items() if k != 'func'})})" ) def __str__(self): """Str Validation Failure.""" return repr(self) def __bool__(self): """Bool Validation Failure.""" return False def _func_args_as_dict(func: Callable[..., Any], *args: Any, **kwargs: Any): """Return function's positional and key value arguments as an ordered dictionary.""" return dict( list(zip(dict.fromkeys(chain(getfullargspec(func)[0], kwargs.keys())), args)) + list(kwargs.items()) ) def validator(func: Callable[..., Any]): """A decorator that makes given function validator. Whenever the given `func` returns `False` this decorator returns `ValidationError` object. Examples: >>> @validator ... def even(value): ... return not (value % 2) >>> even(4) # Output: True >>> even(5) # Output: ValidationError(func=even, args={'value': 5}) Args: func: Function which is to be decorated. Returns: (Callable[..., ValidationError | Literal[True]]): A decorator which returns either `ValidationError` or `Literal[True]`. Raises: (ValidationError): If `r_ve` or `RAISE_VALIDATION_ERROR` is `True` """ @wraps(func) def wrapper(*args: Any, **kwargs: Any): raise_validation_error = False if "r_ve" in kwargs: raise_validation_error = True del kwargs["r_ve"] if environ.get("RAISE_VALIDATION_ERROR", "False") == "True": raise_validation_error = True try: if raise_validation_error: if func(*args, **kwargs): return True else: raise ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) else: return ( True if func(*args, **kwargs) else ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) ) except (ValueError, TypeError, UnicodeError) as exp: if raise_validation_error: raise ValidationError( func, _func_args_as_dict(func, *args, **kwargs), str(exp) ) from exp else: return ValidationError(func, _func_args_as_dict(func, *args, **kwargs), str(exp)) return wrapper