templates - dynamic data generation¶
This module contains tools for creating conditions and templates to dynamically generate and validate python data structures (lists and dicts).
See Templates guide for more info on template syntax and use cases.
COMPARISON_FUNCTIONS = {
"gt": lambda args: isinstance(args[0], Real) and isinstance(args[1], Real) and args[0] > args[1],
"lt": lambda args: isinstance(args[0], Real) and isinstance(args[1], Real) and args[0] < args[1],
"ge": lambda args: isinstance(args[0], Real) and isinstance(args[1], Real) and args[0] >= args[1],
"le": lambda args: isinstance(args[0], Real) and isinstance(args[1], Real) and args[0] <= args[1],
"eq": lambda args: args[0] == args[1],
"ne": lambda args: args[0] != args[1],
"has": lambda args: isinstance(args[0], Container) and args[1] in args[0],
"in": lambda args: isinstance(args[1], Container) and args[0] in args[1],
"match": lambda args: fnmatch(str(args[0]), str(args[1])),
"like": lambda args: fnmatch(str(args[0]), str(args[1]).replace("%", "*")),
} #: comparison functions for conditions
AGG_FUNCTIONS = {
"sum": sum,
"min": min,
"max": max,
"all": all,
"any": any,
"len": len,
} #: aggregate functions for conditions
TEMPLATE_FUNCTIONS = {
"true": lambda args: True,
"str": lambda args: str(args[0]),
"len": lambda args: len(args[0]),
"int": lambda args: int(args[0]),
"bool": lambda args: bool(args[0]),
"not": lambda args: not bool(args[0]),
"datetime": lambda args: datetime.fromisoformat(args[0]),
"date": lambda args: datetime.fromisoformat(args[0]).date(),
"sum": sum,
"diff": lambda args: args[0] - args[1],
"max": max,
"min": min,
"all": all,
"any": any,
"first": lambda args: args[0],
"last": lambda args: args[-1],
"uuid4": lambda args: uuid4(),
"utcnow": lambda args: datetime.utcnow(),
"now": lambda args: datetime.now(),
"now_date": lambda args: datetime.now().date(),
"timestamp": lambda args: datetime.now().timestamp(),
"random": lambda args: random(),
"randint": lambda args: randint(args[0], args[1]),
"urandom": lambda args: urandom(args[0]),
"capitalize": lambda args: args[0].capitalize(),
"upper": lambda args: args[0].upper(),
"lower": lambda args: args[0].lower(),
"split": lambda args: args[1].split(args[0]),
"join": lambda args: args[0].join(args[1:]),
} #: functions available for template exec (?x:) operator