summary refs log tree commit diff
path: root/synapse/config/validators.py
diff options
context:
space:
mode:
authorDavid Robertson <davidr@element.io>2022-05-18 23:12:29 +0100
committerDavid Robertson <davidr@element.io>2022-05-19 10:29:27 +0100
commit348b53fe9c16068f86b0afe37bd31e959de81ae6 (patch)
tree8b5f4dd3e6ec96c010d24c70d04114f6be6b31a0 /synapse/config/validators.py
parentRequire and lock `pydantic` (diff)
downloadsynapse-348b53fe9c16068f86b0afe37bd31e959de81ae6.tar.xz
WIP trying out validators
Diffstat (limited to 'synapse/config/validators.py')
-rw-r--r--synapse/config/validators.py31
1 files changed, 31 insertions, 0 deletions
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