diff options
author | 2020-12-01 20:56:49 +0000 | |
---|---|---|
committer | 2020-12-01 20:56:49 +0000 | |
commit | 0e34c3bd42bba9a3274ea7f83cdce9b0b828db14 (patch) | |
tree | 1d687734f79effb728f27a0b2dd24edc7d7ae910 /backend/models/form.py | |
parent | Merge pull request #12 from python-discord/ks123/admin-authentication (diff) | |
parent | Ignore too long line for if statement (diff) |
Merge pull request #11 from python-discord/ks123/models
Diffstat (limited to 'backend/models/form.py')
-rw-r--r-- | backend/models/form.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/backend/models/form.py b/backend/models/form.py new file mode 100644 index 0000000..d0f0a3c --- /dev/null +++ b/backend/models/form.py @@ -0,0 +1,27 @@ +import typing as t + +from pydantic import BaseModel, Field, validator + +from backend.constants import FormFeatures +from backend.models import Question + + +class Form(BaseModel): + """Schema model for form.""" + + id: str = Field(alias="_id") + features: t.List[str] + questions: t.List[Question] + + @validator("features") + def validate_features(self, value: t.List[str]) -> t.Optional[t.List[str]]: + """Validates is all features in allowed list.""" + # Uppercase everything to avoid mixed case in DB + value = [v.upper() for v in value] + if not all(v in FormFeatures.__members__.values() for v in value): + raise ValueError("Form features list contains one or more invalid values.") + + if FormFeatures.COLLECT_EMAIL in value and FormFeatures.REQUIRES_LOGIN not in value: # noqa + raise ValueError("COLLECT_EMAIL feature require REQUIRES_LOGIN feature.") + + return value |