cfutils.icpctools package
Submodules
cfutils.icpctools.event_feed module
- class cfutils.icpctools.event_feed.Account(id: str, username: str, type: cfutils.icpctools.event_feed.AccountTypeEnum | None, password: str | None = None, name: str | None = None, ip: str | None = None, team_id: str | None = None, person_id: str | None = None)
Bases:
EventData
- id: str
- ip: str | None = None
- name: str | None = None
- password: str | None = None
- person_id: str | None = None
- team_id: str | None = None
- type: AccountTypeEnum | None
- username: str
- class cfutils.icpctools.event_feed.AccountTypeEnum(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- admin = 'admin'
- analyst = 'analyst'
- judge = 'judge'
- staff = 'staff'
- team = 'team'
- class cfutils.icpctools.event_feed.Award(id: str, citation: str, team_ids: list[str])
Bases:
EventData
- citation: str
- id: str
- team_ids: list[str]
- class cfutils.icpctools.event_feed.Clarification(id: str, text: str, time: str, contest_time: str, from_team_id: str | None = None, to_team_id: str | None = None, reply_to_id: str | None = None, problem_id: str | None = None)
Bases:
EventData
- contest_time: str
- from_team_id: str | None = None
- id: str
- problem_id: str | None = None
- reply_to_id: str | None = None
- text: str
- time: str
- to_team_id: str | None = None
- class cfutils.icpctools.event_feed.Command(command: str, args: str | None = None, version: str | None = None, version_command: str | None = None)
Bases:
object
- args: str | None = None
- command: str
- version: str | None = None
- version_command: str | None = None
- class cfutils.icpctools.event_feed.Commentary(id: str, time: str, contest_time: str, message: str, team_ids: list[str] | None, problem_ids: list[str] | None)
Bases:
EventData
- contest_time: str
- id: str
- message: str
- problem_ids: list[str] | None
- team_ids: list[str] | None
- time: str
- class cfutils.icpctools.event_feed.Contest(id: str, name: str, duration: str, scoreboard_type: cfutils.icpctools.event_feed.ScoreboardType, formal_name: str | None = None, start_time: str | None = None, countdown_pause_time: str | None = None, scoreboard_freeze_duration: str | None = None, penalty_time: int | None = None, banner: list[cfutils.icpctools.event_feed.Imageref] | None = None, logo: list[cfutils.icpctools.event_feed.Imageref] | None = None, location: cfutils.icpctools.event_feed.Location | None = None)
Bases:
EventData
- countdown_pause_time: str | None = None
- duration: str
- formal_name: str | None = None
- id: str
- name: str
- penalty_time: int | None = None
- scoreboard_freeze_duration: str | None = None
- scoreboard_type: ScoreboardType
- start_time: str | None = None
- class cfutils.icpctools.event_feed.Event(type: cfutils.icpctools.event_feed.EventType, data: cfutils.icpctools.event_feed.EventData | list[cfutils.icpctools.event_feed.EventData] | NoneType, id: str | None = None, token: str | None = None)
Bases:
object
- id: str | None = None
- token: str | None = None
- class cfutils.icpctools.event_feed.EventData
Bases:
ABC
- class cfutils.icpctools.event_feed.EventType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- accounts = 'accounts'
- awards = 'awards'
- clarifications = 'clarifications'
- commentary = 'commentary'
- contest = 'contests'
- event_feed = 'event-feed'
- groups = 'groups'
- judgement_types = 'judgement-types'
- judgements = 'judgements'
- languages = 'languages'
- organizations = 'organizations'
- persons = 'persons'
- problems = 'problems'
- runs = 'runs'
- scoreboard = 'scoreboard'
- state = 'state'
- submissions = 'submissions'
- teams = 'teams'
- class cfutils.icpctools.event_feed.Fileref(href: str, mime: str, hash: str | None = None, filename: str | None = None, width: int | None = None, height: int | None = None)
Bases:
object
- filename: str | None = None
- hash: str | None = None
- height: int | None = None
- href: str
- mime: str
- width: int | None = None
- class cfutils.icpctools.event_feed.Group(id: str, name: str, icpc_id: str, type: str | None = None, location: cfutils.icpctools.event_feed.Location | None = None)
Bases:
EventData
- icpc_id: str
- id: str
- name: str
- type: str | None = None
- class cfutils.icpctools.event_feed.Imageref(href: str, mime: str, hash: str | None = None, filename: str | None = None, width: int | None = None, height: int | None = None)
Bases:
Fileref
- class cfutils.icpctools.event_feed.Judgement(id: str, submission_id: str, start_time: str, start_contest_time: str, end_time: str | None, end_contest_time: str | None, judgement_type_id: cfutils.icpctools.event_feed.JudgementTypeId | None = None, max_run_time: float | None = None)
Bases:
EventData
- end_contest_time: str | None
- end_time: str | None
- id: str
- judgement_type_id: JudgementTypeId | None = None
- max_run_time: float | None = None
- start_contest_time: str
- start_time: str
- submission_id: str
- class cfutils.icpctools.event_feed.JudgementType(id: cfutils.icpctools.event_feed.JudgementTypeId, name: str, solved: bool, penalty: bool | None = None)
Bases:
EventData
- id: JudgementTypeId
- name: str
- penalty: bool | None = None
- solved: bool
- class cfutils.icpctools.event_feed.JudgementTypeId(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- AC = 'AC'
- APE = 'APE'
- CE = 'CE'
- CS = 'CS'
- CTL = 'CTL'
- EO = 'EO'
- IF = 'IF'
- ILE = 'ILE'
- IO = 'IO'
- JE = 'JE'
- MLE = 'MLE'
- NO = 'NO'
- OLE = 'OLE'
- PE = 'PE'
- RCO = 'RCO'
- RE = 'RE'
- REO = 'REO'
- RIO = 'RIO'
- RNO = 'RNO'
- RPE = 'RPE'
- RTE = 'RTE'
- RWA = 'RWA'
- SE = 'SE'
- SV = 'SV'
- TCO = 'TCO'
- TEO = 'TEO'
- TIO = 'TIO'
- TLE = 'TLE'
- TNO = 'TNO'
- TPE = 'TPE'
- TWA = 'TWA'
- WA = 'WA'
- WTL = 'WTL'
- class cfutils.icpctools.event_feed.Language(id: str, name: str, entry_point_required: bool, extensions: list[str], entry_point_name: str | None = None, compiler: cfutils.icpctools.event_feed.Command | None = None, runner: cfutils.icpctools.event_feed.Command | None = None)
Bases:
EventData
- entry_point_name: str | None = None
- entry_point_required: bool
- extensions: list[str]
- id: str
- name: str
- class cfutils.icpctools.event_feed.Location(latitude: float, longitude: float)
Bases:
object
- latitude: float
- longitude: float
- class cfutils.icpctools.event_feed.Location1(x: float, y: float, rotation: float)
Bases:
object
- rotation: float
- x: float
- y: float
- class cfutils.icpctools.event_feed.Mime(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- image_jpeg = 'image/jpeg'
- image_png = 'image/png'
- image_svg_xml = 'image/svg+xml'
- class cfutils.icpctools.event_feed.Organization(id: str, name: str, icpc_id: str | None = None, formal_name: str | None = None, country: str | None = None, country_flag: list[cfutils.icpctools.event_feed.Imageref] | None = None, url: str | None = None, twitter_hashtag: str | None = None, twitter_account: str | None = None, location: cfutils.icpctools.event_feed.Location | None = None, logo: list[cfutils.icpctools.event_feed.Imageref] | None = None)
Bases:
EventData
- country: str | None = None
- formal_name: str | None = None
- icpc_id: str | None = None
- id: str
- name: str
- twitter_account: str | None = None
- twitter_hashtag: str | None = None
- url: str | None = None
- class cfutils.icpctools.event_feed.Person(id: str, name: str, role: cfutils.icpctools.event_feed.Role, team_ids: list[str] | None = None, icpc_id: str | None = None, title: str | None = None, email: str | None = None, sex: cfutils.icpctools.event_feed.SexEnum | None = None, photo: list[cfutils.icpctools.event_feed.Imageref] | None = None)
Bases:
EventData
- email: str | None = None
- icpc_id: str | None = None
- id: str
- name: str
- team_ids: list[str] | None = None
- title: str | None = None
- class cfutils.icpctools.event_feed.Problem(id: str, label: str, name: str, ordinal: int, test_data_count: int, uuid: str | None = None, rgb: str | None = None, color: str | None = None, time_limit: float | None = None, max_score: float | None = None, package: list[cfutils.icpctools.event_feed.Fileref] | None = None, statement: list[cfutils.icpctools.event_feed.Fileref] | None = None)
Bases:
EventData
- color: str | None = None
- id: str
- label: str
- max_score: float | None = None
- name: str
- ordinal: int
- rgb: str | None = None
- test_data_count: int
- time_limit: float | None = None
- uuid: str | None = None
- class cfutils.icpctools.event_feed.Role(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- coach = 'coach'
- contestant = 'contestant'
- other = 'other'
- staff = 'staff'
- class cfutils.icpctools.event_feed.Run(id: str, judgement_id: str, ordinal: int, judgement_type_id: cfutils.icpctools.event_feed.JudgementTypeId, time: str, contest_time: str, run_time: float | None = None)
Bases:
EventData
- contest_time: str
- id: str
- judgement_id: str
- judgement_type_id: JudgementTypeId
- ordinal: int
- run_time: float | None = None
- time: str
- class cfutils.icpctools.event_feed.ScoreboardType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- pass_fail = 'pass-fail'
- score = 'score'
- class cfutils.icpctools.event_feed.SexEnum(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- female = 'female'
- male = 'male'
- class cfutils.icpctools.event_feed.State(started: str | None, ended: str | None, finalized: str | None, end_of_updates: str | None, frozen: str | None = None, thawed: str | None = None)
Bases:
EventData
- end_of_updates: str | None
- ended: str | None
- finalized: str | None
- frozen: str | None = None
- started: str | None
- thawed: str | None = None
- class cfutils.icpctools.event_feed.Submission(id: str, language_id: str, problem_id: str, team_id: str, time: str, contest_time: str, files: list[cfutils.icpctools.event_feed.Fileref], entry_point: str | None = None, reaction: list[cfutils.icpctools.event_feed.Fileref] | None = None)
Bases:
EventData
- contest_time: str
- entry_point: str | None = None
- id: str
- language_id: str
- problem_id: str
- team_id: str
- time: str
- class cfutils.icpctools.event_feed.Team(id: str, name: str, icpc_id: str | None = None, display_name: str | None = None, organization_id: str | None = None, group_ids: list[str] | None = None, hidden: bool | None = None, location: cfutils.icpctools.event_feed.Location1 | None = None, photo: list[cfutils.icpctools.event_feed.Imageref] | None = None, video: list[cfutils.icpctools.event_feed.Fileref] | None = None, backup: list[cfutils.icpctools.event_feed.Fileref] | None = None, key_log: list[cfutils.icpctools.event_feed.Fileref] | None = None, tool_data: list[cfutils.icpctools.event_feed.Fileref] | None = None, desktop: list[cfutils.icpctools.event_feed.Fileref] | None = None, webcam: list[cfutils.icpctools.event_feed.Fileref] | None = None, audio: list[cfutils.icpctools.event_feed.Fileref] | None = None)
Bases:
EventData
- display_name: str | None = None
- group_ids: list[str] | None = None
- icpc_id: str | None = None
- id: str
- name: str
- organization_id: str | None = None
cfutils.icpctools.feed_generator module
- class cfutils.icpctools.feed_generator.CFContestConfig(freezeDurationSeconds: int, include_virtual: bool = False, include_out_of_comp: bool = False, strict_mode: bool = False)
Bases:
object
- freezeDurationSeconds: int
- getGroups(team: ContestTeam) list[str]
List of groups that a particular team is part of. Must be a subset of self.groups.
- property groups: list[str]
List of team groups. A team can be part of multiple groups. For example, groups could contain a list of institutes, and a list of batches of the participants.
return ["IIIT-H", "IIIT-D", "UG-1", "UG-2"]
- include_out_of_comp: bool = False
Include ‘out of competition’ participants
- include_virtual: bool = False
Include virtual participants
- strict_mode: bool = False
Raise an exception on invalid submissions
- exception cfutils.icpctools.feed_generator.EventFeedError
Bases:
Exception
- class cfutils.icpctools.feed_generator.EventFeedFromCFContest(*, config: CFContestConfig)
Bases:
object
- generate(*, contest: Contest, problems: list[Problem], ranklist: list[RanklistRow], submissions: list[Submission]) list[str]
Generate event feed JSON for the ICPC resolver tool.
- Caveats:
This ignores the true submission times, and instead assumes a start time of 0 (epoch). So the generated feed may not work for tools other than the resolver.
- Parameters:
contest – CF Contest object. Usually obtained using contest.standings.
problems – CF Problem list. Usually obtained using contest.standings.
ranklist – CF ranklist row list. Usually obtained using contest.standings.
submissions – CF submission list. Usually obtained using contest.status.
- Returns:
A list of stringified JSON events.
- Raises:
EventFeedError – submission by a team not in the ranklist
EventFeedError – team is neither a CF team, nor a ghost, nor a CF user.