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

eventType() EventType

Event Type

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
eventType() EventType

Event Type

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
eventType() EventType

Event Type

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
eventType() EventType

Event Type

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

banner: list[Imageref] | None = None
countdown_pause_time: str | None = None
duration: str
eventType() EventType

Event Type

formal_name: str | None = None
id: str
location: Location | None = None
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

data: EventData | list[EventData] | None
id: str | None = None
token: str | None = None
type: EventType
class cfutils.icpctools.event_feed.EventData

Bases: ABC

abstract eventType() EventType

Event Type

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

eventType() EventType

Event Type

icpc_id: str
id: str
location: Location | None = None
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
eventType() EventType

Event Type

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

eventType() EventType

Event Type

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

compiler: Command | None = None
entry_point_name: str | None = None
entry_point_required: bool
eventType() EventType

Event Type

extensions: list[str]
id: str
name: str
runner: Command | None = None
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
country_flag: list[Imageref] | None = None
eventType() EventType

Event Type

formal_name: str | None = None
icpc_id: str | None = None
id: str
location: Location | None = None
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
eventType() EventType

Event Type

icpc_id: str | None = None
id: str
name: str
photo: list[Imageref] | None = None
role: Role
sex: SexEnum | None = None
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
eventType() EventType

Event Type

id: str
label: str
max_score: float | None = None
name: str
ordinal: int
package: list[Fileref] | None = None
rgb: str | None = None
statement: list[Fileref] | 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
eventType() EventType

Event Type

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
eventType() EventType

Event Type

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
eventType() EventType

Event Type

files: list[Fileref]
id: str
language_id: str
problem_id: str
reaction: list[Fileref] | None = None
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

audio: list[Fileref] | None = None
backup: list[Fileref] | None = None
desktop: list[Fileref] | None = None
display_name: str | None = None
eventType() EventType

Event Type

group_ids: list[str] | None = None
hidden: bool | None = None
icpc_id: str | None = None
id: str
key_log: list[Fileref] | None = None
location: Location1 | None = None
name: str
organization_id: str | None = None
photo: list[Imageref] | None = None
tool_data: list[Fileref] | None = None
video: list[Fileref] | None = None
webcam: list[Fileref] | 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: