xcpcio 0.58.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xcpcio might be problematic. Click here for more details.

xcpcio/__init__.py ADDED
@@ -0,0 +1,5 @@
1
+ from . import constants, types
2
+
3
+ __version__ = "0.58.2"
4
+
5
+ __all__ = [constants, types]
xcpcio/constants.py ADDED
@@ -0,0 +1,66 @@
1
+ SUBMISSION_STATUS_PENDING = "PENDING"
2
+ SUBMISSION_STATUS_WAITING = "WAITING"
3
+ SUBMISSION_STATUS_PREPARING = "PREPARING"
4
+ SUBMISSION_STATUS_COMPILING = "COMPILING"
5
+ SUBMISSION_STATUS_RUNNING = "RUNNING"
6
+ SUBMISSION_STATUS_JUDGING = "JUDGING"
7
+ SUBMISSION_STATUS_FROZEN = "FROZEN"
8
+
9
+ SUBMISSION_STATUS_ACCEPTED = "ACCEPTED"
10
+ SUBMISSION_STATUS_CORRECT = "CORRECT"
11
+ SUBMISSION_STATUS_PARTIALLY_CORRECT = "PARTIALLY_CORRECT"
12
+
13
+ SUBMISSION_STATUS_REJECTED = "REJECTED"
14
+ SUBMISSION_STATUS_WRONG_ANSWER = "WRONG_ANSWER"
15
+ SUBMISSION_STATUS_INCORRECT = "INCORRECT"
16
+
17
+ SUBMISSION_STATUS_NO_OUTPUT = "NO_OUTPUT"
18
+
19
+ SUBMISSION_STATUS_COMPILATION_ERROR = "COMPILATION_ERROR"
20
+ SUBMISSION_STATUS_PRESENTATION_ERROR = "PRESENTATION_ERROR"
21
+
22
+ SUBMISSION_STATUS_RUNTIME_ERROR = "RUNTIME_ERROR"
23
+ SUBMISSION_STATUS_TIME_LIMIT_EXCEEDED = "TIME_LIMIT_EXCEEDED"
24
+ SUBMISSION_STATUS_MEMORY_LIMIT_EXCEEDED = "MEMORY_LIMIT_EXCEEDED"
25
+ SUBMISSION_STATUS_OUTPUT_LIMIT_EXCEEDED = "OUTPUT_LIMIT_EXCEEDED"
26
+ SUBMISSION_STATUS_IDLENESS_LIMIT_EXCEEDED = "IDLENESS_LIMIT_EXCEEDED"
27
+
28
+ SUBMISSION_STATUS_HACKED = "HACKED"
29
+
30
+ SUBMISSION_STATUS_JUDGEMENT_FAILED = "JUDGEMENT_FAILED"
31
+ SUBMISSION_STATUS_CONFIGURATION_ERROR = "CONFIGURATION_ERROR"
32
+ SUBMISSION_STATUS_FILE_ERROR = "FILE_ERROR"
33
+ SUBMISSION_STATUS_SYSTEM_ERROR = "SYSTEM_ERROR"
34
+ SUBMISSION_STATUS_CANCELED = "CANCELED"
35
+ SUBMISSION_STATUS_SKIPPED = "SKIPPED"
36
+
37
+ SUBMISSION_STATUS_SECURITY_VIOLATED = "SECURITY_VIOLATED"
38
+ SUBMISSION_STATUS_DENIAL_OF_JUDGEMENT = "DENIAL_OF_JUDGEMENT"
39
+
40
+ SUBMISSION_STATUS_UNKNOWN = "UNKNOWN"
41
+ SUBMISSION_STATUS_UNDEFINED = "UNDEFINED"
42
+
43
+ CALCULATION_OF_PENALTY_IN_MINUTES = "in_minutes"
44
+ CALCULATION_OF_PENALTY_IN_SECONDS = "in_seconds"
45
+ CALCULATION_OF_PENALTY_ACCUMULATE_IN_SECONDS_AND_FINALLY_TO_THE_MINUTE = (
46
+ "accumulate_in_seconds_and_finally_to_the_minute"
47
+ )
48
+
49
+ TIME_UNIT_SECOND = "second"
50
+ TIME_UNIT_MILLISECOND = "millisecond"
51
+ TIME_UNIT_MICROSECOND = "microsecond"
52
+ TIME_UNIT_NANOSECOND = "nanosecond"
53
+
54
+ FULL_STATUS_TIME_DISPLAY = {
55
+ SUBMISSION_STATUS_CORRECT.lower(): True,
56
+ SUBMISSION_STATUS_INCORRECT.lower(): True,
57
+ SUBMISSION_STATUS_PENDING.lower(): True,
58
+ }
59
+
60
+ TEAM_TYPE_OFFICIAL = "official"
61
+ TEAM_TYPE_UNOFFICIAL = "unofficial"
62
+ TEAM_TYPE_GIRL = "girl"
63
+
64
+ TEAM_TYPE_ZH_CN_OFFICIAL = "正式队伍"
65
+ TEAM_TYPE_ZH_CN_UNOFFICIAL = "打星队伍"
66
+ TEAM_TYPE_ZH_CN_GIRL = "女队"
xcpcio/types.py ADDED
@@ -0,0 +1,204 @@
1
+ from typing import Dict, List, Literal, Optional, Union
2
+
3
+ from pydantic import BaseModel, Field, RootModel
4
+
5
+ from . import constants
6
+
7
+ CalculationOfPenalty = Literal[
8
+ constants.CALCULATION_OF_PENALTY_IN_SECONDS,
9
+ constants.CALCULATION_OF_PENALTY_IN_MINUTES,
10
+ constants.CALCULATION_OF_PENALTY_ACCUMULATE_IN_SECONDS_AND_FINALLY_TO_THE_MINUTE,
11
+ ]
12
+ TimeUnit = Literal[
13
+ constants.TIME_UNIT_SECOND,
14
+ constants.TIME_UNIT_MILLISECOND,
15
+ constants.TIME_UNIT_MICROSECOND,
16
+ constants.TIME_UNIT_NANOSECOND,
17
+ ]
18
+ SubmissionStatus = Literal[
19
+ constants.SUBMISSION_STATUS_PENDING,
20
+ constants.SUBMISSION_STATUS_WAITING,
21
+ constants.SUBMISSION_STATUS_PREPARING,
22
+ constants.SUBMISSION_STATUS_COMPILING,
23
+ constants.SUBMISSION_STATUS_RUNNING,
24
+ constants.SUBMISSION_STATUS_JUDGING,
25
+ constants.SUBMISSION_STATUS_FROZEN,
26
+ #
27
+ constants.SUBMISSION_STATUS_ACCEPTED,
28
+ constants.SUBMISSION_STATUS_CORRECT,
29
+ constants.SUBMISSION_STATUS_PARTIALLY_CORRECT,
30
+ #
31
+ constants.SUBMISSION_STATUS_REJECTED,
32
+ constants.SUBMISSION_STATUS_WRONG_ANSWER,
33
+ constants.SUBMISSION_STATUS_INCORRECT,
34
+ #
35
+ constants.SUBMISSION_STATUS_NO_OUTPUT,
36
+ #
37
+ constants.SUBMISSION_STATUS_COMPILATION_ERROR,
38
+ constants.SUBMISSION_STATUS_PRESENTATION_ERROR,
39
+ #
40
+ constants.SUBMISSION_STATUS_RUNTIME_ERROR,
41
+ constants.SUBMISSION_STATUS_TIME_LIMIT_EXCEEDED,
42
+ constants.SUBMISSION_STATUS_MEMORY_LIMIT_EXCEEDED,
43
+ constants.SUBMISSION_STATUS_OUTPUT_LIMIT_EXCEEDED,
44
+ constants.SUBMISSION_STATUS_IDLENESS_LIMIT_EXCEEDED,
45
+ #
46
+ constants.SUBMISSION_STATUS_HACKED,
47
+ #
48
+ constants.SUBMISSION_STATUS_JUDGEMENT_FAILED,
49
+ constants.SUBMISSION_STATUS_CONFIGURATION_ERROR,
50
+ constants.SUBMISSION_STATUS_FILE_ERROR,
51
+ constants.SUBMISSION_STATUS_SYSTEM_ERROR,
52
+ constants.SUBMISSION_STATUS_CANCELED,
53
+ constants.SUBMISSION_STATUS_SKIPPED,
54
+ #
55
+ constants.SUBMISSION_STATUS_SECURITY_VIOLATED,
56
+ constants.SUBMISSION_STATUS_DENIAL_OF_JUDGEMENT,
57
+ #
58
+ constants.SUBMISSION_STATUS_UNKNOWN,
59
+ constants.SUBMISSION_STATUS_UNDEFINED,
60
+ ]
61
+ ImagePreset = Literal["ICPC", "CCPC", "HUNAN_CPC"]
62
+ MedalPreset = Literal["ccpc", "icpc"]
63
+ BannerMode = Literal["ONLY_BANNER", "ALL"]
64
+ DateTimeISO8601String = str
65
+
66
+
67
+ class Image(BaseModel):
68
+ url: Optional[str] = None
69
+ base64: Optional[str] = None
70
+ type: Optional[Literal["png", "svg", "jpg", "jpeg"]] = None
71
+ preset: Optional[ImagePreset] = None
72
+
73
+
74
+ class Color(BaseModel):
75
+ color: str
76
+ background_color: str
77
+
78
+
79
+ class Reaction(BaseModel):
80
+ url: Optional[str] = None
81
+
82
+
83
+ class Submission(BaseModel):
84
+ id: str = ""
85
+
86
+ team_id: str = ""
87
+ problem_id: int = 0
88
+ timestamp: int = 0 # unit: seconds
89
+ status: SubmissionStatus = constants.SUBMISSION_STATUS_UNKNOWN
90
+
91
+ time: Optional[int] = None
92
+ language: Optional[str] = None
93
+
94
+ is_ignore: Optional[bool] = None
95
+
96
+ reaction: Optional[Reaction] = None
97
+
98
+
99
+ class Submissions(RootModel[List[Submission]]):
100
+ root: List[Submission]
101
+
102
+
103
+ class Team(BaseModel):
104
+ id: str = ""
105
+ name: str = ""
106
+
107
+ organization: str = ""
108
+ group: List[str] = Field(default_factory=list)
109
+ tag: List[str] = Field(default_factory=list)
110
+
111
+ coach: Optional[str] = None
112
+ members: Optional[List[str]] = None
113
+
114
+ badge: Optional[Image] = None
115
+
116
+ location: Optional[str] = None
117
+ icpc_id: Optional[str] = None
118
+
119
+ extra: Dict[str, str] = Field(default_factory=dict)
120
+
121
+ def add_group(self, group: str):
122
+ if group not in self.group:
123
+ self.group.append(group)
124
+
125
+ def remove_group(self, group: str):
126
+ if group in self.group:
127
+ self.group.remove(group)
128
+
129
+
130
+ class Teams(RootModel[List[Team]]):
131
+ pass
132
+
133
+
134
+ class ContestOptions(BaseModel):
135
+ calculation_of_penalty: Optional[CalculationOfPenalty] = None
136
+ submission_timestamp_unit: Optional[TimeUnit] = None
137
+ has_reaction_videos: Optional[bool] = None
138
+ reaction_video_url_template: Optional[str] = None
139
+
140
+
141
+ class Contest(BaseModel):
142
+ contest_name: str = ""
143
+
144
+ start_time: Union[int, DateTimeISO8601String] = 0
145
+ end_time: Union[int, DateTimeISO8601String] = 0
146
+ penalty: int = 20 * 60 # unit: seconds
147
+
148
+ freeze_time: Optional[Union[int, DateTimeISO8601String]] = None
149
+ frozen_time: int = 60 * 60 # unit: seconds
150
+ unfrozen_time: int = 0x3F3F3F3F3F3F3F3F
151
+
152
+ problem_quantity: int = 0
153
+ problem_id: List[str] = Field(default_factory=list)
154
+
155
+ organization: str = "School"
156
+ status_time_display: Optional[Dict[str, bool]] = constants.FULL_STATUS_TIME_DISPLAY
157
+
158
+ badge: Optional[str] = None
159
+ medal: Optional[Union[Dict[str, Dict[str, int]], MedalPreset]] = None
160
+ balloon_color: Optional[List[Color]] = None
161
+
162
+ group: Optional[Dict[str, str]] = None
163
+ tag: Optional[Dict[str, str]] = None
164
+
165
+ logo: Optional[Image] = None
166
+ banner: Optional[Image] = None
167
+ banner_mode: Optional[BannerMode] = None
168
+ board_link: Optional[str] = None
169
+
170
+ version: Optional[str] = None
171
+
172
+ options: ContestOptions = Field(default_factory=ContestOptions)
173
+
174
+ def append_balloon_color(self, color: Color):
175
+ if self.balloon_color is None:
176
+ self.balloon_color = []
177
+ self.balloon_color.append(color)
178
+ return self
179
+
180
+ def fill_problem_id(self):
181
+ self.problem_id = [chr(ord("A") + i) for i in range(self.problem_quantity)]
182
+ return self
183
+
184
+ def fill_balloon_color(self):
185
+ default_balloon_color_list = [
186
+ Color(background_color="rgba(189, 14, 14, 0.7)", color="#fff"),
187
+ Color(background_color="rgba(149, 31, 217, 0.7)", color="#fff"),
188
+ Color(background_color="rgba(16, 32, 96, 0.7)", color="#fff"),
189
+ Color(background_color="rgba(38, 185, 60, 0.7)", color="#000"),
190
+ Color(background_color="rgba(239, 217, 9, 0.7)", color="#000"),
191
+ Color(background_color="rgba(243, 88, 20, 0.7)", color="#fff"),
192
+ Color(background_color="rgba(12, 76, 138, 0.7)", color="#fff"),
193
+ Color(background_color="rgba(156, 155, 155, 0.7)", color="#000"),
194
+ Color(background_color="rgba(4, 154, 115, 0.7)", color="#000"),
195
+ Color(background_color="rgba(159, 19, 236, 0.7)", color="#fff"),
196
+ Color(background_color="rgba(42, 197, 202, 0.7)", color="#000"),
197
+ Color(background_color="rgba(142, 56, 54, 0.7)", color="#fff"),
198
+ Color(background_color="rgba(144, 238, 144, 0.7)", color="#000"),
199
+ Color(background_color="rgba(77, 57, 0, 0.7)", color="#fff"),
200
+ ]
201
+
202
+ self.balloon_color = default_balloon_color_list[: self.problem_quantity]
203
+
204
+ return self
@@ -0,0 +1,21 @@
1
+ Metadata-Version: 2.4
2
+ Name: xcpcio
3
+ Version: 0.58.2
4
+ Summary: xcpcio python lib
5
+ Author-email: Dup4 <hi@dup4.com>
6
+ License-Expression: MIT
7
+ Project-URL: homepage, https://github.com/xcpcio/xcpcio
8
+ Project-URL: documentation, https://github.com/xcpcio/xcpcio
9
+ Project-URL: repository, https://github.com/xcpcio/xcpcio
10
+ Keywords: xcpcio
11
+ Classifier: Topic :: Software Development :: Build Tools
12
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ Requires-Dist: pydantic>=2.11.7
20
+
21
+ # xcpcio-python
@@ -0,0 +1,7 @@
1
+ xcpcio/__init__.py,sha256=TZ5m7V_Fl_4uZNbCflRYZu28WcaKpC8OIHOgpAN9jNo,85
2
+ xcpcio/constants.py,sha256=MjpAgNXiBlUsx1S09m7JNT-nekNDR-aE6ggvGL3fg0I,2297
3
+ xcpcio/types.py,sha256=AkYby2haJgxwtozlgaPMG2ryAZdvsSc3sH-p6qXcM4g,6575
4
+ xcpcio-0.58.2.dist-info/METADATA,sha256=ZjuK9i03VxMdiq8HwIE7g2UocmAt-ukmRogWcbAXrT8,771
5
+ xcpcio-0.58.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6
+ xcpcio-0.58.2.dist-info/top_level.txt,sha256=c0sKVaiJdzJma17sS0dqHsYvDtGav5iIbd3wyLWuDEA,7
7
+ xcpcio-0.58.2.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ xcpcio