From 348b53fe9c16068f86b0afe37bd31e959de81ae6 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Wed, 18 May 2022 23:12:29 +0100 Subject: WIP trying out validators --- synapse/config/validators.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 synapse/config/validators.py (limited to 'synapse/config/validators.py') diff --git a/synapse/config/validators.py b/synapse/config/validators.py new file mode 100644 index 0000000000..2faae0cf4a --- /dev/null +++ b/synapse/config/validators.py @@ -0,0 +1,31 @@ +import re +from typing import Type + +from pydantic import BaseModel +from pydantic.fields import ModelField + + +def string_length_between(lower: int, upper: int): + def validator(cls: Type[BaseModel], value: str, field: ModelField) -> str: + print(f"validate {lower=} {upper=} {value=}") + if lower <= len(value) <= upper: + print("ok") + return value + print("bad") + raise ValueError( + f"{field.name} must be between {lower} and {upper} characters long" + ) + + return validator + + +def string_contains_characters(charset: str): + def validator(cls: Type[BaseModel], value: str, field: ModelField) -> str: + pattern = f"^[{charset}]*$" + if re.match(pattern, value): + return value + raise ValueError( + f"{field.name} must be only contain the characters {charset}" + ) + + return validator -- cgit 1.5.1