kaggle 1.7.3b1__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.
- kaggle/LICENSE +201 -0
- kaggle/__init__.py +6 -0
- kaggle/api/__init__.py +0 -0
- kaggle/api/kaggle_api.py +614 -0
- kaggle/api/kaggle_api_extended.py +4657 -0
- kaggle/cli.py +1606 -0
- kaggle/configuration.py +206 -0
- kaggle/models/__init__.py +0 -0
- kaggle/models/api_blob_type.py +4 -0
- kaggle/models/dataset_column.py +228 -0
- kaggle/models/dataset_new_request.py +385 -0
- kaggle/models/dataset_new_version_request.py +287 -0
- kaggle/models/dataset_update_settings_request.py +310 -0
- kaggle/models/kaggle_models_extended.py +276 -0
- kaggle/models/kernel_push_request.py +556 -0
- kaggle/models/model_instance_new_version_request.py +145 -0
- kaggle/models/model_instance_update_request.py +351 -0
- kaggle/models/model_new_instance_request.py +417 -0
- kaggle/models/model_new_request.py +314 -0
- kaggle/models/model_update_request.py +282 -0
- kaggle/models/start_blob_upload_request.py +232 -0
- kaggle/models/start_blob_upload_response.py +137 -0
- kaggle/models/upload_file.py +169 -0
- kaggle/test/__init__.py +0 -0
- kaggle/test/test_authenticate.py +43 -0
- kaggle-1.7.3b1.dist-info/METADATA +348 -0
- kaggle-1.7.3b1.dist-info/RECORD +89 -0
- kaggle-1.7.3b1.dist-info/WHEEL +4 -0
- kaggle-1.7.3b1.dist-info/entry_points.txt +2 -0
- kaggle-1.7.3b1.dist-info/licenses/LICENSE.txt +201 -0
- kagglesdk/LICENSE +201 -0
- kagglesdk/__init__.py +2 -0
- kagglesdk/admin/__init__.py +0 -0
- kagglesdk/admin/services/__init__.py +0 -0
- kagglesdk/admin/services/inbox_file_service.py +22 -0
- kagglesdk/admin/types/__init__.py +0 -0
- kagglesdk/admin/types/inbox_file_service.py +74 -0
- kagglesdk/blobs/__init__.py +0 -0
- kagglesdk/blobs/services/__init__.py +0 -0
- kagglesdk/blobs/services/blob_api_service.py +25 -0
- kagglesdk/blobs/types/__init__.py +0 -0
- kagglesdk/blobs/types/blob_api_service.py +177 -0
- kagglesdk/common/__init__.py +0 -0
- kagglesdk/common/types/__init__.py +0 -0
- kagglesdk/common/types/file_download.py +102 -0
- kagglesdk/common/types/http_redirect.py +105 -0
- kagglesdk/competitions/__init__.py +0 -0
- kagglesdk/competitions/services/__init__.py +0 -0
- kagglesdk/competitions/services/competition_api_service.py +129 -0
- kagglesdk/competitions/types/__init__.py +0 -0
- kagglesdk/competitions/types/competition_api_service.py +1874 -0
- kagglesdk/competitions/types/competition_enums.py +53 -0
- kagglesdk/competitions/types/submission_status.py +9 -0
- kagglesdk/datasets/__init__.py +0 -0
- kagglesdk/datasets/services/__init__.py +0 -0
- kagglesdk/datasets/services/dataset_api_service.py +170 -0
- kagglesdk/datasets/types/__init__.py +0 -0
- kagglesdk/datasets/types/dataset_api_service.py +2777 -0
- kagglesdk/datasets/types/dataset_enums.py +82 -0
- kagglesdk/datasets/types/dataset_types.py +646 -0
- kagglesdk/education/__init__.py +0 -0
- kagglesdk/education/services/__init__.py +0 -0
- kagglesdk/education/services/education_api_service.py +19 -0
- kagglesdk/education/types/__init__.py +0 -0
- kagglesdk/education/types/education_api_service.py +248 -0
- kagglesdk/education/types/education_service.py +139 -0
- kagglesdk/kaggle_client.py +66 -0
- kagglesdk/kaggle_env.py +42 -0
- kagglesdk/kaggle_http_client.py +316 -0
- kagglesdk/kaggle_object.py +293 -0
- kagglesdk/kernels/__init__.py +0 -0
- kagglesdk/kernels/services/__init__.py +0 -0
- kagglesdk/kernels/services/kernels_api_service.py +109 -0
- kagglesdk/kernels/types/__init__.py +0 -0
- kagglesdk/kernels/types/kernels_api_service.py +1951 -0
- kagglesdk/kernels/types/kernels_enums.py +33 -0
- kagglesdk/models/__init__.py +0 -0
- kagglesdk/models/services/__init__.py +0 -0
- kagglesdk/models/services/model_api_service.py +255 -0
- kagglesdk/models/services/model_service.py +19 -0
- kagglesdk/models/types/__init__.py +0 -0
- kagglesdk/models/types/model_api_service.py +3719 -0
- kagglesdk/models/types/model_enums.py +60 -0
- kagglesdk/models/types/model_service.py +275 -0
- kagglesdk/models/types/model_types.py +286 -0
- kagglesdk/test/test_client.py +45 -0
- kagglesdk/users/__init__.py +0 -0
- kagglesdk/users/types/__init__.py +0 -0
- kagglesdk/users/types/users_enums.py +22 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
from kagglesdk.education.types.education_service import LearnExerciseInteractionType, LearnExerciseOutcomeType, LearnExerciseQuestionType, LearnNudge
|
|
2
|
+
from kagglesdk.kaggle_object import *
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
class ApiTrackExerciseInteractionRequest(KaggleObject):
|
|
6
|
+
r"""
|
|
7
|
+
This is copied from TrackExerciseInteractionRequest in
|
|
8
|
+
education_service.proto, which will eventually be deprecated. In the
|
|
9
|
+
meantime, make sure to keep these in sync.
|
|
10
|
+
|
|
11
|
+
NOTE: there's one small rename from `fork_parent_script_version_id` to
|
|
12
|
+
`fork_parent_kernel_session_id`.
|
|
13
|
+
|
|
14
|
+
Attributes:
|
|
15
|
+
exception_class (str)
|
|
16
|
+
failure_message (str)
|
|
17
|
+
interaction_type (LearnExerciseInteractionType)
|
|
18
|
+
learn_tools_version (str)
|
|
19
|
+
fork_parent_kernel_session_id (int)
|
|
20
|
+
outcome_type (LearnExerciseOutcomeType)
|
|
21
|
+
question_id (str)
|
|
22
|
+
question_type (LearnExerciseQuestionType)
|
|
23
|
+
trace (str)
|
|
24
|
+
value_towards_completion (float)
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self):
|
|
28
|
+
self._exception_class = ""
|
|
29
|
+
self._failure_message = ""
|
|
30
|
+
self._interaction_type = LearnExerciseInteractionType.LEARN_EXERCISE_INTERACTION_TYPE_UNSPECIFIED
|
|
31
|
+
self._learn_tools_version = ""
|
|
32
|
+
self._fork_parent_kernel_session_id = 0
|
|
33
|
+
self._outcome_type = LearnExerciseOutcomeType.LEARN_EXERCISE_OUTCOME_TYPE_UNSPECIFIED
|
|
34
|
+
self._question_id = ""
|
|
35
|
+
self._question_type = LearnExerciseQuestionType.LEARN_EXERCISE_QUESTION_TYPE_UNSPECIFIED
|
|
36
|
+
self._trace = ""
|
|
37
|
+
self._value_towards_completion = None
|
|
38
|
+
self._freeze()
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def exception_class(self) -> str:
|
|
42
|
+
return self._exception_class
|
|
43
|
+
|
|
44
|
+
@exception_class.setter
|
|
45
|
+
def exception_class(self, exception_class: str):
|
|
46
|
+
if exception_class is None:
|
|
47
|
+
del self.exception_class
|
|
48
|
+
return
|
|
49
|
+
if not isinstance(exception_class, str):
|
|
50
|
+
raise TypeError('exception_class must be of type str')
|
|
51
|
+
self._exception_class = exception_class
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def failure_message(self) -> str:
|
|
55
|
+
return self._failure_message
|
|
56
|
+
|
|
57
|
+
@failure_message.setter
|
|
58
|
+
def failure_message(self, failure_message: str):
|
|
59
|
+
if failure_message is None:
|
|
60
|
+
del self.failure_message
|
|
61
|
+
return
|
|
62
|
+
if not isinstance(failure_message, str):
|
|
63
|
+
raise TypeError('failure_message must be of type str')
|
|
64
|
+
self._failure_message = failure_message
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def interaction_type(self) -> 'LearnExerciseInteractionType':
|
|
68
|
+
return self._interaction_type
|
|
69
|
+
|
|
70
|
+
@interaction_type.setter
|
|
71
|
+
def interaction_type(self, interaction_type: 'LearnExerciseInteractionType'):
|
|
72
|
+
if interaction_type is None:
|
|
73
|
+
del self.interaction_type
|
|
74
|
+
return
|
|
75
|
+
if not isinstance(interaction_type, LearnExerciseInteractionType):
|
|
76
|
+
raise TypeError('interaction_type must be of type LearnExerciseInteractionType')
|
|
77
|
+
self._interaction_type = interaction_type
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def learn_tools_version(self) -> str:
|
|
81
|
+
return self._learn_tools_version
|
|
82
|
+
|
|
83
|
+
@learn_tools_version.setter
|
|
84
|
+
def learn_tools_version(self, learn_tools_version: str):
|
|
85
|
+
if learn_tools_version is None:
|
|
86
|
+
del self.learn_tools_version
|
|
87
|
+
return
|
|
88
|
+
if not isinstance(learn_tools_version, str):
|
|
89
|
+
raise TypeError('learn_tools_version must be of type str')
|
|
90
|
+
self._learn_tools_version = learn_tools_version
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def fork_parent_kernel_session_id(self) -> int:
|
|
94
|
+
return self._fork_parent_kernel_session_id
|
|
95
|
+
|
|
96
|
+
@fork_parent_kernel_session_id.setter
|
|
97
|
+
def fork_parent_kernel_session_id(self, fork_parent_kernel_session_id: int):
|
|
98
|
+
if fork_parent_kernel_session_id is None:
|
|
99
|
+
del self.fork_parent_kernel_session_id
|
|
100
|
+
return
|
|
101
|
+
if not isinstance(fork_parent_kernel_session_id, int):
|
|
102
|
+
raise TypeError('fork_parent_kernel_session_id must be of type int')
|
|
103
|
+
self._fork_parent_kernel_session_id = fork_parent_kernel_session_id
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def outcome_type(self) -> 'LearnExerciseOutcomeType':
|
|
107
|
+
return self._outcome_type
|
|
108
|
+
|
|
109
|
+
@outcome_type.setter
|
|
110
|
+
def outcome_type(self, outcome_type: 'LearnExerciseOutcomeType'):
|
|
111
|
+
if outcome_type is None:
|
|
112
|
+
del self.outcome_type
|
|
113
|
+
return
|
|
114
|
+
if not isinstance(outcome_type, LearnExerciseOutcomeType):
|
|
115
|
+
raise TypeError('outcome_type must be of type LearnExerciseOutcomeType')
|
|
116
|
+
self._outcome_type = outcome_type
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def question_id(self) -> str:
|
|
120
|
+
return self._question_id
|
|
121
|
+
|
|
122
|
+
@question_id.setter
|
|
123
|
+
def question_id(self, question_id: str):
|
|
124
|
+
if question_id is None:
|
|
125
|
+
del self.question_id
|
|
126
|
+
return
|
|
127
|
+
if not isinstance(question_id, str):
|
|
128
|
+
raise TypeError('question_id must be of type str')
|
|
129
|
+
self._question_id = question_id
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def question_type(self) -> 'LearnExerciseQuestionType':
|
|
133
|
+
return self._question_type
|
|
134
|
+
|
|
135
|
+
@question_type.setter
|
|
136
|
+
def question_type(self, question_type: 'LearnExerciseQuestionType'):
|
|
137
|
+
if question_type is None:
|
|
138
|
+
del self.question_type
|
|
139
|
+
return
|
|
140
|
+
if not isinstance(question_type, LearnExerciseQuestionType):
|
|
141
|
+
raise TypeError('question_type must be of type LearnExerciseQuestionType')
|
|
142
|
+
self._question_type = question_type
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def trace(self) -> str:
|
|
146
|
+
return self._trace
|
|
147
|
+
|
|
148
|
+
@trace.setter
|
|
149
|
+
def trace(self, trace: str):
|
|
150
|
+
if trace is None:
|
|
151
|
+
del self.trace
|
|
152
|
+
return
|
|
153
|
+
if not isinstance(trace, str):
|
|
154
|
+
raise TypeError('trace must be of type str')
|
|
155
|
+
self._trace = trace
|
|
156
|
+
|
|
157
|
+
@property
|
|
158
|
+
def value_towards_completion(self) -> float:
|
|
159
|
+
return self._value_towards_completion or 0.0
|
|
160
|
+
|
|
161
|
+
@value_towards_completion.setter
|
|
162
|
+
def value_towards_completion(self, value_towards_completion: float):
|
|
163
|
+
if value_towards_completion is None:
|
|
164
|
+
del self.value_towards_completion
|
|
165
|
+
return
|
|
166
|
+
if not isinstance(value_towards_completion, float):
|
|
167
|
+
raise TypeError('value_towards_completion must be of type float')
|
|
168
|
+
self._value_towards_completion = value_towards_completion
|
|
169
|
+
|
|
170
|
+
def endpoint(self):
|
|
171
|
+
path = '/api/v1/learn/track'
|
|
172
|
+
return path.format_map(self.to_field_map(self))
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@staticmethod
|
|
176
|
+
def method():
|
|
177
|
+
return 'POST'
|
|
178
|
+
|
|
179
|
+
@staticmethod
|
|
180
|
+
def body_fields():
|
|
181
|
+
return '*'
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class ApiTrackExerciseInteractionResponse(KaggleObject):
|
|
185
|
+
r"""
|
|
186
|
+
This is copied from TrackExerciseInteractionResponse in
|
|
187
|
+
education_service.proto, which will eventually be deprecated. In the
|
|
188
|
+
meantime, make sure to keep these in sync.
|
|
189
|
+
|
|
190
|
+
Attributes:
|
|
191
|
+
nudge (LearnNudge)
|
|
192
|
+
show_login_prompt (bool)
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
def __init__(self):
|
|
196
|
+
self._nudge = None
|
|
197
|
+
self._show_login_prompt = False
|
|
198
|
+
self._freeze()
|
|
199
|
+
|
|
200
|
+
@property
|
|
201
|
+
def nudge(self) -> Optional['LearnNudge']:
|
|
202
|
+
return self._nudge
|
|
203
|
+
|
|
204
|
+
@nudge.setter
|
|
205
|
+
def nudge(self, nudge: Optional['LearnNudge']):
|
|
206
|
+
if nudge is None:
|
|
207
|
+
del self.nudge
|
|
208
|
+
return
|
|
209
|
+
if not isinstance(nudge, LearnNudge):
|
|
210
|
+
raise TypeError('nudge must be of type LearnNudge')
|
|
211
|
+
self._nudge = nudge
|
|
212
|
+
|
|
213
|
+
@property
|
|
214
|
+
def show_login_prompt(self) -> bool:
|
|
215
|
+
return self._show_login_prompt
|
|
216
|
+
|
|
217
|
+
@show_login_prompt.setter
|
|
218
|
+
def show_login_prompt(self, show_login_prompt: bool):
|
|
219
|
+
if show_login_prompt is None:
|
|
220
|
+
del self.show_login_prompt
|
|
221
|
+
return
|
|
222
|
+
if not isinstance(show_login_prompt, bool):
|
|
223
|
+
raise TypeError('show_login_prompt must be of type bool')
|
|
224
|
+
self._show_login_prompt = show_login_prompt
|
|
225
|
+
|
|
226
|
+
@property
|
|
227
|
+
def showLoginPrompt(self):
|
|
228
|
+
return self.show_login_prompt
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
ApiTrackExerciseInteractionRequest._fields = [
|
|
232
|
+
FieldMetadata("exceptionClass", "exception_class", "_exception_class", str, "", PredefinedSerializer()),
|
|
233
|
+
FieldMetadata("failureMessage", "failure_message", "_failure_message", str, "", PredefinedSerializer()),
|
|
234
|
+
FieldMetadata("interactionType", "interaction_type", "_interaction_type", LearnExerciseInteractionType, LearnExerciseInteractionType.LEARN_EXERCISE_INTERACTION_TYPE_UNSPECIFIED, EnumSerializer()),
|
|
235
|
+
FieldMetadata("learnToolsVersion", "learn_tools_version", "_learn_tools_version", str, "", PredefinedSerializer()),
|
|
236
|
+
FieldMetadata("forkParentKernelSessionId", "fork_parent_kernel_session_id", "_fork_parent_kernel_session_id", int, 0, PredefinedSerializer()),
|
|
237
|
+
FieldMetadata("outcomeType", "outcome_type", "_outcome_type", LearnExerciseOutcomeType, LearnExerciseOutcomeType.LEARN_EXERCISE_OUTCOME_TYPE_UNSPECIFIED, EnumSerializer()),
|
|
238
|
+
FieldMetadata("questionId", "question_id", "_question_id", str, "", PredefinedSerializer()),
|
|
239
|
+
FieldMetadata("questionType", "question_type", "_question_type", LearnExerciseQuestionType, LearnExerciseQuestionType.LEARN_EXERCISE_QUESTION_TYPE_UNSPECIFIED, EnumSerializer()),
|
|
240
|
+
FieldMetadata("trace", "trace", "_trace", str, "", PredefinedSerializer()),
|
|
241
|
+
FieldMetadata("valueTowardsCompletion", "value_towards_completion", "_value_towards_completion", float, None, PredefinedSerializer(), optional=True),
|
|
242
|
+
]
|
|
243
|
+
|
|
244
|
+
ApiTrackExerciseInteractionResponse._fields = [
|
|
245
|
+
FieldMetadata("nudge", "nudge", "_nudge", LearnNudge, None, KaggleObjectSerializer()),
|
|
246
|
+
FieldMetadata("showLoginPrompt", "show_login_prompt", "_show_login_prompt", bool, False, PredefinedSerializer()),
|
|
247
|
+
]
|
|
248
|
+
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
from kagglesdk.kaggle_object import *
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
class LearnExerciseInteractionType(enum.Enum):
|
|
6
|
+
LEARN_EXERCISE_INTERACTION_TYPE_UNSPECIFIED = 0
|
|
7
|
+
CHECK = 1
|
|
8
|
+
HINT = 2
|
|
9
|
+
SOLUTION = 3
|
|
10
|
+
|
|
11
|
+
class LearnExerciseOutcomeType(enum.Enum):
|
|
12
|
+
LEARN_EXERCISE_OUTCOME_TYPE_UNSPECIFIED = 0
|
|
13
|
+
PASS = 1
|
|
14
|
+
FAIL = 2
|
|
15
|
+
EXCEPTION = 3
|
|
16
|
+
UNATTEMPTED = 4
|
|
17
|
+
|
|
18
|
+
class LearnExerciseQuestionType(enum.Enum):
|
|
19
|
+
LEARN_EXERCISE_QUESTION_TYPE_UNSPECIFIED = 0
|
|
20
|
+
EQUALITY_CHECK_PROBLEM = 1
|
|
21
|
+
CODING_PROBLEM = 2
|
|
22
|
+
FUNCTION_PROBLEM = 3
|
|
23
|
+
THOUGHT_EXPERIMENT = 4
|
|
24
|
+
|
|
25
|
+
class LearnNudgeType(enum.Enum):
|
|
26
|
+
COURSE_COMPLETE_NO_BONUS_LESSONS = 0
|
|
27
|
+
COURSE_COMPLETE_WITH_BONUS_LESSONS = 1
|
|
28
|
+
COURSE_INCOMPLETE = 2
|
|
29
|
+
DO_EXERCISE = 3
|
|
30
|
+
DO_TUTORIAL = 4
|
|
31
|
+
|
|
32
|
+
class LearnNudge(KaggleObject):
|
|
33
|
+
r"""
|
|
34
|
+
Attributes:
|
|
35
|
+
course_index (int)
|
|
36
|
+
course_name (str)
|
|
37
|
+
course_slug (str)
|
|
38
|
+
next_item_name (str)
|
|
39
|
+
next_item_url (str)
|
|
40
|
+
next_item_type (LearnNudgeType)
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def __init__(self):
|
|
44
|
+
self._course_index = 0
|
|
45
|
+
self._course_name = ""
|
|
46
|
+
self._course_slug = ""
|
|
47
|
+
self._next_item_name = ""
|
|
48
|
+
self._next_item_url = ""
|
|
49
|
+
self._next_item_type = LearnNudgeType.COURSE_COMPLETE_NO_BONUS_LESSONS
|
|
50
|
+
self._freeze()
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def course_index(self) -> int:
|
|
54
|
+
return self._course_index
|
|
55
|
+
|
|
56
|
+
@course_index.setter
|
|
57
|
+
def course_index(self, course_index: int):
|
|
58
|
+
if course_index is None:
|
|
59
|
+
del self.course_index
|
|
60
|
+
return
|
|
61
|
+
if not isinstance(course_index, int):
|
|
62
|
+
raise TypeError('course_index must be of type int')
|
|
63
|
+
self._course_index = course_index
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def course_name(self) -> str:
|
|
67
|
+
return self._course_name
|
|
68
|
+
|
|
69
|
+
@course_name.setter
|
|
70
|
+
def course_name(self, course_name: str):
|
|
71
|
+
if course_name is None:
|
|
72
|
+
del self.course_name
|
|
73
|
+
return
|
|
74
|
+
if not isinstance(course_name, str):
|
|
75
|
+
raise TypeError('course_name must be of type str')
|
|
76
|
+
self._course_name = course_name
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def course_slug(self) -> str:
|
|
80
|
+
return self._course_slug
|
|
81
|
+
|
|
82
|
+
@course_slug.setter
|
|
83
|
+
def course_slug(self, course_slug: str):
|
|
84
|
+
if course_slug is None:
|
|
85
|
+
del self.course_slug
|
|
86
|
+
return
|
|
87
|
+
if not isinstance(course_slug, str):
|
|
88
|
+
raise TypeError('course_slug must be of type str')
|
|
89
|
+
self._course_slug = course_slug
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def next_item_name(self) -> str:
|
|
93
|
+
return self._next_item_name
|
|
94
|
+
|
|
95
|
+
@next_item_name.setter
|
|
96
|
+
def next_item_name(self, next_item_name: str):
|
|
97
|
+
if next_item_name is None:
|
|
98
|
+
del self.next_item_name
|
|
99
|
+
return
|
|
100
|
+
if not isinstance(next_item_name, str):
|
|
101
|
+
raise TypeError('next_item_name must be of type str')
|
|
102
|
+
self._next_item_name = next_item_name
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def next_item_url(self) -> str:
|
|
106
|
+
return self._next_item_url
|
|
107
|
+
|
|
108
|
+
@next_item_url.setter
|
|
109
|
+
def next_item_url(self, next_item_url: str):
|
|
110
|
+
if next_item_url is None:
|
|
111
|
+
del self.next_item_url
|
|
112
|
+
return
|
|
113
|
+
if not isinstance(next_item_url, str):
|
|
114
|
+
raise TypeError('next_item_url must be of type str')
|
|
115
|
+
self._next_item_url = next_item_url
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def next_item_type(self) -> 'LearnNudgeType':
|
|
119
|
+
return self._next_item_type
|
|
120
|
+
|
|
121
|
+
@next_item_type.setter
|
|
122
|
+
def next_item_type(self, next_item_type: 'LearnNudgeType'):
|
|
123
|
+
if next_item_type is None:
|
|
124
|
+
del self.next_item_type
|
|
125
|
+
return
|
|
126
|
+
if not isinstance(next_item_type, LearnNudgeType):
|
|
127
|
+
raise TypeError('next_item_type must be of type LearnNudgeType')
|
|
128
|
+
self._next_item_type = next_item_type
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
LearnNudge._fields = [
|
|
132
|
+
FieldMetadata("courseIndex", "course_index", "_course_index", int, 0, PredefinedSerializer()),
|
|
133
|
+
FieldMetadata("courseName", "course_name", "_course_name", str, "", PredefinedSerializer()),
|
|
134
|
+
FieldMetadata("courseSlug", "course_slug", "_course_slug", str, "", PredefinedSerializer()),
|
|
135
|
+
FieldMetadata("nextItemName", "next_item_name", "_next_item_name", str, "", PredefinedSerializer()),
|
|
136
|
+
FieldMetadata("nextItemUrl", "next_item_url", "_next_item_url", str, "", PredefinedSerializer()),
|
|
137
|
+
FieldMetadata("nextItemType", "next_item_type", "_next_item_type", LearnNudgeType, LearnNudgeType.COURSE_COMPLETE_NO_BONUS_LESSONS, EnumSerializer()),
|
|
138
|
+
]
|
|
139
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from kagglesdk.kernels.services.kernels_api_service import KernelsApiClient
|
|
2
|
+
from kagglesdk.blobs.services.blob_api_service import BlobApiClient
|
|
3
|
+
from kagglesdk.education.services.education_api_service import EducationApiClient
|
|
4
|
+
from kagglesdk.models.services.model_api_service import ModelApiClient
|
|
5
|
+
from kagglesdk.models.services.model_service import ModelClient
|
|
6
|
+
from kagglesdk.competitions.services.competition_api_service import CompetitionApiClient
|
|
7
|
+
from kagglesdk.datasets.services.dataset_api_service import DatasetApiClient
|
|
8
|
+
from kagglesdk.admin.services.inbox_file_service import InboxFileClient
|
|
9
|
+
from kagglesdk.kaggle_env import KaggleEnv
|
|
10
|
+
from kagglesdk.kaggle_http_client import KaggleHttpClient
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class KaggleClient(object):
|
|
14
|
+
class Kernels(object):
|
|
15
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
16
|
+
self.kernels_api_client = KernelsApiClient(http_client)
|
|
17
|
+
|
|
18
|
+
class Blobs(object):
|
|
19
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
20
|
+
self.blob_api_client = BlobApiClient(http_client)
|
|
21
|
+
|
|
22
|
+
class Education(object):
|
|
23
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
24
|
+
self.education_api_client = EducationApiClient(http_client)
|
|
25
|
+
|
|
26
|
+
class Models(object):
|
|
27
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
28
|
+
self.model_api_client = ModelApiClient(http_client)
|
|
29
|
+
self.model_client = ModelClient(http_client)
|
|
30
|
+
|
|
31
|
+
class Competitions(object):
|
|
32
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
33
|
+
self.competition_api_client = CompetitionApiClient(http_client)
|
|
34
|
+
|
|
35
|
+
class Datasets(object):
|
|
36
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
37
|
+
self.dataset_api_client = DatasetApiClient(http_client)
|
|
38
|
+
|
|
39
|
+
class Admin(object):
|
|
40
|
+
def __init__(self, http_client: KaggleHttpClient):
|
|
41
|
+
self.inbox_file_client = InboxFileClient(http_client)
|
|
42
|
+
|
|
43
|
+
def __init__(self, env: KaggleEnv = None, verbose: bool = False, username: str = None, password: str = None):
|
|
44
|
+
self._http_client = http_client = KaggleHttpClient(env, verbose, self._renew_iap_token, username=username, password=password)
|
|
45
|
+
self.kernels = KaggleClient.Kernels(http_client)
|
|
46
|
+
self.blobs = KaggleClient.Blobs(http_client)
|
|
47
|
+
self.education = KaggleClient.Education(http_client)
|
|
48
|
+
self.models = KaggleClient.Models(http_client)
|
|
49
|
+
self.competitions = KaggleClient.Competitions(http_client)
|
|
50
|
+
self.datasets = KaggleClient.Datasets(http_client)
|
|
51
|
+
self.admin = KaggleClient.Admin(http_client)
|
|
52
|
+
self.username = username
|
|
53
|
+
self.password = password
|
|
54
|
+
|
|
55
|
+
def http_client(self):
|
|
56
|
+
return self._http_client
|
|
57
|
+
|
|
58
|
+
def _renew_iap_token(self):
|
|
59
|
+
return self.admin.admin_client.renew_iap_token()
|
|
60
|
+
|
|
61
|
+
def __enter__(self):
|
|
62
|
+
self._http_client.__enter__()
|
|
63
|
+
return self
|
|
64
|
+
|
|
65
|
+
def __exit__(self, exc_type, exc_value, tb):
|
|
66
|
+
self._http_client.__exit__(exc_type, exc_value, tb)
|
kagglesdk/kaggle_env.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from enum import Enum
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class KaggleEnv(Enum):
|
|
6
|
+
LOCAL = 0 # localhost
|
|
7
|
+
STAGING = 1 # staging.kaggle.com
|
|
8
|
+
ADMIN = 2 # admin.kaggle.com
|
|
9
|
+
QA = 3 # qa.kaggle.com
|
|
10
|
+
# Direct prod access is not allowed to have IAP protection during testing, but we support basic auth.
|
|
11
|
+
PROD = 4 # www.kaggle.com
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
_env_to_endpoint = {
|
|
15
|
+
KaggleEnv.LOCAL: 'http://localhost',
|
|
16
|
+
KaggleEnv.STAGING: 'https://staging.kaggle.com',
|
|
17
|
+
KaggleEnv.ADMIN: 'https://admin.kaggle.com',
|
|
18
|
+
KaggleEnv.QA: 'https://qa.kaggle.com',
|
|
19
|
+
# See the comment above in KaggleEnv enum.
|
|
20
|
+
KaggleEnv.PROD: "https://www.kaggle.com",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_endpoint(env: KaggleEnv):
|
|
25
|
+
return _env_to_endpoint[env]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_env():
|
|
29
|
+
env = os.getenv('KAGGLE_API_ENVIRONMENT')
|
|
30
|
+
if env is None:
|
|
31
|
+
raise Exception('Must specify KaggleEnv or set KAGGLE_API_ENVIRONMENT env var')
|
|
32
|
+
if env == 'LOCALHOST':
|
|
33
|
+
return KaggleEnv.LOCAL
|
|
34
|
+
if env == 'ADMIN':
|
|
35
|
+
return KaggleEnv.ADMIN
|
|
36
|
+
if env == 'STAGING':
|
|
37
|
+
return KaggleEnv.STAGING
|
|
38
|
+
if env == 'QA':
|
|
39
|
+
return KaggleEnv.QA
|
|
40
|
+
if env == 'PROD':
|
|
41
|
+
return KaggleEnv.PROD
|
|
42
|
+
raise Exception(f'Unrecognized value in KAGGLE_API_ENVIRONMENT: "{env}"')
|