ctfy.sdk.resources.teams
client.teams — public team discovery + profile reads.
1"""``client.teams`` — public team discovery + profile reads.""" 2 3from __future__ import annotations 4 5import builtins 6 7from ctfy.sdk._helpers import _extract_items, _raise_for_status 8from ctfy.sdk.base import BaseHttpClient 9from ctfy.server.models import ProfileStats, TeamAchievement, TeamDetail, TeamInfo 10 11 12class TeamsResource: 13 """Public team list, detail, profile visualizations and unlock feed.""" 14 15 def __init__(self, http: BaseHttpClient) -> None: 16 self._http = http 17 18 def list(self, offset: int = 0, limit: int = 50) -> builtins.list[TeamInfo]: 19 resp = self._http.request("GET", "/teams", params={"offset": offset, "limit": limit}) 20 _raise_for_status(resp) 21 return _extract_items(resp.json(), TeamInfo) 22 23 def get(self, team_id: str) -> TeamDetail: 24 resp = self._http.request("GET", f"/teams/{team_id}") 25 _raise_for_status(resp) 26 return TeamDetail.model_validate(resp.json()) 27 28 def profile_stats(self, team_id: str) -> ProfileStats: 29 """Activity calendar, per-tag radar, difficulty bar, solve trend 30 — every visualization on the team profile page.""" 31 resp = self._http.request("GET", f"/teams/{team_id}/profile-stats") 32 _raise_for_status(resp) 33 return ProfileStats.model_validate(resp.json()) 34 35 def achievements( 36 self, team_id: str, offset: int = 0, limit: int = 50 37 ) -> builtins.list[TeamAchievement]: 38 """The team's public unlock list (secret badges hidden).""" 39 resp = self._http.request( 40 "GET", 41 f"/teams/{team_id}/achievements", 42 params={"offset": offset, "limit": limit}, 43 ) 44 _raise_for_status(resp) 45 return [TeamAchievement.model_validate(a) for a in resp.json()["items"]]
class
TeamsResource:
13class TeamsResource: 14 """Public team list, detail, profile visualizations and unlock feed.""" 15 16 def __init__(self, http: BaseHttpClient) -> None: 17 self._http = http 18 19 def list(self, offset: int = 0, limit: int = 50) -> builtins.list[TeamInfo]: 20 resp = self._http.request("GET", "/teams", params={"offset": offset, "limit": limit}) 21 _raise_for_status(resp) 22 return _extract_items(resp.json(), TeamInfo) 23 24 def get(self, team_id: str) -> TeamDetail: 25 resp = self._http.request("GET", f"/teams/{team_id}") 26 _raise_for_status(resp) 27 return TeamDetail.model_validate(resp.json()) 28 29 def profile_stats(self, team_id: str) -> ProfileStats: 30 """Activity calendar, per-tag radar, difficulty bar, solve trend 31 — every visualization on the team profile page.""" 32 resp = self._http.request("GET", f"/teams/{team_id}/profile-stats") 33 _raise_for_status(resp) 34 return ProfileStats.model_validate(resp.json()) 35 36 def achievements( 37 self, team_id: str, offset: int = 0, limit: int = 50 38 ) -> builtins.list[TeamAchievement]: 39 """The team's public unlock list (secret badges hidden).""" 40 resp = self._http.request( 41 "GET", 42 f"/teams/{team_id}/achievements", 43 params={"offset": offset, "limit": limit}, 44 ) 45 _raise_for_status(resp) 46 return [TeamAchievement.model_validate(a) for a in resp.json()["items"]]
Public team list, detail, profile visualizations and unlock feed.
29 def profile_stats(self, team_id: str) -> ProfileStats: 30 """Activity calendar, per-tag radar, difficulty bar, solve trend 31 — every visualization on the team profile page.""" 32 resp = self._http.request("GET", f"/teams/{team_id}/profile-stats") 33 _raise_for_status(resp) 34 return ProfileStats.model_validate(resp.json())
Activity calendar, per-tag radar, difficulty bar, solve trend — every visualization on the team profile page.
def
achievements( self, team_id: str, offset: int = 0, limit: int = 50) -> list[ctfy.server.models.TeamAchievement]:
36 def achievements( 37 self, team_id: str, offset: int = 0, limit: int = 50 38 ) -> builtins.list[TeamAchievement]: 39 """The team's public unlock list (secret badges hidden).""" 40 resp = self._http.request( 41 "GET", 42 f"/teams/{team_id}/achievements", 43 params={"offset": offset, "limit": limit}, 44 ) 45 _raise_for_status(resp) 46 return [TeamAchievement.model_validate(a) for a in resp.json()["items"]]
The team's public unlock list (secret badges hidden).