wip: update election default params

master
Pierre-Louis Guhur 10 months ago
parent 6acc88a832
commit 1f54803f1c

@ -204,48 +204,24 @@ class ElectionCreate(ElectionBase):
return candidates
class ElectionUpdate(ElectionBase):
class ElectionUpdate:
ref: str
grades: list[GradeUpdate] = Field(..., min_items=2, max_items=settings.max_grades)
num_voters: int = Field(0, ge=0, le=settings.max_voters)
force_close: bool = False
candidates: list[CandidateUpdate] = Field(
..., min_items=2, max_items=settings.max_candidates
)
@validator("hide_results", "num_voters", "date_end")
def can_finish(cls, value: str, values: dict[str, t.Any], field: ModelField):
"""
Enforce that the election is finish-able
"""
if "hide_results" in values:
hide_results = values["hide_results"]
elif field.name == "hide_results":
hide_results = value
else:
return value
if "num_voters" in values:
num_voters = values["num_voters"]
elif field.name == "num_voters":
num_voters = value
else:
return value
if "date_end" in values:
date_end = values["date_end"]
elif field.name == "date_end":
date_end = value
else:
return value
if hide_results and num_voters == 0 and date_end is None:
raise ArgumentsSchemaError("This election can not end")
return value
name: Name | None = None
description: Description | None = None
date_start: datetime | int | str | None = None
date_end: datetime | int | str | None = None
hide_results: bool | None = None
restricted: bool | None = None
grades: list[GradeUpdate] | None = None
num_voters: int | None = None
force_close: bool | None = None
candidates: list[CandidateUpdate] | None = None
@validator("grades")
def all_grades_have_unique_values_and_names(cls, grades: list[GradeBase]):
def all_grades_have_unique_values_and_names(cls, grades: list[GradeBase] | None):
if grades is None:
return grades
grades = [grade for grade in grades if grade.id is not None]
values = [g.value for g in grades]
@ -264,8 +240,11 @@ class ElectionUpdate(ElectionBase):
@validator("candidates")
def all_candidates_have_unique_names_and_ids(
cls, candidates: list[CandidateUpdate]
cls, candidates: list[CandidateUpdate] | None
):
if candidates is None:
return candidates
names = [c.name for c in candidates]
if len(set(names)) != len(candidates):
raise ArgumentsSchemaError("At least two candidates have the same name")

Loading…
Cancel
Save