Skip to content

Commit

Permalink
Add rebellion rate api
Browse files Browse the repository at this point in the history
  • Loading branch information
ajparsons committed Dec 17, 2024
1 parent 76b3e14 commit eb59887
Showing 1 changed file with 55 additions and 1 deletion.
56 changes: 55 additions & 1 deletion src/votes/views/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ninja.security import HttpBearer
from pydantic import BaseModel

from ..consts import PolicyStatus
from ..consts import PolicyStatus, RebellionPeriodType
from ..models import (
Agreement,
Division,
Expand All @@ -20,6 +20,7 @@
PolicyAgreementLink,
PolicyDivisionLink,
PolicyGroup,
RebellionRate,
Update,
Vote,
VoteDistribution,
Expand Down Expand Up @@ -144,6 +145,13 @@ class Meta:
fields = "__all__"


class RebellionRateSchema(ModelSchema):
class Meta:
model = RebellionRate
fields = "__all__"
exclude = ["id"]


class PairedPolicySchema(BaseModel):
policy: PolicySchema
own_distribution: VoteDistributionSchema
Expand Down Expand Up @@ -324,3 +332,49 @@ def get_all_policy_reports(request: HttpRequest):
@api.get("/twfy-compatible/popolo/{policy_id}.json", response=PopoloPolicy)
def get_popolo_policy(request: HttpRequest, policy_id: int):
return PopoloPolicy.from_policy_id(policy_id)


@api.get(
"/party_alignment/{period_slug}/{period_number}.json",
response=list[RebellionRateSchema],
)
def get_party_alignment_all(
request: HttpRequest, period_slug: Literal["year", "period"], period_number: int
):
match period_slug:
case "year":
period_int = RebellionPeriodType.YEAR
case "all_time":
period_int = RebellionPeriodType.ALLTIME
case "period":
period_int = RebellionPeriodType.PERIOD
case _:
raise ValueError(f"Unknown period slug {period_slug}")

return RebellionRate.objects.filter(
period_type=period_int, period_number=period_number
).order_by("person_id")


@api.get(
"/party_alignment/person/{person_id}/{period_slug}.json",
response=list[RebellionRateSchema],
)
def get_party_alignment(
request: HttpRequest,
person_id: str,
period_slug: Literal["all_time", "year", "period"],
):
match period_slug:
case "year":
period_int = RebellionPeriodType.YEAR
case "all_time":
period_int = RebellionPeriodType.ALLTIME
case "period":
period_int = RebellionPeriodType.PERIOD
case _:
raise ValueError(f"Unknown period slug {period_slug}")

return RebellionRate.objects.filter(
period_type=period_int, person_id=person_id
).order_by("period_number")

0 comments on commit eb59887

Please sign in to comment.