Skip to content

Commit 2592675

Browse files
authored
Fix dataset download problem (#715)
Also add help for the `--timeout` option.
1 parent 1669340 commit 2592675

File tree

8 files changed

+36
-12
lines changed

8 files changed

+36
-12
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Changelog
22
====
33

4+
### 1.7.4.1
5+
6+
* Fix a dataset download problem. Datasets that had a license were failing to download.
7+
* Update the documentation to include code competition submit.
8+
49
### 1.7.4
510

611
Version 1.7.3 was never released. There were errors in versioning on

kaggle/api/kaggle_api_extended.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,13 +1737,13 @@ def dataset_download_cli(self,
17371737
raise Exception(response.error_message)
17381738
metadata = response.info
17391739

1740-
if 'info' in metadata and 'licenses' in metadata['info']:
1740+
if metadata and metadata.licenses:
17411741
# license_objs format is like: [{ 'name': 'CC0-1.0' }]
1742-
license_objs = metadata['info']['licenses']
1742+
license_objs = metadata.licenses
17431743
licenses = [
1744-
license_obj['name']
1744+
license_obj.name
17451745
for license_obj in license_objs
1746-
if 'name' in license_obj
1746+
if license_obj.name
17471747
]
17481748
else:
17491749
licenses = [
@@ -2440,6 +2440,7 @@ def kernels_push(self, folder, timeout=None) -> ApiSaveKernelResponse:
24402440
Parameters
24412441
==========
24422442
folder: the path of the folder
2443+
timeout: maximum run time iin seconds
24432444
"""
24442445
if not os.path.isdir(folder):
24452446
raise ValueError('Invalid folder: ' + folder)
@@ -2561,6 +2562,7 @@ def kernels_push_cli(self, folder, timeout):
25612562
Parameters
25622563
==========
25632564
folder: the path of the folder
2565+
timeout: maximum run time in seconds
25642566
"""
25652567
folder = folder or os.getcwd()
25662568
result = self.kernels_push(folder, timeout)

kaggle/cli.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,8 @@ def parse_kernels(subparsers):
759759
'-t',
760760
'--timeout',
761761
type=int,
762-
dest='timeout')
762+
dest='timeout',
763+
help=Help.param_kernel_timeout)
763764
parser_kernels_push._action_groups.append(parser_kernels_push_optional)
764765
parser_kernels_push.set_defaults(func=api.kernels_push_cli)
765766

@@ -1526,6 +1527,9 @@ class Help(object):
15261527
param_kernel_competition = 'Find kernels for a given competition slug'
15271528
param_kernel_dataset = ('Find kernels for a given dataset slug. Format is '
15281529
'{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.')
15291533
param_kernel_user = 'Find kernels created by a given username'
15301534
# TODO(b/129357583): Pull these from the same spot as the api impl
15311535
param_kernel_language = (

kagglesdk/kaggle_object.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,10 @@ def __repr__(self):
275275
return KaggleObject.to_json(self, ignore_defaults=False)
276276

277277
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
279282
value = getattr(self, field.private_field_name)
280283
if field.optional:
281284
return value is not None

src/kaggle/api/kaggle_api_extended.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,13 +1737,13 @@ def dataset_download_cli(self,
17371737
raise Exception(response.error_message)
17381738
metadata = response.info
17391739

1740-
if 'info' in metadata and 'licenses' in metadata['info']:
1740+
if metadata and metadata.licenses:
17411741
# license_objs format is like: [{ 'name': 'CC0-1.0' }]
1742-
license_objs = metadata['info']['licenses']
1742+
license_objs = metadata.licenses
17431743
licenses = [
1744-
license_obj['name']
1744+
license_obj.name
17451745
for license_obj in license_objs
1746-
if 'name' in license_obj
1746+
if license_obj.name
17471747
]
17481748
else:
17491749
licenses = [
@@ -2440,6 +2440,7 @@ def kernels_push(self, folder, timeout=None) -> ApiSaveKernelResponse:
24402440
Parameters
24412441
==========
24422442
folder: the path of the folder
2443+
timeout: maximum run time iin seconds
24432444
"""
24442445
if not os.path.isdir(folder):
24452446
raise ValueError('Invalid folder: ' + folder)
@@ -2561,6 +2562,7 @@ def kernels_push_cli(self, folder, timeout):
25612562
Parameters
25622563
==========
25632564
folder: the path of the folder
2565+
timeout: maximum run time in seconds
25642566
"""
25652567
folder = folder or os.getcwd()
25662568
result = self.kernels_push(folder, timeout)

src/kaggle/cli.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,8 @@ def parse_kernels(subparsers):
759759
'-t',
760760
'--timeout',
761761
type=int,
762-
dest='timeout')
762+
dest='timeout',
763+
help=Help.param_kernel_timeout)
763764
parser_kernels_push._action_groups.append(parser_kernels_push_optional)
764765
parser_kernels_push.set_defaults(func=api.kernels_push_cli)
765766

@@ -1526,6 +1527,9 @@ class Help(object):
15261527
param_kernel_competition = 'Find kernels for a given competition slug'
15271528
param_kernel_dataset = ('Find kernels for a given dataset slug. Format is '
15281529
'{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.')
15291533
param_kernel_user = 'Find kernels created by a given username'
15301534
# TODO(b/129357583): Pull these from the same spot as the api impl
15311535
param_kernel_language = (

src/kagglesdk/kaggle_object.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,10 @@ def __repr__(self):
275275
return KaggleObject.to_json(self, ignore_defaults=False)
276276

277277
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
279282
value = getattr(self, field.private_field_name)
280283
if field.optional:
281284
return value is not None

tests/test_commands.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ sed -i s/INSERT_TITLE_HERE/TitleHere/ tests/dataset/dataset-metadata.json
6161
sed -i s/INSERT_SLUG_HERE/$SLUG/ tests/dataset/dataset-metadata.json
6262
kaggle d create -p tests/dataset --public -q -t -r skip
6363
echo "kaggle datasets download"
64+
kaggle datasets download -d willianoliveiragibin/pixar-films # this one breaks in some environments
6465
kaggle d download goefft/public-datasets-with-file-types-and-columns -p tmp --unzip -o -q
6566
kaggle d download goefft/public-datasets-with-file-types-and-columns -f dataset_results.csv -w -q -o
6667
echo "kaggle datasets version"

0 commit comments

Comments
 (0)