kaggle 1.7.3b1__py3-none-any.whl → 1.7.4.1__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.
@@ -34,7 +34,8 @@ import requests
34
34
  import urllib3.exceptions as urllib3_exceptions
35
35
  from requests import RequestException
36
36
 
37
- from kaggle.models.kaggle_models_extended import ResumableUploadResult, File
37
+ from kaggle.models.kaggle_models_extended import ResumableUploadResult, File, \
38
+ Kernel
38
39
 
39
40
  from requests.adapters import HTTPAdapter
40
41
  from slugify import slugify
@@ -61,7 +62,8 @@ from kagglesdk.datasets.types.dataset_types import DatasetSettings, \
61
62
  SettingsLicense, DatasetCollaborator
62
63
  from kagglesdk.kernels.types.kernels_api_service import ApiListKernelsRequest, \
63
64
  ApiListKernelFilesRequest, ApiSaveKernelRequest, ApiGetKernelRequest, \
64
- ApiListKernelSessionOutputRequest, ApiGetKernelSessionStatusRequest
65
+ ApiListKernelSessionOutputRequest, ApiGetKernelSessionStatusRequest, \
66
+ ApiSaveKernelResponse
65
67
  from kagglesdk.kernels.types.kernels_enums import KernelsListSortType, \
66
68
  KernelsListViewType
67
69
  from kagglesdk.models.types.model_api_service import ApiListModelsRequest, \
@@ -251,7 +253,7 @@ class ResumableFileUpload(object):
251
253
 
252
254
 
253
255
  class KaggleApi:
254
- __version__ = '1.7.3b1'
256
+ __version__ = '1.7.4.1'
255
257
 
256
258
  CONFIG_NAME_PROXY = 'proxy'
257
259
  CONFIG_NAME_COMPETITION = 'competition'
@@ -290,7 +292,7 @@ class KaggleApi:
290
292
 
291
293
  args = {} # DEBUG Add --local to use localhost
292
294
  if os.environ.get('KAGGLE_API_ENVIRONMENT') == 'LOCALHOST':
293
- args = {'--local'}
295
+ args = {'--verbose','--local'}
294
296
 
295
297
  # Kernels valid types
296
298
  valid_push_kernel_types = ['script', 'notebook']
@@ -700,7 +702,16 @@ class KaggleApi:
700
702
  return enum_class[item]
701
703
  except KeyError:
702
704
  prefix = self.camel_to_snake(enum_class.__name__).upper()
703
- return enum_class[f'{prefix}_{self.camel_to_snake(item_name).upper()}']
705
+ full_name = f'{prefix}_{self.camel_to_snake(item_name).upper()}'
706
+ try:
707
+ return enum_class[full_name]
708
+ except KeyError:
709
+ # Handle PY_TORCH vs PYTORCH, etc.
710
+ full_name = full_name.replace('_', '')
711
+ for item in vars(enum_class):
712
+ if item.replace('_', '') == full_name:
713
+ return enum_class[item]
714
+ raise
704
715
 
705
716
  def short_enum_name(self, value):
706
717
  full_name = str(value)
@@ -792,8 +803,47 @@ class KaggleApi:
792
803
  else:
793
804
  print('No competitions found')
794
805
 
806
+ def competition_submit_code(self, file_name, message, competition, kernel=None, kernel_version=None, quiet=False):
807
+ """ Submit to a code competition.
808
+
809
+ Parameters
810
+ ==========
811
+ file_name: the name of the output file created by the kernel (not used for packages)
812
+ message: the submission description
813
+ competition: the competition name; if not given use the 'competition' config value
814
+ kernel: the <owner>/<notebook> of the notebook to use for a code competition
815
+ kernel_version: the version number, returned by 'kaggle kernels push ...'
816
+ quiet: suppress verbose output (default is False)
817
+ """
818
+ if competition is None:
819
+ competition = self.get_config_value(self.CONFIG_NAME_COMPETITION)
820
+ if competition is not None and not quiet:
821
+ print('Using competition: ' + competition)
822
+ if competition is None:
823
+ raise ValueError('No competition specified')
824
+
825
+ if kernel is None:
826
+ raise ValueError('No kernel specified')
827
+ else:
828
+ with self.build_kaggle_client() as kaggle:
829
+ items = kernel.split('/')
830
+ if len(items) != 2:
831
+ raise ValueError('The kernel must be specified as <owner>/<notebook>')
832
+ submit_request = ApiCreateCodeSubmissionRequest()
833
+ submit_request.file_name = file_name
834
+ submit_request.competition_name = competition
835
+ submit_request._kernel_owner = items[0]
836
+ submit_request.kernel_slug = items[1]
837
+ if kernel_version:
838
+ submit_request.kernel_version = int(kernel_version)
839
+ if message:
840
+ submit_request.submission_description = message
841
+ submit_response = kaggle.competitions.competition_api_client.create_code_submission(
842
+ submit_request)
843
+ return submit_response
844
+
795
845
  def competition_submit(self, file_name, message, competition, quiet=False):
796
- """ Submit a competition.
846
+ """ Submit to a competition.
797
847
 
798
848
  Parameters
799
849
  ==========
@@ -810,6 +860,8 @@ class KaggleApi:
810
860
  if competition is None:
811
861
  raise ValueError('No competition specified')
812
862
  else:
863
+ if file_name is None:
864
+ raise ValueError('No file specified')
813
865
  with self.build_kaggle_client() as kaggle:
814
866
  request = ApiStartSubmissionUploadRequest()
815
867
  request.competition_name = competition
@@ -828,15 +880,18 @@ class KaggleApi:
828
880
  submit_request = ApiCreateSubmissionRequest()
829
881
  submit_request.competition_name = competition
830
882
  submit_request.blob_file_tokens = response.token
831
- submit_request.submission_description = message
883
+ if message:
884
+ submit_request.submission_description = message
832
885
  submit_response = kaggle.competitions.competition_api_client.create_submission(
833
886
  submit_request)
834
887
  return submit_response
835
888
 
836
889
  def competition_submit_cli(self,
837
- file_name,
838
- message,
839
- competition,
890
+ file_name=None,
891
+ message=None,
892
+ competition=None,
893
+ kernel=None,
894
+ version=None,
840
895
  competition_opt=None,
841
896
  quiet=False):
842
897
  """ Submit a competition using the client. Arguments are same as for
@@ -847,12 +902,20 @@ class KaggleApi:
847
902
  file_name: the competition metadata file
848
903
  message: the submission description
849
904
  competition: the competition name; if not given use the 'competition' config value
905
+ kernel: the name of the kernel to submit to a code competition
906
+ version: the version of the kernel to submit to a code competition, e.g. '1'
850
907
  quiet: suppress verbose output (default is False)
851
908
  competition_opt: an alternative competition option provided by cli
852
909
  """
910
+ if kernel and not version or version and not kernel:
911
+ raise ValueError('Code competition submissions require both the output file name and the version label')
853
912
  competition = competition or competition_opt
854
913
  try:
855
- submit_result = self.competition_submit(file_name, message, competition,
914
+ if kernel:
915
+ submit_result = self.competition_submit_code(file_name, message, competition,
916
+ kernel, version, quiet)
917
+ else:
918
+ submit_result = self.competition_submit(file_name, message, competition,
856
919
  quiet)
857
920
  except RequestException as e:
858
921
  if e.response and e.response.status_code == 404:
@@ -1665,16 +1728,22 @@ class KaggleApi:
1665
1728
  dataset = dataset or dataset_opt
1666
1729
 
1667
1730
  owner_slug, dataset_slug, _ = self.split_dataset_string(dataset)
1668
- metadata = self.process_response(
1669
- self.metadata_get_with_http_info(owner_slug, dataset_slug))
1731
+ request = ApiGetDatasetMetadataRequest()
1732
+ request.owner_slug = owner_slug
1733
+ request.dataset_slug = dataset_slug
1734
+ with self.build_kaggle_client() as kaggle:
1735
+ response = kaggle.datasets.dataset_api_client.get_dataset_metadata(request)
1736
+ if response.error_message:
1737
+ raise Exception(response.error_message)
1738
+ metadata = response.info
1670
1739
 
1671
- if 'info' in metadata and 'licenses' in metadata['info']:
1740
+ if metadata and metadata.licenses:
1672
1741
  # license_objs format is like: [{ 'name': 'CC0-1.0' }]
1673
- license_objs = metadata['info']['licenses']
1742
+ license_objs = metadata.licenses
1674
1743
  licenses = [
1675
- license_obj['name']
1744
+ license_obj.name
1676
1745
  for license_obj in license_objs
1677
- if 'name' in license_obj
1746
+ if license_obj.name
1678
1747
  ]
1679
1748
  else:
1680
1749
  licenses = [
@@ -2297,10 +2366,6 @@ class KaggleApi:
2297
2366
  print('No files found')
2298
2367
  return
2299
2368
 
2300
- if result.error_message:
2301
- print(result.error_message)
2302
- return
2303
-
2304
2369
  next_page_token = result.nextPageToken
2305
2370
  if next_page_token:
2306
2371
  print('Next Page Token = {}'.format(next_page_token))
@@ -2369,12 +2434,13 @@ class KaggleApi:
2369
2434
  meta_file = self.kernels_initialize(folder)
2370
2435
  print('Kernel metadata template written to: ' + meta_file)
2371
2436
 
2372
- def kernels_push(self, folder, timeout):
2437
+ def kernels_push(self, folder, timeout=None) -> ApiSaveKernelResponse:
2373
2438
  """ Read the metadata file and kernel files from a notebook, validate
2374
2439
  both, and use the Kernel API to push to Kaggle if all is valid.
2375
2440
  Parameters
2376
2441
  ==========
2377
2442
  folder: the path of the folder
2443
+ timeout: maximum run time iin seconds
2378
2444
  """
2379
2445
  if not os.path.isdir(folder):
2380
2446
  raise ValueError('Invalid folder: ' + folder)
@@ -2465,7 +2531,7 @@ class KaggleApi:
2465
2531
  # but the server expects just one
2466
2532
  if 'source' in cell and isinstance(cell['source'], list):
2467
2533
  cell['source'] = ''.join(cell['source'])
2468
- script_body = json.dumps(json_body).replace("'", "\\'")
2534
+ script_body = json.dumps(json_body)
2469
2535
 
2470
2536
  with self.build_kaggle_client() as kaggle:
2471
2537
  request = ApiSaveKernelRequest()
@@ -2496,6 +2562,7 @@ class KaggleApi:
2496
2562
  Parameters
2497
2563
  ==========
2498
2564
  folder: the path of the folder
2565
+ timeout: maximum run time in seconds
2499
2566
  """
2500
2567
  folder = folder or os.getcwd()
2501
2568
  result = self.kernels_push(folder, timeout)
@@ -2829,9 +2896,9 @@ class KaggleApi:
2829
2896
  data['slug'] = model_ref_split[1]
2830
2897
  data['title'] = model.title
2831
2898
  data['subtitle'] = model.subtitle
2832
- data['isPrivate'] = model.isPrivate # TODO Test to ensure True default
2899
+ data['isPrivate'] = model.is_private # TODO Test to ensure True default
2833
2900
  data['description'] = model.description
2834
- data['publishTime'] = model.publishTime
2901
+ data['publishTime'] = model.publish_time
2835
2902
 
2836
2903
  with open(meta_file, 'w') as f:
2837
2904
  json.dump(data, f, indent=2)
@@ -3010,7 +3077,7 @@ class KaggleApi:
3010
3077
  folder = folder or os.getcwd()
3011
3078
  result = self.model_create_new(folder)
3012
3079
 
3013
- if result.hasId:
3080
+ if result.id:
3014
3081
  print('Your model was created. Id={}. Url={}'.format(
3015
3082
  result.id, result.url))
3016
3083
  else:
@@ -3134,7 +3201,7 @@ class KaggleApi:
3134
3201
  folder = folder or os.getcwd()
3135
3202
  result = self.model_update(folder)
3136
3203
 
3137
- if result.hasId:
3204
+ if result.id:
3138
3205
  print('Your model was updated. Id={}. Url={}'.format(
3139
3206
  result.id, result.url))
3140
3207
  else:
@@ -3357,7 +3424,7 @@ class KaggleApi:
3357
3424
  folder = folder or os.getcwd()
3358
3425
  result = self.model_instance_create(folder, quiet, dir_mode)
3359
3426
 
3360
- if result.hasId:
3427
+ if result.id:
3361
3428
  print('Your model instance was created. Id={}. Url={}'.format(
3362
3429
  result.id, result.url))
3363
3430
  else:
@@ -3442,10 +3509,10 @@ class KaggleApi:
3442
3509
  next_page_token = response.next_page_token
3443
3510
  if next_page_token:
3444
3511
  print('Next Page Token = {}'.format(next_page_token))
3445
- return response
3512
+ return FileList.from_response(response)
3446
3513
  else:
3447
3514
  print('No files found')
3448
- return FileList({})
3515
+ return FileList({'files': [], 'nextPageToken': ''})
3449
3516
 
3450
3517
  def model_instance_files_cli(self,
3451
3518
  model_instance,
@@ -4635,6 +4702,20 @@ class FileList(object):
4635
4702
  else:
4636
4703
  self.nextPageToken = ""
4637
4704
 
4705
+ @staticmethod
4706
+ def from_response(response):
4707
+ inst = FileList({'files': [], 'nextPageToken': ''})
4708
+ inst.error_message = ''
4709
+ files = response.files
4710
+ if files:
4711
+ inst.files = [File(f) for f in files]
4712
+ else:
4713
+ inst.files = []
4714
+ token = response.next_page_token
4715
+ if token:
4716
+ inst.nextPageToken = token
4717
+ else:
4718
+ inst.nextPageToken = ""
4638
4719
  def __repr__(self):
4639
4720
  return ''
4640
4721
 
kaggle/cli.py CHANGED
@@ -136,6 +136,7 @@ def parse_competitions(subparsers):
136
136
  '--page',
137
137
  dest='page',
138
138
  default=1,
139
+ type=int,
139
140
  required=False,
140
141
  help=Help.param_page)
141
142
  parser_competitions_list_optional.add_argument(
@@ -183,6 +184,7 @@ def parse_competitions(subparsers):
183
184
  dest='page_size',
184
185
  required=False,
185
186
  default=20,
187
+ type=int,
186
188
  help=Help.param_page_size)
187
189
  parser_competitions_files._action_groups.append(
188
190
  parser_competitions_files_optional)
@@ -234,8 +236,6 @@ def parse_competitions(subparsers):
234
236
  help=Help.command_competitions_submit)
235
237
  parser_competitions_submit_optional = parser_competitions_submit._action_groups.pop(
236
238
  )
237
- parser_competitions_submit_required = parser_competitions_submit.add_argument_group(
238
- 'required arguments')
239
239
  parser_competitions_submit_optional.add_argument(
240
240
  'competition', nargs='?', default=None, help=Help.param_competition)
241
241
  parser_competitions_submit_optional.add_argument(
@@ -244,14 +244,18 @@ def parse_competitions(subparsers):
244
244
  dest='competition_opt',
245
245
  required=False,
246
246
  help=argparse.SUPPRESS)
247
- parser_competitions_submit_required.add_argument(
248
- '-f', '--file', dest='file_name', required=True, help=Help.param_upfile)
249
- parser_competitions_submit_required.add_argument(
247
+ parser_competitions_submit_optional.add_argument(
248
+ '-f', '--file', dest='file_name', help=Help.param_upfile)
249
+ parser_competitions_submit_optional.add_argument(
250
+ '-k', '--kernel', dest='kernel', help=Help.param_code_kernel)
251
+ parser_competitions_submit_optional.add_argument(
250
252
  '-m',
251
253
  '--message',
252
254
  dest='message',
253
255
  required=True,
254
256
  help=Help.param_competition_message)
257
+ parser_competitions_submit_optional.add_argument(
258
+ '-v', '--version', dest='version', help=Help.param_code_version)
255
259
  parser_competitions_submit_optional.add_argument(
256
260
  '-q', '--quiet', dest='quiet', action='store_true', help=Help.param_quiet)
257
261
  parser_competitions_submit._action_groups.append(
@@ -358,7 +362,7 @@ def parse_datasets(subparsers):
358
362
  required=False,
359
363
  help=Help.param_dataset_sort_by)
360
364
  parser_datasets_list.add_argument(
361
- '--size', dest='size', required=False, help=Help.param_dataset_size)
365
+ '--size', dest='size', type=int, required=False, help=Help.param_dataset_size)
362
366
  parser_datasets_list.add_argument(
363
367
  '--file-type',
364
368
  dest='file_type',
@@ -382,6 +386,7 @@ def parse_datasets(subparsers):
382
386
  '--page',
383
387
  dest='page',
384
388
  default=1,
389
+ type=int,
385
390
  required=False,
386
391
  help=Help.param_page)
387
392
  parser_datasets_list.add_argument(
@@ -394,11 +399,13 @@ def parse_datasets(subparsers):
394
399
  '--max-size',
395
400
  dest='max_size',
396
401
  required=False,
402
+ type=int,
397
403
  help=Help.param_dataset_maxsize)
398
404
  parser_datasets_list.add_argument(
399
405
  '--min-size',
400
406
  dest='min_size',
401
407
  required=False,
408
+ type=int,
402
409
  help=Help.param_dataset_minsize)
403
410
  parser_datasets_list._action_groups.append(parser_datasets_list_optional)
404
411
  parser_datasets_list.set_defaults(func=api.dataset_list_cli)
@@ -433,6 +440,7 @@ def parse_datasets(subparsers):
433
440
  dest='page_size',
434
441
  required=False,
435
442
  default=20,
443
+ type=int,
436
444
  help=Help.param_page_size)
437
445
  parser_datasets_files._action_groups.append(parser_datasets_files_optional)
438
446
  parser_datasets_files.set_defaults(func=api.dataset_list_files_cli)
@@ -645,9 +653,9 @@ def parse_kernels(subparsers):
645
653
  parser_kernels_list_optional.add_argument(
646
654
  '-m', '--mine', dest='mine', action='store_true', help=Help.param_mine)
647
655
  parser_kernels_list_optional.add_argument(
648
- '-p', '--page', dest='page', default=1, help=Help.param_page)
656
+ '-p', '--page', dest='page', default=1, type=int, help=Help.param_page)
649
657
  parser_kernels_list_optional.add_argument(
650
- '--page-size', dest='page_size', default=20, help=Help.param_page_size)
658
+ '--page-size', dest='page_size', default=20, type=int, help=Help.param_page_size)
651
659
  parser_kernels_list_optional.add_argument(
652
660
  '-s', '--search', dest='search', help=Help.param_search)
653
661
  parser_kernels_list_optional.add_argument(
@@ -716,7 +724,7 @@ def parse_kernels(subparsers):
716
724
  parser_kernels_files_optional.add_argument(
717
725
  '--page-token', dest='page_token', help=Help.param_page_token)
718
726
  parser_kernels_files_optional.add_argument(
719
- '--page-size', dest='page_size', default=20, help=Help.param_page_size)
727
+ '--page-size', dest='page_size', default=20, type=int, help=Help.param_page_size)
720
728
  parser_kernels_files._action_groups.append(parser_kernels_files_optional)
721
729
  parser_kernels_files.set_defaults(func=api.kernels_list_files_cli)
722
730
 
@@ -750,7 +758,9 @@ def parse_kernels(subparsers):
750
758
  parser_kernels_push_optional.add_argument(
751
759
  '-t',
752
760
  '--timeout',
753
- dest='timeout')
761
+ type=int,
762
+ dest='timeout',
763
+ help=Help.param_kernel_timeout)
754
764
  parser_kernels_push._action_groups.append(parser_kernels_push_optional)
755
765
  parser_kernels_push.set_defaults(func=api.kernels_push_cli)
756
766
 
@@ -889,7 +899,7 @@ def parse_models(subparsers):
889
899
  parser_models_list.add_argument(
890
900
  '--owner', dest='owner', required=False, help=Help.param_model_owner)
891
901
  parser_models_list.add_argument(
892
- '--page-size', dest='page_size', default=20, help=Help.param_page_size)
902
+ '--page-size', dest='page_size', default=20, type=int, help=Help.param_page_size)
893
903
  parser_models_list.add_argument(
894
904
  '--page-token',
895
905
  dest='page_token',
@@ -1056,7 +1066,7 @@ def parse_model_instances(subparsers):
1056
1066
  action='store_true',
1057
1067
  help=Help.param_csv)
1058
1068
  parser_model_instances_files_optional.add_argument(
1059
- '--page-size', dest='page_size', default=20, help=Help.param_page_size)
1069
+ '--page-size', dest='page_size', default=20, type=int, help=Help.param_page_size)
1060
1070
  parser_model_instances_files_optional.add_argument(
1061
1071
  '--page-token',
1062
1072
  dest='page_token',
@@ -1184,7 +1194,7 @@ def parse_model_instance_versions(subparsers):
1184
1194
  action='store_true',
1185
1195
  help=Help.param_csv)
1186
1196
  parser_model_instance_versions_files_optional.add_argument(
1187
- '--page-size', dest='page_size', default=20, help=Help.param_page_size)
1197
+ '--page-size', dest='page_size', default=20, type=int, help=Help.param_page_size)
1188
1198
  parser_model_instance_versions_files_optional.add_argument(
1189
1199
  '--page-token',
1190
1200
  dest='page_token',
@@ -1420,7 +1430,9 @@ class Help(object):
1420
1430
  param_delete_old_version = 'Delete old versions of this dataset'
1421
1431
  param_force = ('Skip check whether local version of file is up to date, force'
1422
1432
  ' file download')
1423
- param_upfile = 'File for upload (full path)'
1433
+ param_upfile = 'File for upload (full path), or the name of the output file produced by a kernel (for code competitions)'
1434
+ param_code_kernel = 'Name of kernel (notebook) to submit to a code competition'
1435
+ param_code_version = 'Version of kernel to submit to a code competition, e.g. "Version 1"'
1424
1436
  param_csv = 'Print results in CSV format (if not set print in table format)'
1425
1437
  param_page = 'Page number for results paging. Page size is 20 by default'
1426
1438
  # NOTE: Default and max page size are set by the mid-tier code.
@@ -1515,6 +1527,9 @@ class Help(object):
1515
1527
  param_kernel_competition = 'Find kernels for a given competition slug'
1516
1528
  param_kernel_dataset = ('Find kernels for a given dataset slug. Format is '
1517
1529
  '{username/dataset-slug}')
1530
+ param_kernel_timeout = ('Limit the run time of a kernel to the given number '
1531
+ 'of seconds. The global maximum time will not be '
1532
+ 'exceeded.')
1518
1533
  param_kernel_user = 'Find kernels created by a given username'
1519
1534
  # TODO(b/129357583): Pull these from the same spot as the api impl
1520
1535
  param_kernel_language = (
@@ -120,7 +120,10 @@ class File(object):
120
120
  except AttributeError:
121
121
  self.name = init_dict.name
122
122
  self.creation_date = init_dict.creation_date
123
- self.size = File.get_size(init_dict.total_bytes)
123
+ try:
124
+ self.size = File.get_size(init_dict.total_bytes)
125
+ except Exception: # AttributeError would be preferred but doesn't work.
126
+ self.size = File.get_size(init_dict.size)
124
127
 
125
128
  def __repr__(self):
126
129
  return self.name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kaggle
3
- Version: 1.7.3b1
3
+ Version: 1.7.4.1
4
4
  Summary: Access Kaggle resources anywhere
5
5
  Project-URL: Homepage, https://github.com/Kaggle/kaggle-api
6
6
  Project-URL: Issues, https://github.com/Kaggle/kaggle-api/issues
@@ -1,17 +1,17 @@
1
1
  kaggle/LICENSE,sha256=PN5H3cwV3xW9nvUXKcB_XOH60cWqne6qK3SAE8NI74s,11340
2
2
  kaggle/__init__.py,sha256=XFAbsmBy7kvlQrRhwEl2f8sb0-RdaLOieLQsX0CkEHU,151
3
- kaggle/cli.py,sha256=1POpmaPMD0SMhCNTLSJiTbQ0aOQ9tt4uaXpuePbEa7w,62937
3
+ kaggle/cli.py,sha256=xhlpnWLtKAUG2m3baqODIX-1Lev4Un2IoHLDHbGU06E,63718
4
4
  kaggle/configuration.py,sha256=rgBGwX_iQnHMerDO0oOJJDClq_VRQeKmg0XMfgn5mzg,6069
5
5
  kaggle/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  kaggle/api/kaggle_api.py,sha256=vyvS-HH2sEftKYxl1Y4nQWSbDXYW57NXDcezQKECtac,24828
7
- kaggle/api/kaggle_api_extended.py,sha256=zVyDpP6EtZX-kYkLM3trOR8gJJ8C4bPfyEgWGb6XQD0,182215
7
+ kaggle/api/kaggle_api_extended.py,sha256=nJBJCUOV8UVGnGl0bFPkjVsboIjov1zG3LhE1BRmt64,185825
8
8
  kaggle/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  kaggle/models/api_blob_type.py,sha256=wLxLS86hWWlCM-cad4WITBiUEIVNkBbclJ7sZm72u0A,85
10
10
  kaggle/models/dataset_column.py,sha256=q1cQnOHPVEV8olnpwAHnB4z7w9AHMGR2iA6OKZaLKKE,6768
11
11
  kaggle/models/dataset_new_request.py,sha256=kJ2az668iDTXAE18XQOyD8M5w0_teQwjXoCZn67Q09k,12186
12
12
  kaggle/models/dataset_new_version_request.py,sha256=PcbrYife2VBTHji6KX5zRS79fJVXDVSkLU3qXRWaUWc,9332
13
13
  kaggle/models/dataset_update_settings_request.py,sha256=luybsR3typrKKqdmlJIUb7Nzrgih0EU4DD7NUW2PVtY,9426
14
- kaggle/models/kaggle_models_extended.py,sha256=ajA-zSCp7dYTfxo70ub_M9a4I5r0TJ3_pIUUVmPCI24,7287
14
+ kaggle/models/kaggle_models_extended.py,sha256=5H0dPscq8A9NJN-FTCBkUUTpuz1hj6eKtW5w3C-QcHU,7431
15
15
  kaggle/models/kernel_push_request.py,sha256=mFzHNkyirbeMfYsxizX-XUhTAfESZaGXvI2Ll1baPNk,19278
16
16
  kaggle/models/model_instance_new_version_request.py,sha256=Mi8sgb7yPvgxSOtFzI_HrZLfipqTR6KYzT0Rxsyi_WE,4526
17
17
  kaggle/models/model_instance_update_request.py,sha256=YMHo7G3H3AsiZWuQpR53JGOP0VySlHGuzug2N4_RgbQ,13625
@@ -27,8 +27,8 @@ kagglesdk/LICENSE,sha256=PN5H3cwV3xW9nvUXKcB_XOH60cWqne6qK3SAE8NI74s,11340
27
27
  kagglesdk/__init__.py,sha256=IJFgr7644bKJJb8xPv9SwE4y7ZFff2kaO9fqFCPZMLI,91
28
28
  kagglesdk/kaggle_client.py,sha256=ZAONI1jbSlQE97RtxlSm07LReYwkGoVab22nrTmQTxU,2779
29
29
  kagglesdk/kaggle_env.py,sha256=0R-RIbO09nud9eZsb9YB72W9enI92j4jmgVxILj-AkQ,1146
30
- kagglesdk/kaggle_http_client.py,sha256=CIpYBThdnleSXFz1sSbVOoKctYZh01L-EM3WQmQDfgY,10138
31
- kagglesdk/kaggle_object.py,sha256=ZbCxMsA4AC-nefTy8X-2K8AsDdh9Gx0NYlnOBT5VCbU,10734
30
+ kagglesdk/kaggle_http_client.py,sha256=aGWaU98cw4IdEM95sC1GmX6IqF5JOE5rhK5mNHczum8,10172
31
+ kagglesdk/kaggle_object.py,sha256=eng8cWtDwkAKS4kbjXSfnpN_7PfpCyLlQRz8Lnpk6_w,10787
32
32
  kagglesdk/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  kagglesdk/admin/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  kagglesdk/admin/services/inbox_file_service.py,sha256=dbNqDOZChTWolt9eP39M8dPg7AXEXWIwgjLgV8thsik,777
@@ -45,9 +45,9 @@ kagglesdk/common/types/file_download.py,sha256=x8iOghw9ICDr2YnkBzBQtfOdRihX3QadO
45
45
  kagglesdk/common/types/http_redirect.py,sha256=7f-FJ0rgAAdmhGZmJAS_E1uLpTN7-w4gleo1ffvYF_A,3029
46
46
  kagglesdk/competitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  kagglesdk/competitions/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- kagglesdk/competitions/services/competition_api_service.py,sha256=pR53wFbtriTh113vnbkIeJJbGRaNjZqqRoTPzpVzfGY,5240
48
+ kagglesdk/competitions/services/competition_api_service.py,sha256=P3CPPJ4m08ERjkBgwbT46EM38cv-3oWxZUMbzvfEzGs,5787
49
49
  kagglesdk/competitions/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- kagglesdk/competitions/types/competition_api_service.py,sha256=amdcGskJLNbXWacyD7qIMYNwwxOSwnQ7IUHZwhkKNQA,55892
50
+ kagglesdk/competitions/types/competition_api_service.py,sha256=NmJ0PRIjMrI_fjQt37YGJtCWFJCCFKbY-vO4v17o_JY,60307
51
51
  kagglesdk/competitions/types/competition_enums.py,sha256=gqjTYtlJ7bOB7QC0bniLDv7_GX_V8BFkOYY1NqN-fvU,1780
52
52
  kagglesdk/competitions/types/submission_status.py,sha256=DHbTr8S7AK8QpZ26Lg1m6CnDj_LeirVuP_xYuSBbwnE,247
53
53
  kagglesdk/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -74,16 +74,16 @@ kagglesdk/models/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
74
74
  kagglesdk/models/services/model_api_service.py,sha256=vF7NH0MAZoX_b0z3RqGhjdAiuaWU_ACNRDLjUN2HC3M,10145
75
75
  kagglesdk/models/services/model_service.py,sha256=-KM64rnYBO8L2ten5VEhQW7OhZa7yaIc4dOYROtJvYU,672
76
76
  kagglesdk/models/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- kagglesdk/models/types/model_api_service.py,sha256=r_1JXYTiZT-kQ-Y6jh4KK8TEa-O8dE0zBnD6Az0DVoo,112500
78
- kagglesdk/models/types/model_enums.py,sha256=_XyoZl7xSbRI7b-FvFmI3U-DpIm8Cl-2TX09kwCqP4M,2013
77
+ kagglesdk/models/types/model_api_service.py,sha256=dDabW7I8MaRuz-iOBSlx_vQPWF8mEig678DusyvxHIk,111682
78
+ kagglesdk/models/types/model_enums.py,sha256=pitgapPKLK4BUWFOMQaSDgyrsk6bYJ4nzZ3FJPZWJWA,2013
79
79
  kagglesdk/models/types/model_service.py,sha256=cAJ3P_DInVWZ0Io46zi8SWnQtBJFIJkw6TW330gMVLA,7648
80
80
  kagglesdk/models/types/model_types.py,sha256=jg2rDQP48OG0hikZC4NI6tlf4F00eUgRO2Br6c-QJUA,8048
81
81
  kagglesdk/test/test_client.py,sha256=Z5hkIE7EeoM5bUfgAqid1YuZ1EAkzvw_PFIZiy0X3UQ,1084
82
82
  kagglesdk/users/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  kagglesdk/users/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  kagglesdk/users/types/users_enums.py,sha256=iAzI5TAM8tysOcqG2AUsb-DTdWEQF9XPOCy-M8Vv_ro,380
85
- kaggle-1.7.3b1.dist-info/METADATA,sha256=yOpLj9bvtM_xoS6zb-bP3Vk-cMB1ssNzLPENL0dE1ds,16953
86
- kaggle-1.7.3b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
87
- kaggle-1.7.3b1.dist-info/entry_points.txt,sha256=hl3dQAS4qpVkC5FWiqfnU6qKJU924OEN6PsHEiw-FGg,43
88
- kaggle-1.7.3b1.dist-info/licenses/LICENSE.txt,sha256=IzhfWrxIlFAci3lzZCg5WWHZJBI1QSzsHxO0plI63vk,11541
89
- kaggle-1.7.3b1.dist-info/RECORD,,
85
+ kaggle-1.7.4.1.dist-info/METADATA,sha256=bygU0bEZ1uARv2CWWUI_ArTrZZ0gcdVMMgKwCq2jxKk,16953
86
+ kaggle-1.7.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
87
+ kaggle-1.7.4.1.dist-info/entry_points.txt,sha256=hl3dQAS4qpVkC5FWiqfnU6qKJU924OEN6PsHEiw-FGg,43
88
+ kaggle-1.7.4.1.dist-info/licenses/LICENSE.txt,sha256=IzhfWrxIlFAci3lzZCg5WWHZJBI1QSzsHxO0plI63vk,11541
89
+ kaggle-1.7.4.1.dist-info/RECORD,,
@@ -1,6 +1,6 @@
1
1
  from kagglesdk.common.types.file_download import FileDownload
2
2
  from kagglesdk.common.types.http_redirect import HttpRedirect
3
- from kagglesdk.competitions.types.competition_api_service import ApiCreateSubmissionRequest, ApiCreateSubmissionResponse, ApiDownloadDataFileRequest, ApiDownloadDataFilesRequest, ApiDownloadLeaderboardRequest, ApiGetLeaderboardRequest, ApiGetLeaderboardResponse, ApiGetSubmissionRequest, ApiListCompetitionsRequest, ApiListCompetitionsResponse, ApiListDataFilesRequest, ApiListDataFilesResponse, ApiListSubmissionsRequest, ApiListSubmissionsResponse, ApiStartSubmissionUploadRequest, ApiStartSubmissionUploadResponse, ApiSubmission
3
+ from kagglesdk.competitions.types.competition_api_service import ApiCreateCodeSubmissionRequest, ApiCreateCodeSubmissionResponse, ApiCreateSubmissionRequest, ApiCreateSubmissionResponse, ApiDownloadDataFileRequest, ApiDownloadDataFilesRequest, ApiDownloadLeaderboardRequest, ApiGetLeaderboardRequest, ApiGetLeaderboardResponse, ApiGetSubmissionRequest, ApiListCompetitionsRequest, ApiListCompetitionsResponse, ApiListDataFilesRequest, ApiListDataFilesResponse, ApiListSubmissionsRequest, ApiListSubmissionsResponse, ApiStartSubmissionUploadRequest, ApiStartSubmissionUploadResponse, ApiSubmission
4
4
  from kagglesdk.kaggle_http_client import KaggleHttpClient
5
5
 
6
6
  class CompetitionApiClient(object):
@@ -80,6 +80,18 @@ class CompetitionApiClient(object):
80
80
 
81
81
  return self._client.call("competitions.CompetitionApiService", "ApiCreateSubmission", request, ApiCreateSubmissionResponse)
82
82
 
83
+ def create_code_submission(self, request: ApiCreateCodeSubmissionRequest = None) -> ApiCreateCodeSubmissionResponse:
84
+ r"""
85
+ Args:
86
+ request (ApiCreateCodeSubmissionRequest):
87
+ The request object; initialized to empty instance if not specified.
88
+ """
89
+
90
+ if request is None:
91
+ request = ApiCreateCodeSubmissionRequest()
92
+
93
+ return self._client.call("competitions.CompetitionApiService", "ApiCreateCodeSubmission", request, ApiCreateCodeSubmissionResponse)
94
+
83
95
  def get_submission(self, request: ApiGetSubmissionRequest = None) -> ApiSubmission:
84
96
  r"""
85
97
  Args:
@@ -4,6 +4,153 @@ from kagglesdk.competitions.types.submission_status import SubmissionStatus
4
4
  from kagglesdk.kaggle_object import *
5
5
  from typing import Optional, List
6
6
 
7
+ class ApiCreateCodeSubmissionRequest(KaggleObject):
8
+ r"""
9
+ Attributes:
10
+ competition_name (str)
11
+ kernel_owner (str)
12
+ kernel_slug (str)
13
+ kernel_version (int)
14
+ file_name (str)
15
+ submission_description (str)
16
+ """
17
+
18
+ def __init__(self):
19
+ self._competition_name = ""
20
+ self._kernel_owner = ""
21
+ self._kernel_slug = ""
22
+ self._kernel_version = None
23
+ self._file_name = None
24
+ self._submission_description = None
25
+ self._freeze()
26
+
27
+ @property
28
+ def competition_name(self) -> str:
29
+ return self._competition_name
30
+
31
+ @competition_name.setter
32
+ def competition_name(self, competition_name: str):
33
+ if competition_name is None:
34
+ del self.competition_name
35
+ return
36
+ if not isinstance(competition_name, str):
37
+ raise TypeError('competition_name must be of type str')
38
+ self._competition_name = competition_name
39
+
40
+ @property
41
+ def kernel_owner(self) -> str:
42
+ return self._kernel_owner
43
+
44
+ @kernel_owner.setter
45
+ def kernel_owner(self, kernel_owner: str):
46
+ if kernel_owner is None:
47
+ del self.kernel_owner
48
+ return
49
+ if not isinstance(kernel_owner, str):
50
+ raise TypeError('kernel_owner must be of type str')
51
+ self._kernel_owner = kernel_owner
52
+
53
+ @property
54
+ def kernel_slug(self) -> str:
55
+ return self._kernel_slug
56
+
57
+ @kernel_slug.setter
58
+ def kernel_slug(self, kernel_slug: str):
59
+ if kernel_slug is None:
60
+ del self.kernel_slug
61
+ return
62
+ if not isinstance(kernel_slug, str):
63
+ raise TypeError('kernel_slug must be of type str')
64
+ self._kernel_slug = kernel_slug
65
+
66
+ @property
67
+ def kernel_version(self) -> int:
68
+ return self._kernel_version or 0
69
+
70
+ @kernel_version.setter
71
+ def kernel_version(self, kernel_version: int):
72
+ if kernel_version is None:
73
+ del self.kernel_version
74
+ return
75
+ if not isinstance(kernel_version, int):
76
+ raise TypeError('kernel_version must be of type int')
77
+ self._kernel_version = kernel_version
78
+
79
+ @property
80
+ def file_name(self) -> str:
81
+ return self._file_name or ""
82
+
83
+ @file_name.setter
84
+ def file_name(self, file_name: str):
85
+ if file_name is None:
86
+ del self.file_name
87
+ return
88
+ if not isinstance(file_name, str):
89
+ raise TypeError('file_name must be of type str')
90
+ self._file_name = file_name
91
+
92
+ @property
93
+ def submission_description(self) -> str:
94
+ return self._submission_description or ""
95
+
96
+ @submission_description.setter
97
+ def submission_description(self, submission_description: str):
98
+ if submission_description is None:
99
+ del self.submission_description
100
+ return
101
+ if not isinstance(submission_description, str):
102
+ raise TypeError('submission_description must be of type str')
103
+ self._submission_description = submission_description
104
+
105
+ def endpoint(self):
106
+ path = '/api/v1/competitions/submissions/submit-notebook/{competition_name}'
107
+ return path.format_map(self.to_field_map(self))
108
+
109
+
110
+ @staticmethod
111
+ def method():
112
+ return 'POST'
113
+
114
+
115
+ class ApiCreateCodeSubmissionResponse(KaggleObject):
116
+ r"""
117
+ Attributes:
118
+ message (str)
119
+ ref (int)
120
+ """
121
+
122
+ def __init__(self):
123
+ self._message = ""
124
+ self._ref = 0
125
+ self._freeze()
126
+
127
+ @property
128
+ def message(self) -> str:
129
+ return self._message
130
+
131
+ @message.setter
132
+ def message(self, message: str):
133
+ if message is None:
134
+ del self.message
135
+ return
136
+ if not isinstance(message, str):
137
+ raise TypeError('message must be of type str')
138
+ self._message = message
139
+
140
+ @property
141
+ def ref(self) -> int:
142
+ return self._ref
143
+
144
+ @ref.setter
145
+ def ref(self, ref: int):
146
+ if ref is None:
147
+ del self.ref
148
+ return
149
+ if not isinstance(ref, int):
150
+ raise TypeError('ref must be of type int')
151
+ self._ref = ref
152
+
153
+
7
154
  class ApiCreateSubmissionRequest(KaggleObject):
8
155
  r"""
9
156
  Attributes:
@@ -77,8 +224,6 @@ class ApiCreateSubmissionResponse(KaggleObject):
77
224
  r"""
78
225
  Attributes:
79
226
  message (str)
80
- TODO: Remove when we feel okay with the breaking change, this adds no
81
- value.
82
227
  ref (int)
83
228
  """
84
229
 
@@ -89,10 +234,6 @@ class ApiCreateSubmissionResponse(KaggleObject):
89
234
 
90
235
  @property
91
236
  def message(self) -> str:
92
- r"""
93
- TODO: Remove when we feel okay with the breaking change, this adds no
94
- value.
95
- """
96
237
  return self._message
97
238
 
98
239
  @message.setter
@@ -1719,6 +1860,20 @@ class ApiCategory(KaggleObject):
1719
1860
  self._total_count = total_count
1720
1861
 
1721
1862
 
1863
+ ApiCreateCodeSubmissionRequest._fields = [
1864
+ FieldMetadata("competitionName", "competition_name", "_competition_name", str, "", PredefinedSerializer()),
1865
+ FieldMetadata("kernelOwner", "kernel_owner", "_kernel_owner", str, "", PredefinedSerializer()),
1866
+ FieldMetadata("kernelSlug", "kernel_slug", "_kernel_slug", str, "", PredefinedSerializer()),
1867
+ FieldMetadata("kernelVersion", "kernel_version", "_kernel_version", int, None, PredefinedSerializer(), optional=True),
1868
+ FieldMetadata("fileName", "file_name", "_file_name", str, None, PredefinedSerializer(), optional=True),
1869
+ FieldMetadata("submissionDescription", "submission_description", "_submission_description", str, None, PredefinedSerializer(), optional=True),
1870
+ ]
1871
+
1872
+ ApiCreateCodeSubmissionResponse._fields = [
1873
+ FieldMetadata("message", "message", "_message", str, "", PredefinedSerializer()),
1874
+ FieldMetadata("ref", "ref", "_ref", int, 0, PredefinedSerializer()),
1875
+ ]
1876
+
1722
1877
  ApiCreateSubmissionRequest._fields = [
1723
1878
  FieldMetadata("competitionName", "competition_name", "_competition_name", str, "", PredefinedSerializer()),
1724
1879
  FieldMetadata("blobFileTokens", "blob_file_tokens", "_blob_file_tokens", str, "", PredefinedSerializer()),
@@ -18,7 +18,7 @@ from typing import Type
18
18
  # currently usable by the CLI.
19
19
 
20
20
  # TODO: Extend kapigen to add a boolean to these requests indicating that they use forms.
21
- REQUESTS_REQUIRING_FORMS = ['ApiUploadDatasetFileRequest', 'ApiCreateSubmissionRequest', 'ApiStartSubmissionUploadRequest', 'ApiUploadModelFileRequest']
21
+ REQUESTS_REQUIRING_FORMS = ['ApiUploadDatasetFileRequest', 'ApiCreateSubmissionRequest', 'ApiCreateCodeSubmissionRequest', 'ApiStartSubmissionUploadRequest', 'ApiUploadModelFileRequest']
22
22
 
23
23
  def _headers_to_str(headers):
24
24
  return '\n'.join(f'{k}: {v}' for k, v in headers.items())
@@ -275,7 +275,10 @@ class KaggleObject(object):
275
275
  return KaggleObject.to_json(self, ignore_defaults=False)
276
276
 
277
277
  def __contains__(self, field_name):
278
- field = self._get_field(field_name)
278
+ try:
279
+ field = self._get_field(field_name)
280
+ except ValueError:
281
+ return False
279
282
  value = getattr(self, field.private_field_name)
280
283
  if field.optional:
281
284
  return value is not None
@@ -1169,7 +1169,6 @@ class ApiListModelGatingUserConsentsRequest(KaggleObject):
1169
1169
  model_slug (str)
1170
1170
  review_status (GatingAgreementRequestsReviewStatus)
1171
1171
  filters: a null value means the filter is off.
1172
- expiry_status (GatingAgreementRequestsExpiryStatus)
1173
1172
  is_user_request_data_expired (bool)
1174
1173
  page_size (int)
1175
1174
  paging
@@ -1180,7 +1179,6 @@ class ApiListModelGatingUserConsentsRequest(KaggleObject):
1180
1179
  self._owner_slug = ""
1181
1180
  self._model_slug = ""
1182
1181
  self._review_status = None
1183
- self._expiry_status = None
1184
1182
  self._is_user_request_data_expired = None
1185
1183
  self._page_size = None
1186
1184
  self._page_token = None
@@ -1226,19 +1224,6 @@ class ApiListModelGatingUserConsentsRequest(KaggleObject):
1226
1224
  raise TypeError('review_status must be of type GatingAgreementRequestsReviewStatus')
1227
1225
  self._review_status = review_status
1228
1226
 
1229
- @property
1230
- def expiry_status(self) -> 'GatingAgreementRequestsExpiryStatus':
1231
- return self._expiry_status or GatingAgreementRequestsExpiryStatus.GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_UNSPECIFIED
1232
-
1233
- @expiry_status.setter
1234
- def expiry_status(self, expiry_status: 'GatingAgreementRequestsExpiryStatus'):
1235
- if expiry_status is None:
1236
- del self.expiry_status
1237
- return
1238
- if not isinstance(expiry_status, GatingAgreementRequestsExpiryStatus):
1239
- raise TypeError('expiry_status must be of type GatingAgreementRequestsExpiryStatus')
1240
- self._expiry_status = expiry_status
1241
-
1242
1227
  @property
1243
1228
  def is_user_request_data_expired(self) -> bool:
1244
1229
  return self._is_user_request_data_expired or False
@@ -3531,7 +3516,6 @@ ApiListModelGatingUserConsentsRequest._fields = [
3531
3516
  FieldMetadata("ownerSlug", "owner_slug", "_owner_slug", str, "", PredefinedSerializer()),
3532
3517
  FieldMetadata("modelSlug", "model_slug", "_model_slug", str, "", PredefinedSerializer()),
3533
3518
  FieldMetadata("reviewStatus", "review_status", "_review_status", GatingAgreementRequestsReviewStatus, None, EnumSerializer(), optional=True),
3534
- FieldMetadata("expiryStatus", "expiry_status", "_expiry_status", GatingAgreementRequestsExpiryStatus, None, EnumSerializer(), optional=True),
3535
3519
  FieldMetadata("isUserRequestDataExpired", "is_user_request_data_expired", "_is_user_request_data_expired", bool, None, PredefinedSerializer(), optional=True),
3536
3520
  FieldMetadata("pageSize", "page_size", "_page_size", int, None, PredefinedSerializer(), optional=True),
3537
3521
  FieldMetadata("pageToken", "page_token", "_page_token", str, None, PredefinedSerializer(), optional=True),
@@ -1,10 +1,5 @@
1
1
  import enum
2
2
 
3
- class GatingAgreementRequestsExpiryStatus(enum.Enum):
4
- GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_UNSPECIFIED = 0
5
- GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_NOT_EXPIRED = 1
6
- GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_IS_EXPIRED = 2
7
-
8
3
  class GatingAgreementRequestsReviewStatus(enum.Enum):
9
4
  GATING_AGREEMENT_REQUESTS_REVIEW_STATUS_UNSPECIFIED = 0
10
5
  GATING_AGREEMENT_REQUESTS_REVIEW_STATUS_PENDING = 1
@@ -58,3 +53,8 @@ class ModelVersionLinkType(enum.Enum):
58
53
  MODEL_VERSION_LINK_TYPE_VERTEX_OPEN = 1
59
54
  MODEL_VERSION_LINK_TYPE_VERTEX_DEPLOY = 2
60
55
 
56
+ class GatingAgreementRequestsExpiryStatus(enum.Enum):
57
+ GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_UNSPECIFIED = 0
58
+ GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_NOT_EXPIRED = 1
59
+ GATING_AGREEMENT_REQUESTS_EXPIRY_STATUS_IS_EXPIRED = 2
60
+