hackerrank 2026.7.19__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.
- hackerrank/__init__.py +1 -0
- hackerrank/_dict_types.py +349 -0
- hackerrank/async_client.py +2619 -0
- hackerrank/client.py +2623 -0
- hackerrank/exceptions.py +129 -0
- hackerrank/py.typed +0 -0
- hackerrank/transports.py +273 -0
- hackerrank/types.py +1086 -0
- hackerrank-2026.7.19.dist-info/METADATA +121 -0
- hackerrank-2026.7.19.dist-info/RECORD +15 -0
- hackerrank-2026.7.19.dist-info/WHEEL +5 -0
- hackerrank-2026.7.19.dist-info/licenses/LICENSE +21 -0
- hackerrank-2026.7.19.dist-info/scm_file_list.json +49 -0
- hackerrank-2026.7.19.dist-info/scm_version.json +8 -0
- hackerrank-2026.7.19.dist-info/top_level.txt +1 -0
hackerrank/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""A library for the HackerRank for Work API."""
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"""TypedDict types describing raw HackerRank API response shapes."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, NotRequired, TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class InterviewDict(TypedDict):
|
|
7
|
+
"""A HackerRank interview."""
|
|
8
|
+
|
|
9
|
+
id: str
|
|
10
|
+
status: str
|
|
11
|
+
url: str
|
|
12
|
+
title: NotRequired[str]
|
|
13
|
+
feedback: NotRequired[str]
|
|
14
|
+
thumbs_up: NotRequired[int]
|
|
15
|
+
notes: NotRequired[str]
|
|
16
|
+
resume_url: NotRequired[str]
|
|
17
|
+
interviewers: NotRequired[list[str]]
|
|
18
|
+
result_url: NotRequired[str]
|
|
19
|
+
candidate: NotRequired[dict[str, Any]]
|
|
20
|
+
metadata: NotRequired[dict[str, Any]]
|
|
21
|
+
report_url: NotRequired[str]
|
|
22
|
+
ended_at: NotRequired[str]
|
|
23
|
+
interview_template_id: NotRequired[int]
|
|
24
|
+
created_at: NotRequired[str]
|
|
25
|
+
updated_at: NotRequired[str]
|
|
26
|
+
user: NotRequired[int]
|
|
27
|
+
send_email: NotRequired[bool]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class InterviewTranscriptMessageDict(TypedDict):
|
|
31
|
+
"""A single message from an interview transcript."""
|
|
32
|
+
|
|
33
|
+
author: str
|
|
34
|
+
timestamp: int
|
|
35
|
+
text: str
|
|
36
|
+
candidate: bool
|
|
37
|
+
messageId: str
|
|
38
|
+
email: NotRequired[str]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class InterviewTranscriptDict(TypedDict):
|
|
42
|
+
"""The transcript for an interview."""
|
|
43
|
+
|
|
44
|
+
messages: list[InterviewTranscriptMessageDict]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class InterviewTemplateDict(TypedDict):
|
|
48
|
+
"""A HackerRank interview template."""
|
|
49
|
+
|
|
50
|
+
id: int
|
|
51
|
+
name: str
|
|
52
|
+
created_at: NotRequired[str]
|
|
53
|
+
status: NotRequired[int]
|
|
54
|
+
user: NotRequired[int]
|
|
55
|
+
roles: NotRequired[list[str]]
|
|
56
|
+
team_share: NotRequired[int]
|
|
57
|
+
questions: NotRequired[list[str]]
|
|
58
|
+
scorecard: NotRequired[int]
|
|
59
|
+
import_template: NotRequired[bool]
|
|
60
|
+
editor_access: NotRequired[bool]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class EnvironmentRuntimeDict(TypedDict):
|
|
64
|
+
"""A runtime component for a project-question environment."""
|
|
65
|
+
|
|
66
|
+
name: str
|
|
67
|
+
version: str
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class EnvironmentDict(TypedDict):
|
|
71
|
+
"""A project-question environment."""
|
|
72
|
+
|
|
73
|
+
id: int
|
|
74
|
+
name: str
|
|
75
|
+
tags: list[str]
|
|
76
|
+
runtime: list[EnvironmentRuntimeDict]
|
|
77
|
+
active: NotRequired[bool]
|
|
78
|
+
sample_project_url: NotRequired[str]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class QuestionDict(TypedDict):
|
|
82
|
+
"""A HackerRank question."""
|
|
83
|
+
|
|
84
|
+
id: str
|
|
85
|
+
unique_id: NotRequired[str]
|
|
86
|
+
type: str
|
|
87
|
+
owner: NotRequired[str]
|
|
88
|
+
created_at: NotRequired[str]
|
|
89
|
+
status: NotRequired[str]
|
|
90
|
+
internal_notes: NotRequired[str]
|
|
91
|
+
name: str
|
|
92
|
+
languages: NotRequired[list[str]]
|
|
93
|
+
problem_statement: NotRequired[str]
|
|
94
|
+
recommended_duration: NotRequired[int]
|
|
95
|
+
tags: NotRequired[list[str]]
|
|
96
|
+
max_score: NotRequired[float]
|
|
97
|
+
options: NotRequired[list[str]]
|
|
98
|
+
answer: NotRequired[int | list[int]]
|
|
99
|
+
test_case_count: NotRequired[int]
|
|
100
|
+
role_type: NotRequired[str]
|
|
101
|
+
environment_id: NotRequired[int]
|
|
102
|
+
file_url: NotRequired[str]
|
|
103
|
+
file_path: NotRequired[str]
|
|
104
|
+
has_valid_stacks: NotRequired[bool]
|
|
105
|
+
fullstack_project_details: NotRequired[dict[str, Any]]
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class TestDict(TypedDict):
|
|
109
|
+
"""A HackerRank test."""
|
|
110
|
+
|
|
111
|
+
id: str
|
|
112
|
+
unique_id: NotRequired[str]
|
|
113
|
+
name: str
|
|
114
|
+
starttime: NotRequired[str]
|
|
115
|
+
endtime: NotRequired[str]
|
|
116
|
+
duration: NotRequired[int]
|
|
117
|
+
owner: NotRequired[str]
|
|
118
|
+
instructions: NotRequired[str]
|
|
119
|
+
starred: NotRequired[bool]
|
|
120
|
+
created_at: NotRequired[str]
|
|
121
|
+
state: NotRequired[str]
|
|
122
|
+
locked: NotRequired[bool]
|
|
123
|
+
draft: NotRequired[bool]
|
|
124
|
+
languages: NotRequired[list[str]]
|
|
125
|
+
candidate_details: NotRequired[list[str]]
|
|
126
|
+
custom_acknowledge_text: NotRequired[str]
|
|
127
|
+
cutoff_score: NotRequired[int]
|
|
128
|
+
master_password: NotRequired[str]
|
|
129
|
+
hide_compile_test: NotRequired[bool]
|
|
130
|
+
tags: NotRequired[list[str]]
|
|
131
|
+
role_ids: NotRequired[list[str]]
|
|
132
|
+
experience: NotRequired[list[str]]
|
|
133
|
+
questions: NotRequired[list[str]]
|
|
134
|
+
sections: NotRequired[list[dict[str, Any]]]
|
|
135
|
+
mcq_incorrect_score: NotRequired[int]
|
|
136
|
+
mcq_correct_score: NotRequired[int]
|
|
137
|
+
locked_by: NotRequired[str]
|
|
138
|
+
short_login_url: NotRequired[str]
|
|
139
|
+
public_login_url: NotRequired[str]
|
|
140
|
+
shuffle_questions: NotRequired[bool]
|
|
141
|
+
test_admins: NotRequired[list[str]]
|
|
142
|
+
hide_template: NotRequired[bool]
|
|
143
|
+
enable_acknowledgement: NotRequired[bool]
|
|
144
|
+
enable_proctoring: NotRequired[bool]
|
|
145
|
+
enable_advanced_proctoring: NotRequired[bool]
|
|
146
|
+
enable_secure_assessment_mode: NotRequired[bool]
|
|
147
|
+
enable_ml_plagiarism_analysis: NotRequired[bool]
|
|
148
|
+
enable_photo_identification: NotRequired[bool]
|
|
149
|
+
ide_config: NotRequired[str]
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class CandidateDetailDict(TypedDict):
|
|
153
|
+
"""A custom candidate detail field."""
|
|
154
|
+
|
|
155
|
+
field_name: str
|
|
156
|
+
title: str
|
|
157
|
+
value: str
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class TestCandidateDict(TypedDict):
|
|
161
|
+
"""A candidate associated with a test."""
|
|
162
|
+
|
|
163
|
+
id: str
|
|
164
|
+
full_name: NotRequired[str]
|
|
165
|
+
email: str
|
|
166
|
+
score: NotRequired[float]
|
|
167
|
+
test: NotRequired[str]
|
|
168
|
+
user: NotRequired[str]
|
|
169
|
+
attempt_starttime: NotRequired[str]
|
|
170
|
+
attempt_endtime: NotRequired[str]
|
|
171
|
+
attempt_events: NotRequired[list[str]]
|
|
172
|
+
status: NotRequired[int]
|
|
173
|
+
ats_state: NotRequired[int]
|
|
174
|
+
integrity_status: NotRequired[str]
|
|
175
|
+
integrity_summary: NotRequired[str]
|
|
176
|
+
invite_email_done: NotRequired[bool]
|
|
177
|
+
invite_valid: NotRequired[bool]
|
|
178
|
+
invited_on: NotRequired[str]
|
|
179
|
+
invite_valid_from: NotRequired[str]
|
|
180
|
+
invite_valid_to: NotRequired[str]
|
|
181
|
+
invite_link: NotRequired[str]
|
|
182
|
+
invite_metadata: NotRequired[dict[str, Any]]
|
|
183
|
+
evaluator_email: NotRequired[str]
|
|
184
|
+
test_finish_url: NotRequired[str]
|
|
185
|
+
test_result_url: NotRequired[str]
|
|
186
|
+
accept_result_updates: NotRequired[bool]
|
|
187
|
+
tags: NotRequired[list[str]]
|
|
188
|
+
report_url: NotRequired[str]
|
|
189
|
+
authenticated_report_url: NotRequired[str]
|
|
190
|
+
pdf_url: NotRequired[str]
|
|
191
|
+
scores_tags_split: NotRequired[dict[str, Any]]
|
|
192
|
+
scores_skills_split: NotRequired[dict[str, Any]]
|
|
193
|
+
added_time: NotRequired[int]
|
|
194
|
+
unclaimed_added_time: NotRequired[int]
|
|
195
|
+
comments: NotRequired[dict[str, Any]]
|
|
196
|
+
performance_summary: NotRequired[str]
|
|
197
|
+
ip_address: NotRequired[str]
|
|
198
|
+
questions: NotRequired[dict[str, Any]]
|
|
199
|
+
plagiarism: NotRequired[dict[str, Any]]
|
|
200
|
+
plagiarism_status: NotRequired[bool]
|
|
201
|
+
max_code_similarity: NotRequired[dict[str, Any]]
|
|
202
|
+
feedback: NotRequired[str]
|
|
203
|
+
percentage_score: NotRequired[float]
|
|
204
|
+
candidate_details: NotRequired[list[CandidateDetailDict]]
|
|
205
|
+
out_of_window_events: NotRequired[int]
|
|
206
|
+
out_of_window_duration: NotRequired[float]
|
|
207
|
+
editor_paste_count: NotRequired[int]
|
|
208
|
+
proctor_images: NotRequired[list[str]]
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class InviterDict(TypedDict):
|
|
212
|
+
"""A user permitted to invite candidates to a test."""
|
|
213
|
+
|
|
214
|
+
id: str
|
|
215
|
+
email: str
|
|
216
|
+
firstname: NotRequired[str]
|
|
217
|
+
lastname: NotRequired[str]
|
|
218
|
+
role: NotRequired[str]
|
|
219
|
+
status: NotRequired[str]
|
|
220
|
+
phone: NotRequired[str]
|
|
221
|
+
timezone: NotRequired[str]
|
|
222
|
+
questions_permission: NotRequired[int]
|
|
223
|
+
tests_permission: NotRequired[int]
|
|
224
|
+
interviews_permission: NotRequired[int]
|
|
225
|
+
candidates_permission: NotRequired[int]
|
|
226
|
+
teams: NotRequired[list[str]]
|
|
227
|
+
candidates_invited: NotRequired[int]
|
|
228
|
+
activated: NotRequired[bool]
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class UserDict(TypedDict):
|
|
232
|
+
"""A HackerRank user."""
|
|
233
|
+
|
|
234
|
+
id: str
|
|
235
|
+
email: str
|
|
236
|
+
firstname: NotRequired[str]
|
|
237
|
+
lastname: NotRequired[str]
|
|
238
|
+
country: NotRequired[str]
|
|
239
|
+
role: NotRequired[str]
|
|
240
|
+
status: NotRequired[str]
|
|
241
|
+
phone: NotRequired[str]
|
|
242
|
+
timezone: NotRequired[str]
|
|
243
|
+
questions_permission: NotRequired[int]
|
|
244
|
+
tests_permission: NotRequired[int]
|
|
245
|
+
interviews_permission: NotRequired[int]
|
|
246
|
+
candidates_permission: NotRequired[int]
|
|
247
|
+
shared_questions_permission: NotRequired[int]
|
|
248
|
+
shared_tests_permission: NotRequired[int]
|
|
249
|
+
shared_interviews_permission: NotRequired[int]
|
|
250
|
+
shared_candidates_permission: NotRequired[int]
|
|
251
|
+
company_admin: NotRequired[bool]
|
|
252
|
+
team_admin: NotRequired[bool]
|
|
253
|
+
teams: NotRequired[list[str]]
|
|
254
|
+
activated: NotRequired[bool]
|
|
255
|
+
last_activity_time: NotRequired[str]
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
class TeamDict(TypedDict):
|
|
259
|
+
"""A HackerRank team."""
|
|
260
|
+
|
|
261
|
+
id: str
|
|
262
|
+
name: str
|
|
263
|
+
owner: NotRequired[str]
|
|
264
|
+
created_at: NotRequired[str]
|
|
265
|
+
recruiter_count: NotRequired[int]
|
|
266
|
+
developer_count: NotRequired[int]
|
|
267
|
+
recruiter_cap: NotRequired[int]
|
|
268
|
+
developer_cap: NotRequired[int]
|
|
269
|
+
invite_as: NotRequired[str]
|
|
270
|
+
locations: NotRequired[list[str]]
|
|
271
|
+
departments: NotRequired[list[str]]
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class UserTeamMembershipDict(TypedDict):
|
|
275
|
+
"""A membership of a user in a team."""
|
|
276
|
+
|
|
277
|
+
team: str
|
|
278
|
+
user: str
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
class TemplateDict(TypedDict):
|
|
282
|
+
"""An invite-email template."""
|
|
283
|
+
|
|
284
|
+
id: str
|
|
285
|
+
name: str
|
|
286
|
+
subject: NotRequired[str]
|
|
287
|
+
content: NotRequired[str]
|
|
288
|
+
default: NotRequired[bool]
|
|
289
|
+
created_at: NotRequired[str]
|
|
290
|
+
updated_at: NotRequired[str]
|
|
291
|
+
user: NotRequired[str]
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
class AuditLogDict(TypedDict):
|
|
295
|
+
"""An audit log entry."""
|
|
296
|
+
|
|
297
|
+
source_id: int
|
|
298
|
+
source_type: str
|
|
299
|
+
user: NotRequired[str]
|
|
300
|
+
action: str
|
|
301
|
+
modified_fields: NotRequired[list[str]]
|
|
302
|
+
modified_values: NotRequired[dict[str, Any]]
|
|
303
|
+
ip_address: NotRequired[str]
|
|
304
|
+
created_at: NotRequired[str]
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
class ATSCodePairDict(TypedDict):
|
|
308
|
+
"""Result of an ATS Codepair invite."""
|
|
309
|
+
|
|
310
|
+
title: NotRequired[str]
|
|
311
|
+
requisition_id: NotRequired[str]
|
|
312
|
+
candidate_id: NotRequired[str]
|
|
313
|
+
candidate: NotRequired[dict[str, Any]]
|
|
314
|
+
send_email: NotRequired[bool]
|
|
315
|
+
interview_metadata: NotRequired[dict[str, Any]]
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
class ATSCodeScreenDict(TypedDict):
|
|
319
|
+
"""Result of an ATS CodeScreen invite."""
|
|
320
|
+
|
|
321
|
+
test_id: NotRequired[str]
|
|
322
|
+
requisition_id: NotRequired[str]
|
|
323
|
+
candidate_id: NotRequired[str]
|
|
324
|
+
email: NotRequired[str]
|
|
325
|
+
test_result_url: NotRequired[str]
|
|
326
|
+
accept_result_updates: NotRequired[bool]
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
class SCIMUserDict(TypedDict):
|
|
330
|
+
"""A SCIM v2 user."""
|
|
331
|
+
|
|
332
|
+
id: str
|
|
333
|
+
userName: str
|
|
334
|
+
name: NotRequired[dict[str, Any]]
|
|
335
|
+
active: NotRequired[bool]
|
|
336
|
+
role: NotRequired[str]
|
|
337
|
+
team_admin: NotRequired[bool]
|
|
338
|
+
company_admin: NotRequired[bool]
|
|
339
|
+
emails: NotRequired[list[dict[str, Any]]]
|
|
340
|
+
schemas: NotRequired[list[str]]
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
class SCIMTeamDict(TypedDict):
|
|
344
|
+
"""A SCIM v2 team."""
|
|
345
|
+
|
|
346
|
+
id: str
|
|
347
|
+
displayName: NotRequired[str]
|
|
348
|
+
diplayName: NotRequired[str]
|
|
349
|
+
schemas: NotRequired[list[str]]
|