Source code for eve_panel.field

import param
from eve.io.mongo.validation import Validator

SUPPORTED_SCHEMA_FIELDS = [
    "type",
    "schema",
    "required",
    "default",
    "readonly",
    "valueschema",
    "keyschema",
    "regex",
    "minlength",
    "maxlength",
    "min",
    "max",
    "allowed",
    "items",
    "empty",
    "nullable",
]


[docs]def EveField(name, schema, klass): if isinstance(klass, param.ClassSelector): return klass if not isinstance(klass, type): return klass schema = {k: v for k, v in schema.items() if k in SUPPORTED_SCHEMA_FIELDS} validator = Validator({"value": schema}) def _validate(self, val): if self.allow_None and val is None: return if self.owner is None: return if self.name is None: return if not validator.validate({"value": val}): sep = "\n" errors = [ f"Cannot set \'{self.owner.name}.{self.name}\' to \'{val}\' of type {type(val)}." ] for k, v in validator.errors.items(): errors.append(f"{k} {v}") if len(errors) <= 2: sep = ". " raise ValueError(" ".join(errors)) params = { "_validate": _validate, } return type(f"Eve{name.title()}{klass.__name__}Field", (klass, ), params)