aboutsummaryrefslogtreecommitdiffstats
path: root/backend/models
diff options
context:
space:
mode:
Diffstat (limited to 'backend/models')
-rw-r--r--backend/models/form.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/backend/models/form.py b/backend/models/form.py
index eac0b63..7e1a673 100644
--- a/backend/models/form.py
+++ b/backend/models/form.py
@@ -1,7 +1,7 @@
import typing as t
import httpx
-from pydantic import BaseModel, Field, validator
+from pydantic import BaseModel, Field, root_validator, validator
from pydantic.error_wrappers import ErrorWrapper, ValidationError
from backend.constants import FormFeatures, WebHook
@@ -34,6 +34,7 @@ class Form(BaseModel):
description: str
submitted_text: t.Optional[str] = None
webhook: _WebHook = None
+ discord_role: t.Optional[str]
class Config:
allow_population_by_field_name = True
@@ -47,11 +48,27 @@ class Form(BaseModel):
if any(v not in allowed_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:
- raise ValueError("COLLECT_EMAIL feature require REQUIRES_LOGIN feature.")
+ if FormFeatures.REQUIRES_LOGIN not in value:
+ if FormFeatures.COLLECT_EMAIL in value:
+ raise ValueError(
+ "COLLECT_EMAIL feature require REQUIRES_LOGIN feature."
+ )
+
+ if FormFeatures.ASSIGN_ROLE in value:
+ raise ValueError("ASSIGN_ROLE feature require REQUIRES_LOGIN feature.")
return value
+ @root_validator
+ def validate_role(cls, values: dict[str, t.Any]) -> t.Optional[dict[str, t.Any]]:
+ """Validates does Discord role provided when flag provided."""
+ if FormFeatures.ASSIGN_ROLE.value in values.get("features", []) and not values.get("discord_role"): # noqa
+ raise ValueError(
+ "discord_role field is required when ASSIGN_ROLE flag is provided."
+ )
+
+ return values
+
def dict(self, admin: bool = True, **kwargs: t.Any) -> dict[str, t.Any]:
"""Wrapper for original function to exclude private data for public access."""
data = super().dict(**kwargs)