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 +5 -0
- xcpcio/constants.py +66 -0
- xcpcio/types.py +204 -0
- xcpcio-0.58.2.dist-info/METADATA +21 -0
- xcpcio-0.58.2.dist-info/RECORD +7 -0
- xcpcio-0.58.2.dist-info/WHEEL +5 -0
- xcpcio-0.58.2.dist-info/top_level.txt +1 -0
xcpcio/__init__.py
ADDED
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 @@
|
|
|
1
|
+
xcpcio
|