Coverage for app / schemas / agent.py: 100%
40 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-04 06:09 -0500
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-04 06:09 -0500
1from datetime import datetime
2from typing import Optional, List
3from pydantic import BaseModel, Field
6class AgentBase(BaseModel):
7 name: str = Field(..., min_length=1, max_length=50)
8 description: Optional[str] = Field(None, max_length=500)
9 avatar_url: Optional[str] = Field(None, max_length=500)
12class AgentCreate(AgentBase):
13 pass
16class AgentUpdate(BaseModel):
17 description: Optional[str] = Field(None, max_length=500)
18 avatar_url: Optional[str] = Field(None, max_length=500)
21class AgentResponse(AgentBase):
22 id: str
23 karma: int
24 created_at: datetime
26 class Config:
27 from_attributes = True
30class AgentRegisterResponse(BaseModel):
31 agent: AgentResponse
32 api_key: str # Only returned once at registration
35class AgentProfileResponse(AgentResponse):
36 campaigns_advocated: int = 0
37 recent_advocacies: List["AdvocacySummary"] = []
40class AdvocacySummary(BaseModel):
41 campaign_id: str
42 campaign_title: str
43 statement: Optional[str]
44 created_at: datetime
46 class Config:
47 from_attributes = True
50class LeaderboardEntry(BaseModel):
51 rank: int
52 agent: AgentResponse
53 campaigns_advocated: int
56class LeaderboardResponse(BaseModel):
57 entries: List[LeaderboardEntry]
58 total: int
59 period: str # "all_time", "this_month", "this_week"
62# Update forward reference
63AgentProfileResponse.model_rebuild()