kaggle 1.8.0__py3-none-any.whl → 1.8.3__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.
Files changed (128) hide show
  1. kaggle/__init__.py +1 -1
  2. kaggle/api/kaggle_api_extended.py +24 -2
  3. {kaggle-1.8.0.dist-info → kaggle-1.8.3.dist-info}/METADATA +4 -3
  4. kaggle-1.8.3.dist-info/RECORD +28 -0
  5. {kaggle-1.8.0.dist-info → kaggle-1.8.3.dist-info}/WHEEL +1 -1
  6. kaggle-1.8.0.dist-info/RECORD +0 -148
  7. kagglesdk/LICENSE +0 -201
  8. kagglesdk/__init__.py +0 -6
  9. kagglesdk/admin/__init__.py +0 -0
  10. kagglesdk/admin/services/__init__.py +0 -0
  11. kagglesdk/admin/services/inbox_file_service.py +0 -22
  12. kagglesdk/admin/types/__init__.py +0 -0
  13. kagglesdk/admin/types/inbox_file_service.py +0 -74
  14. kagglesdk/benchmarks/__init__.py +0 -0
  15. kagglesdk/benchmarks/services/__init__.py +0 -0
  16. kagglesdk/benchmarks/services/benchmarks_api_service.py +0 -19
  17. kagglesdk/benchmarks/types/__init__.py +0 -0
  18. kagglesdk/benchmarks/types/benchmark_types.py +0 -307
  19. kagglesdk/benchmarks/types/benchmarks_api_service.py +0 -243
  20. kagglesdk/blobs/__init__.py +0 -0
  21. kagglesdk/blobs/services/__init__.py +0 -0
  22. kagglesdk/blobs/services/blob_api_service.py +0 -25
  23. kagglesdk/blobs/types/__init__.py +0 -0
  24. kagglesdk/blobs/types/blob_api_service.py +0 -177
  25. kagglesdk/common/__init__.py +0 -0
  26. kagglesdk/common/services/__init__.py +0 -0
  27. kagglesdk/common/services/operations_service.py +0 -46
  28. kagglesdk/common/types/__init__.py +0 -0
  29. kagglesdk/common/types/file_download.py +0 -102
  30. kagglesdk/common/types/http_redirect.py +0 -105
  31. kagglesdk/common/types/operations.py +0 -194
  32. kagglesdk/common/types/operations_service.py +0 -48
  33. kagglesdk/community/__init__.py +0 -0
  34. kagglesdk/community/types/__init__.py +0 -0
  35. kagglesdk/community/types/content_enums.py +0 -44
  36. kagglesdk/community/types/organization.py +0 -410
  37. kagglesdk/competitions/__init__.py +0 -0
  38. kagglesdk/competitions/services/__init__.py +0 -0
  39. kagglesdk/competitions/services/competition_api_service.py +0 -178
  40. kagglesdk/competitions/types/__init__.py +0 -0
  41. kagglesdk/competitions/types/competition.py +0 -14
  42. kagglesdk/competitions/types/competition_api_service.py +0 -2393
  43. kagglesdk/competitions/types/competition_enums.py +0 -53
  44. kagglesdk/competitions/types/search_competitions.py +0 -28
  45. kagglesdk/competitions/types/submission_status.py +0 -9
  46. kagglesdk/datasets/__init__.py +0 -0
  47. kagglesdk/datasets/databundles/__init__.py +0 -0
  48. kagglesdk/datasets/databundles/types/__init__.py +0 -0
  49. kagglesdk/datasets/databundles/types/databundle_api_types.py +0 -540
  50. kagglesdk/datasets/services/__init__.py +0 -0
  51. kagglesdk/datasets/services/dataset_api_service.py +0 -195
  52. kagglesdk/datasets/types/__init__.py +0 -0
  53. kagglesdk/datasets/types/dataset_api_service.py +0 -3047
  54. kagglesdk/datasets/types/dataset_enums.py +0 -103
  55. kagglesdk/datasets/types/dataset_service.py +0 -145
  56. kagglesdk/datasets/types/dataset_types.py +0 -646
  57. kagglesdk/datasets/types/search_datasets.py +0 -6
  58. kagglesdk/discussions/__init__.py +0 -0
  59. kagglesdk/discussions/types/__init__.py +0 -0
  60. kagglesdk/discussions/types/search_discussions.py +0 -43
  61. kagglesdk/discussions/types/writeup_enums.py +0 -11
  62. kagglesdk/education/__init__.py +0 -0
  63. kagglesdk/education/services/__init__.py +0 -0
  64. kagglesdk/education/services/education_api_service.py +0 -19
  65. kagglesdk/education/types/__init__.py +0 -0
  66. kagglesdk/education/types/education_api_service.py +0 -248
  67. kagglesdk/education/types/education_service.py +0 -139
  68. kagglesdk/kaggle_client.py +0 -101
  69. kagglesdk/kaggle_creds.py +0 -148
  70. kagglesdk/kaggle_env.py +0 -104
  71. kagglesdk/kaggle_http_client.py +0 -261
  72. kagglesdk/kaggle_oauth.py +0 -200
  73. kagglesdk/kaggle_object.py +0 -344
  74. kagglesdk/kernels/__init__.py +0 -0
  75. kagglesdk/kernels/services/__init__.py +0 -0
  76. kagglesdk/kernels/services/kernels_api_service.py +0 -146
  77. kagglesdk/kernels/types/__init__.py +0 -0
  78. kagglesdk/kernels/types/kernels_api_service.py +0 -2451
  79. kagglesdk/kernels/types/kernels_enums.py +0 -39
  80. kagglesdk/kernels/types/search_kernels.py +0 -6
  81. kagglesdk/licenses/__init__.py +0 -0
  82. kagglesdk/licenses/types/__init__.py +0 -0
  83. kagglesdk/licenses/types/licenses_types.py +0 -182
  84. kagglesdk/models/__init__.py +0 -0
  85. kagglesdk/models/services/__init__.py +0 -0
  86. kagglesdk/models/services/model_api_service.py +0 -280
  87. kagglesdk/models/services/model_service.py +0 -19
  88. kagglesdk/models/types/__init__.py +0 -0
  89. kagglesdk/models/types/model_api_service.py +0 -4069
  90. kagglesdk/models/types/model_enums.py +0 -68
  91. kagglesdk/models/types/model_service.py +0 -275
  92. kagglesdk/models/types/model_types.py +0 -1338
  93. kagglesdk/models/types/search_models.py +0 -8
  94. kagglesdk/search/__init__.py +0 -0
  95. kagglesdk/search/services/__init__.py +0 -0
  96. kagglesdk/search/services/search_api_service.py +0 -19
  97. kagglesdk/search/types/__init__.py +0 -0
  98. kagglesdk/search/types/search_api_service.py +0 -2435
  99. kagglesdk/search/types/search_content_shared.py +0 -50
  100. kagglesdk/search/types/search_enums.py +0 -45
  101. kagglesdk/search/types/search_service.py +0 -303
  102. kagglesdk/security/__init__.py +0 -0
  103. kagglesdk/security/services/__init__.py +0 -0
  104. kagglesdk/security/services/iam_service.py +0 -31
  105. kagglesdk/security/services/oauth_service.py +0 -58
  106. kagglesdk/security/types/__init__.py +0 -0
  107. kagglesdk/security/types/authentication.py +0 -171
  108. kagglesdk/security/types/iam_service.py +0 -496
  109. kagglesdk/security/types/oauth_service.py +0 -1181
  110. kagglesdk/security/types/roles.py +0 -8
  111. kagglesdk/security/types/security_types.py +0 -159
  112. kagglesdk/test/__init__.py +0 -0
  113. kagglesdk/test/test_client.py +0 -41
  114. kagglesdk/users/__init__.py +0 -0
  115. kagglesdk/users/services/__init__.py +0 -0
  116. kagglesdk/users/services/account_service.py +0 -31
  117. kagglesdk/users/services/group_api_service.py +0 -31
  118. kagglesdk/users/types/__init__.py +0 -0
  119. kagglesdk/users/types/account_service.py +0 -345
  120. kagglesdk/users/types/group_api_service.py +0 -315
  121. kagglesdk/users/types/group_types.py +0 -165
  122. kagglesdk/users/types/groups_enum.py +0 -8
  123. kagglesdk/users/types/progression_service.py +0 -9
  124. kagglesdk/users/types/search_users.py +0 -23
  125. kagglesdk/users/types/user_avatar.py +0 -226
  126. kagglesdk/users/types/users_enums.py +0 -22
  127. {kaggle-1.8.0.dist-info → kaggle-1.8.3.dist-info}/entry_points.txt +0 -0
  128. {kaggle-1.8.0.dist-info → kaggle-1.8.3.dist-info}/licenses/LICENSE.txt +0 -0
File without changes
File without changes
@@ -1,19 +0,0 @@
1
- from kagglesdk.education.types.education_api_service import ApiTrackExerciseInteractionRequest, ApiTrackExerciseInteractionResponse
2
- from kagglesdk.kaggle_http_client import KaggleHttpClient
3
-
4
- class EducationApiClient(object):
5
-
6
- def __init__(self, client: KaggleHttpClient):
7
- self._client = client
8
-
9
- def track_exercise_interaction(self, request: ApiTrackExerciseInteractionRequest = None) -> ApiTrackExerciseInteractionResponse:
10
- r"""
11
- Args:
12
- request (ApiTrackExerciseInteractionRequest):
13
- The request object; initialized to empty instance if not specified.
14
- """
15
-
16
- if request is None:
17
- request = ApiTrackExerciseInteractionRequest()
18
-
19
- return self._client.call("education.EducationApiService", "TrackExerciseInteraction", request, ApiTrackExerciseInteractionResponse)
File without changes
@@ -1,248 +0,0 @@
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: Optional[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
-
@@ -1,139 +0,0 @@
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
-
@@ -1,101 +0,0 @@
1
- from kagglesdk.admin.services.inbox_file_service import InboxFileClient
2
- from kagglesdk.benchmarks.services.benchmarks_api_service import BenchmarksApiClient
3
- from kagglesdk.blobs.services.blob_api_service import BlobApiClient
4
- from kagglesdk.common.services.operations_service import OperationsClient
5
- from kagglesdk.competitions.services.competition_api_service import CompetitionApiClient
6
- from kagglesdk.datasets.services.dataset_api_service import DatasetApiClient
7
- from kagglesdk.education.services.education_api_service import EducationApiClient
8
- from kagglesdk.kernels.services.kernels_api_service import KernelsApiClient
9
- from kagglesdk.models.services.model_api_service import ModelApiClient
10
- from kagglesdk.models.services.model_service import ModelClient
11
- from kagglesdk.search.services.search_api_service import SearchApiClient
12
- from kagglesdk.security.services.iam_service import IamClient
13
- from kagglesdk.security.services.oauth_service import OAuthClient
14
- from kagglesdk.users.services.account_service import AccountClient
15
- from kagglesdk.users.services.group_api_service import GroupApiClient
16
- from kagglesdk.kaggle_env import KaggleEnv
17
- from kagglesdk.kaggle_http_client import KaggleHttpClient
18
-
19
-
20
- class KaggleClient(object):
21
- class Admin(object):
22
- def __init__(self, http_client: KaggleHttpClient):
23
- self.inbox_file_client = InboxFileClient(http_client)
24
-
25
- class Benchmarks(object):
26
- def __init__(self, http_client: KaggleHttpClient):
27
- self.benchmarks_api_client = BenchmarksApiClient(http_client)
28
-
29
- class Blobs(object):
30
- def __init__(self, http_client: KaggleHttpClient):
31
- self.blob_api_client = BlobApiClient(http_client)
32
-
33
- class Common(object):
34
- def __init__(self, http_client: KaggleHttpClient):
35
- self.operations_client = OperationsClient(http_client)
36
-
37
- class Competitions(object):
38
- def __init__(self, http_client: KaggleHttpClient):
39
- self.competition_api_client = CompetitionApiClient(http_client)
40
-
41
- class Datasets(object):
42
- def __init__(self, http_client: KaggleHttpClient):
43
- self.dataset_api_client = DatasetApiClient(http_client)
44
-
45
- class Education(object):
46
- def __init__(self, http_client: KaggleHttpClient):
47
- self.education_api_client = EducationApiClient(http_client)
48
-
49
- class Kernels(object):
50
- def __init__(self, http_client: KaggleHttpClient):
51
- self.kernels_api_client = KernelsApiClient(http_client)
52
-
53
- class Models(object):
54
- def __init__(self, http_client: KaggleHttpClient):
55
- self.model_api_client = ModelApiClient(http_client)
56
- self.model_client = ModelClient(http_client)
57
-
58
- class Search(object):
59
- def __init__(self, http_client: KaggleHttpClient):
60
- self.search_api_client = SearchApiClient(http_client)
61
-
62
- class Security(object):
63
- def __init__(self, http_client: KaggleHttpClient):
64
- self.iam_client = IamClient(http_client)
65
- self.oauth_client = OAuthClient(http_client)
66
-
67
- class Users(object):
68
- def __init__(self, http_client: KaggleHttpClient):
69
- self.account_client = AccountClient(http_client)
70
- self.group_api_client = GroupApiClient(http_client)
71
-
72
- def __init__(self, env: KaggleEnv = None, verbose: bool = False, username: str = None, password: str = None, api_token: str = None):
73
- self._http_client = http_client = KaggleHttpClient(env, verbose, username=username, password=password, api_token=api_token)
74
- self.admin = KaggleClient.Admin(http_client)
75
- self.benchmarks = KaggleClient.Benchmarks(http_client)
76
- self.blobs = KaggleClient.Blobs(http_client)
77
- self.common = KaggleClient.Common(http_client)
78
- self.competitions = KaggleClient.Competitions(http_client)
79
- self.datasets = KaggleClient.Datasets(http_client)
80
- self.education = KaggleClient.Education(http_client)
81
- self.kernels = KaggleClient.Kernels(http_client)
82
- self.models = KaggleClient.Models(http_client)
83
- self.search = KaggleClient.Search(http_client)
84
- self.security = KaggleClient.Security(http_client)
85
- self.users = KaggleClient.Users(http_client)
86
- self.username = username
87
- self.password = password
88
- self.api_token = api_token
89
-
90
- def http_client(self) -> str:
91
- return self._http_client
92
-
93
- def _renew_iap_token(self) -> str:
94
- return self.admin.admin_client.renew_iap_token()
95
-
96
- def __enter__(self):
97
- self._http_client.__enter__()
98
- return self
99
-
100
- def __exit__(self, exc_type, exc_value, tb):
101
- self._http_client.__exit__(exc_type, exc_value, tb)
kagglesdk/kaggle_creds.py DELETED
@@ -1,148 +0,0 @@
1
- import json
2
- import os
3
- from datetime import datetime, timedelta, timezone
4
- from kagglesdk.kaggle_client import KaggleClient
5
- from kagglesdk.security.types.oauth_service import IntrospectTokenRequest
6
- from kagglesdk.users.types.account_service import (
7
- ApiVersion,
8
- GenerateAccessTokenRequest,
9
- GenerateAccessTokenResponse,
10
- ExpireApiTokenRequest,
11
- )
12
-
13
-
14
- class KaggleCredentials:
15
- DEFAULT_CREDENTIALS_FILE = "~/.kaggle/credentials.json"
16
- DEFAULT_ACCESS_TOKEN_EXPIRATION = timedelta(hours=12)
17
-
18
- def __init__(
19
- self,
20
- client: KaggleClient,
21
- refresh_token: str = None,
22
- access_token: str = None,
23
- access_token_expiration: datetime = None,
24
- username: str = None,
25
- scopes: list[str] = None,
26
- ):
27
- self._client = client
28
- self._refresh_token = refresh_token
29
- self._access_token = access_token
30
- self._access_token_expiration = access_token_expiration
31
- self._username = username
32
- self._scopes = scopes if scopes is not None else []
33
-
34
- @classmethod
35
- def load(cls, client: KaggleClient, file_path: str = None) -> "KaggleCredentials":
36
- file_path = os.path.expanduser(file_path or KaggleCredentials.DEFAULT_CREDENTIALS_FILE)
37
- if not os.path.exists(file_path):
38
- return None
39
-
40
- try:
41
- with open(file_path, "r") as f:
42
- data = json.load(f)
43
- except (json.JSONDecodeError, KeyError):
44
- return None
45
-
46
- refresh_token = data.get("refresh_token")
47
- if not refresh_token:
48
- return None
49
-
50
- access_token_expiration = data.get("access_token_expiration")
51
- if access_token_expiration:
52
- access_token_expiration = datetime.fromisoformat(access_token_expiration)
53
- else:
54
- access_token_expiration = None
55
-
56
- return cls(
57
- client=client,
58
- refresh_token=refresh_token,
59
- access_token=data.get("access_token"),
60
- access_token_expiration=access_token_expiration,
61
- username=data.get("username"),
62
- scopes=data.get("scopes"),
63
- )
64
-
65
- def delete(self, file_path=DEFAULT_CREDENTIALS_FILE) -> None:
66
- file_path = os.path.expanduser(file_path)
67
- if os.path.exists(file_path):
68
- os.remove(file_path)
69
-
70
- def save(self, file_path=DEFAULT_CREDENTIALS_FILE) -> None:
71
- if not self._refresh_token:
72
- raise Exception("Missing refresh token")
73
-
74
- file_path = os.path.expanduser(file_path)
75
- dir_name = os.path.dirname(file_path)
76
- if not os.path.exists(dir_name):
77
- os.makedirs(dir_name)
78
-
79
- data = {
80
- "refresh_token": self._refresh_token,
81
- "access_token": self._access_token or "",
82
- "access_token_expiration": (
83
- self._access_token_expiration.isoformat() if self._access_token_expiration else ""
84
- ),
85
- "username": self._username or "",
86
- "scopes": self._scopes or [],
87
- }
88
-
89
- with open(file_path, "w") as f:
90
- json.dump(data, f, indent=2)
91
-
92
- try:
93
- os.chmod(file_path, 0o600)
94
- except OSError:
95
- pass # Ignore errors, especially on Windows
96
-
97
- def introspect(self) -> str:
98
- request = IntrospectTokenRequest()
99
- request.token = self._access_token
100
- response = self._client.security.oauth_client.introspect_token(request)
101
-
102
- if not response.active or not response.username:
103
- raise Exception("Authentication failed.")
104
-
105
- self._username = response.username
106
- return response.username
107
-
108
- def refresh_access_token(self) -> None:
109
- if not self._refresh_token:
110
- raise Exception("Missing refresh token")
111
-
112
- response = self.generate_access_token()
113
- self._access_token_expiration = datetime.now(timezone.utc) + timedelta(seconds=response.expires_in)
114
- self._access_token = response.token
115
- self.save()
116
-
117
- def access_token_has_expired(self) -> bool:
118
- return not self._access_token_expiration or self._access_token_expiration < datetime.now(
119
- timezone.utc
120
- ) - timedelta(minutes=30)
121
-
122
- def get_access_token(self) -> str:
123
- if not self._access_token or self.access_token_has_expired():
124
- if not self._refresh_token:
125
- return None
126
- self.refresh_access_token()
127
- return self._access_token
128
-
129
- def generate_access_token(self, expiration_duration: timedelta = None) -> GenerateAccessTokenResponse:
130
- if not self._refresh_token:
131
- return None
132
- request = GenerateAccessTokenRequest()
133
- request.refresh_token = self._refresh_token
134
- request.api_version = ApiVersion.API_VERSION_V1
135
- request.expiration_duration = expiration_duration or KaggleCredentials.DEFAULT_ACCESS_TOKEN_EXPIRATION
136
- return self._client.users.account_client.generate_access_token(request)
137
-
138
- def revoke_token(self, reason: str) -> None:
139
- if not self._refresh_token:
140
- return
141
- request = ExpireApiTokenRequest()
142
- request.token = self._refresh_token
143
- request.reason = reason
144
- self._client.users.account_client.expire_api_token(request)
145
- self.delete()
146
-
147
- def get_username(self) -> str:
148
- return self._username