kaggle 1.7.4.2__py3-none-any.whl → 1.7.4.5__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 (40) hide show
  1. kaggle/api/kaggle_api.py +92 -79
  2. kaggle/api/kaggle_api_extended.py +907 -876
  3. kaggle/configuration.py +3 -3
  4. kaggle/models/dataset_column.py +58 -49
  5. kaggle/models/dataset_new_request.py +47 -31
  6. kaggle/models/dataset_new_version_request.py +56 -31
  7. kaggle/models/dataset_update_settings_request.py +58 -32
  8. kaggle/models/kernel_push_request.py +86 -51
  9. kaggle/models/model_instance_new_version_request.py +20 -12
  10. kaggle/models/model_instance_update_request.py +68 -37
  11. kaggle/models/model_new_instance_request.py +85 -47
  12. kaggle/models/model_new_request.py +26 -19
  13. kaggle/models/model_update_request.py +34 -23
  14. kaggle/models/start_blob_upload_request.py +60 -49
  15. kaggle/models/start_blob_upload_response.py +27 -22
  16. kaggle/models/upload_file.py +33 -31
  17. {kaggle-1.7.4.2.dist-info → kaggle-1.7.4.5.dist-info}/METADATA +1 -1
  18. {kaggle-1.7.4.2.dist-info → kaggle-1.7.4.5.dist-info}/RECORD +40 -31
  19. kagglesdk/__init__.py +1 -1
  20. kagglesdk/datasets/types/dataset_api_service.py +16 -0
  21. kagglesdk/kaggle_client.py +12 -0
  22. kagglesdk/kaggle_env.py +9 -11
  23. kagglesdk/kaggle_http_client.py +91 -56
  24. kagglesdk/kaggle_object.py +97 -42
  25. kagglesdk/kernels/types/kernels_api_service.py +24 -0
  26. kagglesdk/models/services/model_api_service.py +7 -6
  27. kagglesdk/models/types/model_api_service.py +31 -15
  28. kagglesdk/security/__init__.py +0 -0
  29. kagglesdk/security/services/__init__.py +0 -0
  30. kagglesdk/security/services/oauth_service.py +32 -0
  31. kagglesdk/security/types/__init__.py +0 -0
  32. kagglesdk/security/types/authentication.py +171 -0
  33. kagglesdk/security/types/oauth_service.py +394 -0
  34. kagglesdk/test/test_client.py +4 -6
  35. kagglesdk/users/services/__init__.py +0 -0
  36. kagglesdk/users/services/account_service.py +19 -0
  37. kagglesdk/users/types/account_service.py +204 -0
  38. {kaggle-1.7.4.2.dist-info → kaggle-1.7.4.5.dist-info}/WHEEL +0 -0
  39. {kaggle-1.7.4.2.dist-info → kaggle-1.7.4.5.dist-info}/entry_points.txt +0 -0
  40. {kaggle-1.7.4.2.dist-info → kaggle-1.7.4.5.dist-info}/licenses/LICENSE.txt +0 -0
@@ -5,31 +5,36 @@ from google.protobuf.field_mask_pb2 import FieldMask
5
5
 
6
6
 
7
7
  class ObjectSerializer(object):
8
+
8
9
  def __init__(self, to_dict_value, from_dict_value):
9
10
  self.to_dict_value = to_dict_value
10
11
  self.from_dict_value = from_dict_value
11
12
 
12
13
 
13
14
  class PredefinedSerializer(ObjectSerializer):
15
+
14
16
  def __init__(self):
15
17
  """Predefined objects such as int, float etc are serialized/deserialized directly."""
16
18
  ObjectSerializer.__init__(self, lambda cls, v, _: v, lambda cls, v: v)
17
19
 
18
20
 
19
21
  # Adapted from https://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-snake-case
20
- _pascal_to_upper_snake_case_regex = re.compile('((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z]))')
22
+ _pascal_to_upper_snake_case_regex = re.compile(
23
+ '((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z]))'
24
+ )
21
25
 
22
26
 
23
27
  def _pascal_case_to_upper_snake_case(string):
24
28
  return _pascal_to_upper_snake_case_regex.sub(r'_\1', string).upper()
25
29
 
26
30
 
27
- def _convert (camel_input):
31
+ def _convert(camel_input):
28
32
  words = re.findall(r'[A-Z]?[a-z]+|[A-Z]{2,}(?=[A-Z][a-z]|\d|\W|$)|\d+', camel_input)
29
33
  return '_'.join(map(str.lower, words))
30
34
 
31
35
 
32
36
  class EnumSerializer(ObjectSerializer):
37
+
33
38
  def __init__(self):
34
39
  """
35
40
  Enum objects are serialized using their ".name" field and deserialized by indexing the string in the Enum type.
@@ -40,21 +45,23 @@ class EnumSerializer(ObjectSerializer):
40
45
  foo.name # => returns "TEST"
41
46
  Foo["TEST"] # => returns Foo.TEST enum value.
42
47
  """
43
- ObjectSerializer.__init__(self,
44
- lambda cls, v, _: EnumSerializer._to_str(cls, v),
45
- lambda cls, v: EnumSerializer._from_str(cls, v))
48
+ ObjectSerializer.__init__(
49
+ self,
50
+ lambda cls, v, _: EnumSerializer._to_str(cls, v),
51
+ lambda cls, v: EnumSerializer._from_str(cls, v),
52
+ )
46
53
 
47
54
  @staticmethod
48
55
  def _to_str(cls, v):
49
56
  # "v" corresponds to an enum instance: Example foo or Foo.Test above.
50
57
  # "cls" corresponds to the enum type Foo above.
51
- #enum_prefix = f'{_pascal_case_to_upper_snake_case(cls.__name__)}_'
52
- #if v.name.startswith(enum_prefix):
58
+ # enum_prefix = f'{_pascal_case_to_upper_snake_case(cls.__name__)}_'
59
+ # if v.name.startswith(enum_prefix):
53
60
  # return v.name
54
- #return f'{enum_prefix}{v.name}'
61
+ # return f'{enum_prefix}{v.name}'
55
62
  enum_prefix = f'{_pascal_case_to_upper_snake_case(cls.__name__)}_'
56
63
  if v.name.find(enum_prefix) == 0:
57
- return v.name[len(enum_prefix):].lower()
64
+ return v.name[len(enum_prefix) :].lower()
58
65
  return v.name
59
66
 
60
67
  @staticmethod
@@ -64,13 +71,13 @@ class EnumSerializer(ObjectSerializer):
64
71
  # enum_items = {item.name: item for item in cls}
65
72
  # if v in enum_items:
66
73
  # return enum_items[v]
67
- #
74
+ #
68
75
  # # Try with enum prefix. Example: EnvironmentType.JSON -> "ENVIRONMENT_TYPE_JSON"
69
76
  # enum_prefix = _pascal_case_to_upper_snake_case(cls.__name__)
70
77
  # if v.startswith(enum_prefix):
71
78
  # ix_start = len(enum_prefix) + 1
72
79
  # return enum_items[v[ix_start:]]
73
- #
80
+ #
74
81
  # return enum_items[f'{enum_prefix}_{v}']
75
82
  try:
76
83
  return cls[v]
@@ -89,33 +96,49 @@ class EnumSerializer(ObjectSerializer):
89
96
 
90
97
 
91
98
  class ListSerializer(ObjectSerializer):
99
+
92
100
  def __init__(self, item_serializer: ObjectSerializer):
93
101
  """
94
102
  Lists are serialized based on the type they contain. Since objects are generated from proto files, a list always
95
103
  contains objects of the same type, which is serialized/deserialized using "item_serializer".
96
104
  """
97
- ObjectSerializer.__init__(self,
98
- lambda cls, l, ignore_defaults: [item_serializer.to_dict_value(cls, v, ignore_defaults) for v in l],
99
- lambda cls, l: [item_serializer.from_dict_value(cls, v) for v in l])
105
+ ObjectSerializer.__init__(
106
+ self,
107
+ lambda cls, l, ignore_defaults: [
108
+ item_serializer.to_dict_value(cls, v, ignore_defaults) for v in l
109
+ ],
110
+ lambda cls, l: [item_serializer.from_dict_value(cls, v) for v in l],
111
+ )
100
112
 
101
113
 
102
114
  class MapSerializer(ObjectSerializer):
115
+
103
116
  def __init__(self, item_serializer: ObjectSerializer):
104
117
  """
105
118
  Maps are serialized based on type of their values. Since maps keys are always predefined types, we don't need a
106
119
  serializer for them.
107
120
  """
108
- ObjectSerializer.__init__(self,
109
- lambda cls, d, ignore_defaults: {k: item_serializer.to_dict_value(cls, v, ignore_defaults) for k, v in d.items()},
110
- lambda cls, d: {k: item_serializer.from_dict_value(cls, v) for k, v in d.items()})
121
+ ObjectSerializer.__init__(
122
+ self,
123
+ lambda cls, d, ignore_defaults: {
124
+ k: item_serializer.to_dict_value(cls, v, ignore_defaults)
125
+ for k, v in d.items()
126
+ },
127
+ lambda cls, d: {
128
+ k: item_serializer.from_dict_value(cls, v) for k, v in d.items()
129
+ },
130
+ )
111
131
 
112
132
 
113
133
  class DateTimeSerializer(ObjectSerializer):
134
+
114
135
  def __init__(self):
115
136
  """Date times are serialized/deserialized as a string in iso format"""
116
- ObjectSerializer.__init__(self,
117
- lambda cls, dt, _: DateTimeSerializer._to_str(dt),
118
- lambda _, v: DateTimeSerializer._from_str(v))
137
+ ObjectSerializer.__init__(
138
+ self,
139
+ lambda cls, dt, _: DateTimeSerializer._to_str(dt),
140
+ lambda _, v: DateTimeSerializer._from_str(v),
141
+ )
119
142
 
120
143
  @staticmethod
121
144
  def _to_str(dt):
@@ -132,15 +155,18 @@ class DateTimeSerializer(ObjectSerializer):
132
155
  try:
133
156
  return datetime.fromisoformat(f'{dt}.{millis}')
134
157
  except ValueError:
135
- return datetime.fromisoformat(dt) # Python 3.9, 3.10
158
+ return datetime.fromisoformat(dt) # Python 3.9, 3.10
136
159
 
137
160
 
138
161
  class TimeDeltaSerializer(ObjectSerializer):
162
+
139
163
  def __init__(self):
140
164
  """Time deltas are serialized/deserialized as a string in "mm:ss" format"""
141
- ObjectSerializer.__init__(self,
142
- lambda cls, t, _: TimeDeltaSerializer._to_dict_value(t),
143
- lambda cls, v: TimeDeltaSerializer._from_dict_value(v))
165
+ ObjectSerializer.__init__(
166
+ self,
167
+ lambda cls, t, _: TimeDeltaSerializer._to_dict_value(t),
168
+ lambda cls, v: TimeDeltaSerializer._from_dict_value(v),
169
+ )
144
170
 
145
171
  @staticmethod
146
172
  def _to_dict_value(delta):
@@ -156,11 +182,14 @@ class TimeDeltaSerializer(ObjectSerializer):
156
182
 
157
183
 
158
184
  class FieldMaskSerializer(ObjectSerializer):
185
+
159
186
  def __init__(self):
160
187
  """Field masks are serialized/deserialized as a string that contains a list of paths with a comma delimiter"""
161
- ObjectSerializer.__init__(self,
162
- lambda cls, m, _: m.ToJsonString(),
163
- lambda cls, v: FieldMaskSerializer._from_joined_paths(v))
188
+ ObjectSerializer.__init__(
189
+ self,
190
+ lambda cls, m, _: m.ToJsonString(),
191
+ lambda cls, v: FieldMaskSerializer._from_joined_paths(v),
192
+ )
164
193
 
165
194
  @staticmethod
166
195
  def _from_joined_paths(joined_paths):
@@ -170,24 +199,37 @@ class FieldMaskSerializer(ObjectSerializer):
170
199
 
171
200
 
172
201
  class KaggleObjectSerializer(ObjectSerializer):
202
+
173
203
  def __init__(self):
174
204
  """
175
205
  Kaggle objects (i.e., proto-generated types that inherit from KaggleObject) have custom "to_dict" and "from_dict"
176
206
  methods that serialize/deserialize them to/from dictionaries.
177
207
  """
178
- ObjectSerializer.__init__(self,
179
- # "v" is an instance of a KaggleObject. For example: "req = ListCompetitionsRequest()".
180
- # So "req.to_dict()" returns a dictionary with keys as json field names. Example:
181
- # '{"pageSize": 10, "page": 2}'
182
- lambda cls, v, ignore_defaults: cls.to_dict(v, ignore_defaults),
183
- # "cls" is the type of a KaggleObject. For example: ListCompetitionsRequest. All
184
- # generated Kaggle objects have "from_dict" class method that takes a dict to create a
185
- # new instance of the object. See "KaggleObject" class definition below.
186
- lambda cls, v: cls.from_dict(v))
208
+ ObjectSerializer.__init__(
209
+ self,
210
+ # "v" is an instance of a KaggleObject. For example: "req = ListCompetitionsRequest()".
211
+ # So "req.to_dict()" returns a dictionary with keys as json field names. Example:
212
+ # '{"pageSize": 10, "page": 2}'
213
+ lambda cls, v, ignore_defaults: cls.to_dict(v, ignore_defaults),
214
+ # "cls" is the type of a KaggleObject. For example: ListCompetitionsRequest. All
215
+ # generated Kaggle objects have "from_dict" class method that takes a dict to create a
216
+ # new instance of the object. See "KaggleObject" class definition below.
217
+ lambda cls, v: cls.from_dict(v),
218
+ )
187
219
 
188
220
 
189
221
  class FieldMetadata(object):
190
- def __init__(self, json_name, field_name, private_field_name, field_type, default_value, serializer, optional=False):
222
+
223
+ def __init__(
224
+ self,
225
+ json_name,
226
+ field_name,
227
+ private_field_name,
228
+ field_type,
229
+ default_value,
230
+ serializer,
231
+ optional=False,
232
+ ):
191
233
  self.json_name = json_name
192
234
  self.field_name = field_name
193
235
  self.private_field_name = private_field_name
@@ -211,12 +253,17 @@ class FieldMetadata(object):
211
253
  if value == self.default_value:
212
254
  return # Ignore default values
213
255
  try:
214
- setattr(instance, self.private_field_name, self.serializer.from_dict_value(self.field_type, value))
256
+ setattr(
257
+ instance,
258
+ self.private_field_name,
259
+ self.serializer.from_dict_value(self.field_type, value),
260
+ )
215
261
  except Exception as e:
216
262
  raise
217
263
 
218
264
 
219
265
  class KaggleObject(object):
266
+
220
267
  def endpoint(self):
221
268
  raise 'Error: endpoint must be defined by the request object'
222
269
 
@@ -234,7 +281,7 @@ class KaggleObject(object):
234
281
 
235
282
  @staticmethod
236
283
  def method():
237
- return "GET"
284
+ return 'GET'
238
285
 
239
286
  def _freeze(self):
240
287
  self._is_frozen = True
@@ -245,12 +292,18 @@ class KaggleObject(object):
245
292
  object.__setattr__(self, key, value)
246
293
 
247
294
  def to_dict(self, ignore_defaults=True):
248
- kv_pairs = [(field.json_name, field.get_as_dict_item(self, ignore_defaults)) for field in self._fields]
295
+ kv_pairs = [
296
+ (field.json_name, field.get_as_dict_item(self, ignore_defaults))
297
+ for field in self._fields
298
+ ]
249
299
  return {k: v for (k, v) in kv_pairs if not ignore_defaults or v is not None}
250
300
 
251
301
  @staticmethod
252
302
  def to_field_map(self, ignore_defaults=True):
253
- kv_pairs = [(field.field_name, field.get_as_dict_item(self, ignore_defaults)) for field in self._fields]
303
+ kv_pairs = [
304
+ (field.field_name, field.get_as_dict_item(self, ignore_defaults))
305
+ for field in self._fields
306
+ ]
254
307
  return {k: v for (k, v) in kv_pairs if not ignore_defaults or v is not None}
255
308
 
256
309
  @classmethod
@@ -292,5 +345,7 @@ class KaggleObject(object):
292
345
  def _get_field(self, field_name):
293
346
  field = next((f for f in self._fields if f.field_name == field_name), None)
294
347
  if field is None:
295
- raise ValueError(f'Protocol message {self.__class__.__name__} has no "{field_name}" field.')
348
+ raise ValueError(
349
+ f'Protocol message {self.__class__.__name__} has no "{field_name}" field.'
350
+ )
296
351
  return field
@@ -1219,6 +1219,10 @@ class ApiSaveKernelRequest(KaggleObject):
1219
1219
  session_timeout_seconds (int)
1220
1220
  If specified, terminate the kernel session after this many seconds of
1221
1221
  runtime, which must be lower than the global maximum.
1222
+ priority (int)
1223
+ Sets the execution priority of this kernel session request when queued,
1224
+ lower is better (10 will get run before 100).
1225
+ Only allowed or certain clients.
1222
1226
  """
1223
1227
 
1224
1228
  def __init__(self):
@@ -1239,6 +1243,7 @@ class ApiSaveKernelRequest(KaggleObject):
1239
1243
  self._docker_image_pinning_type = None
1240
1244
  self._model_data_sources = []
1241
1245
  self._session_timeout_seconds = None
1246
+ self._priority = None
1242
1247
  self._freeze()
1243
1248
 
1244
1249
  @property
@@ -1517,6 +1522,24 @@ class ApiSaveKernelRequest(KaggleObject):
1517
1522
  raise TypeError('session_timeout_seconds must be of type int')
1518
1523
  self._session_timeout_seconds = session_timeout_seconds
1519
1524
 
1525
+ @property
1526
+ def priority(self) -> int:
1527
+ r"""
1528
+ Sets the execution priority of this kernel session request when queued,
1529
+ lower is better (10 will get run before 100).
1530
+ Only allowed or certain clients.
1531
+ """
1532
+ return self._priority or 0
1533
+
1534
+ @priority.setter
1535
+ def priority(self, priority: int):
1536
+ if priority is None:
1537
+ del self.priority
1538
+ return
1539
+ if not isinstance(priority, int):
1540
+ raise TypeError('priority must be of type int')
1541
+ self._priority = priority
1542
+
1520
1543
  def endpoint(self):
1521
1544
  path = '/api/v1/kernels/push'
1522
1545
  return path.format_map(self.to_field_map(self))
@@ -1924,6 +1947,7 @@ ApiSaveKernelRequest._fields = [
1924
1947
  FieldMetadata("dockerImagePinningType", "docker_image_pinning_type", "_docker_image_pinning_type", str, None, PredefinedSerializer(), optional=True),
1925
1948
  FieldMetadata("modelDataSources", "model_data_sources", "_model_data_sources", str, [], ListSerializer(PredefinedSerializer())),
1926
1949
  FieldMetadata("sessionTimeoutSeconds", "session_timeout_seconds", "_session_timeout_seconds", int, None, PredefinedSerializer(), optional=True),
1950
+ FieldMetadata("priority", "priority", "_priority", int, None, PredefinedSerializer(), optional=True),
1927
1951
  ]
1928
1952
 
1929
1953
  ApiSaveKernelResponse._fields = [
@@ -1,6 +1,6 @@
1
1
  from kagglesdk.common.types.http_redirect import HttpRedirect
2
2
  from kagglesdk.kaggle_http_client import KaggleHttpClient
3
- from kagglesdk.models.types.model_api_service import ApiCreateModelInstanceRequest, ApiCreateModelInstanceVersionRequest, ApiCreateModelRequest, ApiCreateModelResponse, ApiDeleteModelInstanceRequest, ApiDeleteModelInstanceVersionRequest, ApiDeleteModelRequest, ApiDeleteModelResponse, ApiDownloadModelInstanceVersionRequest, ApiGetModelInstanceRequest, ApiGetModelRequest, ApiListModelGatingUserConsentsRequest, ApiListModelGatingUserConsentsResponse, ApiListModelInstanceVersionFilesRequest, ApiListModelInstanceVersionFilesResponse, ApiListModelsRequest, ApiListModelsResponse, ApiModel, ApiModelInstance, ApiReviewGatingUserConsentRequest, ApiUpdateModelInstanceRequest, ApiUpdateModelRequest, ApiUpdateModelResponse, ApiUploadModelFileRequest, ApiUploadModelFileResponse, CreateModelSigningTokenRequest, CreateModelSigningTokenResponse, KeysRequest, KeysResponse, WellKnowEndpointRequest, WellKnowEndpointResponse
3
+ from kagglesdk.models.types.model_api_service import ApiCreateModelInstanceRequest, ApiCreateModelInstanceVersionRequest, ApiCreateModelRequest, ApiCreateModelResponse, ApiDeleteModelInstanceRequest, ApiDeleteModelInstanceVersionRequest, ApiDeleteModelRequest, ApiDeleteModelResponse, ApiDownloadModelInstanceVersionRequest, ApiGetModelInstanceRequest, ApiGetModelRequest, ApiListModelGatingUserConsentsRequest, ApiListModelGatingUserConsentsResponse, ApiListModelInstanceVersionFilesRequest, ApiListModelInstanceVersionFilesResponse, ApiListModelsRequest, ApiListModelsResponse, ApiModel, ApiModelInstance, ApiReviewModelGatingUserConsentRequest, ApiUpdateModelInstanceRequest, ApiUpdateModelRequest, ApiUpdateModelResponse, ApiUploadModelFileRequest, ApiUploadModelFileResponse, CreateModelSigningTokenRequest, CreateModelSigningTokenResponse, KeysRequest, KeysResponse, WellKnowEndpointRequest, WellKnowEndpointResponse
4
4
 
5
5
  class ModelApiClient(object):
6
6
 
@@ -240,16 +240,17 @@ class ModelApiClient(object):
240
240
 
241
241
  return self._client.call("models.ModelApiService", "ApiListModelGatingUserConsents", request, ApiListModelGatingUserConsentsResponse)
242
242
 
243
- def review_gating_user_consent(self, request: ApiReviewGatingUserConsentRequest = None):
243
+ def review_model_gating_user_consent(self, request: ApiReviewModelGatingUserConsentRequest = None):
244
244
  r"""
245
- Review the user consents for an agreement.
245
+ Review the user consents for a gated model, under the model's current
246
+ active agreement.
246
247
 
247
248
  Args:
248
- request (ApiReviewGatingUserConsentRequest):
249
+ request (ApiReviewModelGatingUserConsentRequest):
249
250
  The request object; initialized to empty instance if not specified.
250
251
  """
251
252
 
252
253
  if request is None:
253
- request = ApiReviewGatingUserConsentRequest()
254
+ request = ApiReviewModelGatingUserConsentRequest()
254
255
 
255
- self._client.call("models.ModelApiService", "ApiReviewGatingUserConsent", request, None)
256
+ self._client.call("models.ModelApiService", "ApiReviewModelGatingUserConsent", request, None)
@@ -2226,34 +2226,49 @@ class ApiModelInstance(KaggleObject):
2226
2226
  self._total_uncompressed_bytes = total_uncompressed_bytes
2227
2227
 
2228
2228
 
2229
- class ApiReviewGatingUserConsentRequest(KaggleObject):
2229
+ class ApiReviewModelGatingUserConsentRequest(KaggleObject):
2230
2230
  r"""
2231
2231
  Attributes:
2232
- agreement_id (int)
2232
+ owner_slug (str)
2233
+ model_slug (str)
2233
2234
  user_name (str)
2234
2235
  review_status (GatingAgreementRequestsReviewStatus)
2235
2236
  publisher_notes (str)
2236
2237
  """
2237
2238
 
2238
2239
  def __init__(self):
2239
- self._agreement_id = 0
2240
+ self._owner_slug = ""
2241
+ self._model_slug = ""
2240
2242
  self._user_name = ""
2241
2243
  self._review_status = GatingAgreementRequestsReviewStatus.GATING_AGREEMENT_REQUESTS_REVIEW_STATUS_UNSPECIFIED
2242
2244
  self._publisher_notes = None
2243
2245
  self._freeze()
2244
2246
 
2245
2247
  @property
2246
- def agreement_id(self) -> int:
2247
- return self._agreement_id
2248
+ def owner_slug(self) -> str:
2249
+ return self._owner_slug
2248
2250
 
2249
- @agreement_id.setter
2250
- def agreement_id(self, agreement_id: int):
2251
- if agreement_id is None:
2252
- del self.agreement_id
2251
+ @owner_slug.setter
2252
+ def owner_slug(self, owner_slug: str):
2253
+ if owner_slug is None:
2254
+ del self.owner_slug
2253
2255
  return
2254
- if not isinstance(agreement_id, int):
2255
- raise TypeError('agreement_id must be of type int')
2256
- self._agreement_id = agreement_id
2256
+ if not isinstance(owner_slug, str):
2257
+ raise TypeError('owner_slug must be of type str')
2258
+ self._owner_slug = owner_slug
2259
+
2260
+ @property
2261
+ def model_slug(self) -> str:
2262
+ return self._model_slug
2263
+
2264
+ @model_slug.setter
2265
+ def model_slug(self, model_slug: str):
2266
+ if model_slug is None:
2267
+ del self.model_slug
2268
+ return
2269
+ if not isinstance(model_slug, str):
2270
+ raise TypeError('model_slug must be of type str')
2271
+ self._model_slug = model_slug
2257
2272
 
2258
2273
  @property
2259
2274
  def user_name(self) -> str:
@@ -2295,7 +2310,7 @@ class ApiReviewGatingUserConsentRequest(KaggleObject):
2295
2310
  self._publisher_notes = publisher_notes
2296
2311
 
2297
2312
  def endpoint(self):
2298
- path = '/api/v1/gating/{agreement_id}/user-consent/review'
2313
+ path = '/api/v1/models/{owner_slug}/{model_slug}/user-consents/review'
2299
2314
  return path.format_map(self.to_field_map(self))
2300
2315
 
2301
2316
 
@@ -3599,8 +3614,9 @@ ApiModelInstance._fields = [
3599
3614
  FieldMetadata("totalUncompressedBytes", "total_uncompressed_bytes", "_total_uncompressed_bytes", int, 0, PredefinedSerializer()),
3600
3615
  ]
3601
3616
 
3602
- ApiReviewGatingUserConsentRequest._fields = [
3603
- FieldMetadata("agreementId", "agreement_id", "_agreement_id", int, 0, PredefinedSerializer()),
3617
+ ApiReviewModelGatingUserConsentRequest._fields = [
3618
+ FieldMetadata("ownerSlug", "owner_slug", "_owner_slug", str, "", PredefinedSerializer()),
3619
+ FieldMetadata("modelSlug", "model_slug", "_model_slug", str, "", PredefinedSerializer()),
3604
3620
  FieldMetadata("userName", "user_name", "_user_name", str, "", PredefinedSerializer()),
3605
3621
  FieldMetadata("reviewStatus", "review_status", "_review_status", GatingAgreementRequestsReviewStatus, GatingAgreementRequestsReviewStatus.GATING_AGREEMENT_REQUESTS_REVIEW_STATUS_UNSPECIFIED, EnumSerializer()),
3606
3622
  FieldMetadata("publisherNotes", "publisher_notes", "_publisher_notes", str, None, PredefinedSerializer(), optional=True),
File without changes
File without changes
@@ -0,0 +1,32 @@
1
+ from kagglesdk.common.types.http_redirect import HttpRedirect
2
+ from kagglesdk.kaggle_http_client import KaggleHttpClient
3
+ from kagglesdk.security.types.oauth_service import ExchangeOAuthTokenRequest, ExchangeOAuthTokenResponse, StartOAuthFlowRequest
4
+
5
+ class OAuthClient(object):
6
+
7
+ def __init__(self, client: KaggleHttpClient):
8
+ self._client = client
9
+
10
+ def start_oauth_flow(self, request: StartOAuthFlowRequest = None) -> HttpRedirect:
11
+ r"""
12
+ Args:
13
+ request (StartOAuthFlowRequest):
14
+ The request object; initialized to empty instance if not specified.
15
+ """
16
+
17
+ if request is None:
18
+ request = StartOAuthFlowRequest()
19
+
20
+ return self._client.call("security.OAuthService", "StartOAuthFlow", request, HttpRedirect)
21
+
22
+ def exchange_oauth_token(self, request: ExchangeOAuthTokenRequest = None) -> ExchangeOAuthTokenResponse:
23
+ r"""
24
+ Args:
25
+ request (ExchangeOAuthTokenRequest):
26
+ The request object; initialized to empty instance if not specified.
27
+ """
28
+
29
+ if request is None:
30
+ request = ExchangeOAuthTokenRequest()
31
+
32
+ return self._client.call("security.OAuthService", "ExchangeOAuthToken", request, ExchangeOAuthTokenResponse)
File without changes
@@ -0,0 +1,171 @@
1
+ from kagglesdk.kaggle_object import *
2
+ from typing import Optional, List
3
+
4
+ class AuthorizationScope(KaggleObject):
5
+ r"""
6
+ Attributes:
7
+ resource_id (int)
8
+ permission (AuthorizationPermissionScope)
9
+ role (AuthorizationRoleScope)
10
+ """
11
+
12
+ def __init__(self):
13
+ self._resource_id = 0
14
+ self._permission = None
15
+ self._role = None
16
+ self._freeze()
17
+
18
+ @property
19
+ def resource_id(self) -> int:
20
+ return self._resource_id
21
+
22
+ @resource_id.setter
23
+ def resource_id(self, resource_id: int):
24
+ if resource_id is None:
25
+ del self.resource_id
26
+ return
27
+ if not isinstance(resource_id, int):
28
+ raise TypeError('resource_id must be of type int')
29
+ self._resource_id = resource_id
30
+
31
+ @property
32
+ def permission(self) -> Optional['AuthorizationPermissionScope']:
33
+ return self._permission or None
34
+
35
+ @permission.setter
36
+ def permission(self, permission: Optional['AuthorizationPermissionScope']):
37
+ if permission is None:
38
+ del self.permission
39
+ return
40
+ if not isinstance(permission, AuthorizationPermissionScope):
41
+ raise TypeError('permission must be of type AuthorizationPermissionScope')
42
+ del self.role
43
+ self._permission = permission
44
+
45
+ @property
46
+ def role(self) -> Optional['AuthorizationRoleScope']:
47
+ return self._role or None
48
+
49
+ @role.setter
50
+ def role(self, role: Optional['AuthorizationRoleScope']):
51
+ if role is None:
52
+ del self.role
53
+ return
54
+ if not isinstance(role, AuthorizationRoleScope):
55
+ raise TypeError('role must be of type AuthorizationRoleScope')
56
+ del self.permission
57
+ self._role = role
58
+
59
+
60
+ class AuthorizationPermissionScope(KaggleObject):
61
+ r"""
62
+ Attributes:
63
+ name (str)
64
+ description (str)
65
+ """
66
+
67
+ def __init__(self):
68
+ self._name = ""
69
+ self._description = None
70
+ self._freeze()
71
+
72
+ @property
73
+ def name(self) -> str:
74
+ return self._name
75
+
76
+ @name.setter
77
+ def name(self, name: str):
78
+ if name is None:
79
+ del self.name
80
+ return
81
+ if not isinstance(name, str):
82
+ raise TypeError('name must be of type str')
83
+ self._name = name
84
+
85
+ @property
86
+ def description(self) -> str:
87
+ return self._description or ""
88
+
89
+ @description.setter
90
+ def description(self, description: str):
91
+ if description is None:
92
+ del self.description
93
+ return
94
+ if not isinstance(description, str):
95
+ raise TypeError('description must be of type str')
96
+ self._description = description
97
+
98
+
99
+ class AuthorizationRoleScope(KaggleObject):
100
+ r"""
101
+ Attributes:
102
+ name (str)
103
+ description (str)
104
+ permissions (AuthorizationPermissionScope)
105
+ """
106
+
107
+ def __init__(self):
108
+ self._name = ""
109
+ self._description = None
110
+ self._permissions = []
111
+ self._freeze()
112
+
113
+ @property
114
+ def name(self) -> str:
115
+ return self._name
116
+
117
+ @name.setter
118
+ def name(self, name: str):
119
+ if name is None:
120
+ del self.name
121
+ return
122
+ if not isinstance(name, str):
123
+ raise TypeError('name must be of type str')
124
+ self._name = name
125
+
126
+ @property
127
+ def description(self) -> str:
128
+ return self._description or ""
129
+
130
+ @description.setter
131
+ def description(self, description: str):
132
+ if description is None:
133
+ del self.description
134
+ return
135
+ if not isinstance(description, str):
136
+ raise TypeError('description must be of type str')
137
+ self._description = description
138
+
139
+ @property
140
+ def permissions(self) -> Optional[List[Optional['AuthorizationPermissionScope']]]:
141
+ return self._permissions
142
+
143
+ @permissions.setter
144
+ def permissions(self, permissions: Optional[List[Optional['AuthorizationPermissionScope']]]):
145
+ if permissions is None:
146
+ del self.permissions
147
+ return
148
+ if not isinstance(permissions, list):
149
+ raise TypeError('permissions must be of type list')
150
+ if not all([isinstance(t, AuthorizationPermissionScope) for t in permissions]):
151
+ raise TypeError('permissions must contain only items of type AuthorizationPermissionScope')
152
+ self._permissions = permissions
153
+
154
+
155
+ AuthorizationScope._fields = [
156
+ FieldMetadata("resourceId", "resource_id", "_resource_id", int, 0, PredefinedSerializer()),
157
+ FieldMetadata("permission", "permission", "_permission", AuthorizationPermissionScope, None, KaggleObjectSerializer(), optional=True),
158
+ FieldMetadata("role", "role", "_role", AuthorizationRoleScope, None, KaggleObjectSerializer(), optional=True),
159
+ ]
160
+
161
+ AuthorizationPermissionScope._fields = [
162
+ FieldMetadata("name", "name", "_name", str, "", PredefinedSerializer()),
163
+ FieldMetadata("description", "description", "_description", str, None, PredefinedSerializer(), optional=True),
164
+ ]
165
+
166
+ AuthorizationRoleScope._fields = [
167
+ FieldMetadata("name", "name", "_name", str, "", PredefinedSerializer()),
168
+ FieldMetadata("description", "description", "_description", str, None, PredefinedSerializer(), optional=True),
169
+ FieldMetadata("permissions", "permissions", "_permissions", AuthorizationPermissionScope, [], ListSerializer(KaggleObjectSerializer())),
170
+ ]
171
+