kaggle 1.7.3b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kaggle/LICENSE +201 -0
- kaggle/__init__.py +6 -0
- kaggle/api/__init__.py +0 -0
- kaggle/api/kaggle_api.py +614 -0
- kaggle/api/kaggle_api_extended.py +4657 -0
- kaggle/cli.py +1606 -0
- kaggle/configuration.py +206 -0
- kaggle/models/__init__.py +0 -0
- kaggle/models/api_blob_type.py +4 -0
- kaggle/models/dataset_column.py +228 -0
- kaggle/models/dataset_new_request.py +385 -0
- kaggle/models/dataset_new_version_request.py +287 -0
- kaggle/models/dataset_update_settings_request.py +310 -0
- kaggle/models/kaggle_models_extended.py +276 -0
- kaggle/models/kernel_push_request.py +556 -0
- kaggle/models/model_instance_new_version_request.py +145 -0
- kaggle/models/model_instance_update_request.py +351 -0
- kaggle/models/model_new_instance_request.py +417 -0
- kaggle/models/model_new_request.py +314 -0
- kaggle/models/model_update_request.py +282 -0
- kaggle/models/start_blob_upload_request.py +232 -0
- kaggle/models/start_blob_upload_response.py +137 -0
- kaggle/models/upload_file.py +169 -0
- kaggle/test/__init__.py +0 -0
- kaggle/test/test_authenticate.py +43 -0
- kaggle-1.7.3b1.dist-info/METADATA +348 -0
- kaggle-1.7.3b1.dist-info/RECORD +89 -0
- kaggle-1.7.3b1.dist-info/WHEEL +4 -0
- kaggle-1.7.3b1.dist-info/entry_points.txt +2 -0
- kaggle-1.7.3b1.dist-info/licenses/LICENSE.txt +201 -0
- kagglesdk/LICENSE +201 -0
- kagglesdk/__init__.py +2 -0
- kagglesdk/admin/__init__.py +0 -0
- kagglesdk/admin/services/__init__.py +0 -0
- kagglesdk/admin/services/inbox_file_service.py +22 -0
- kagglesdk/admin/types/__init__.py +0 -0
- kagglesdk/admin/types/inbox_file_service.py +74 -0
- kagglesdk/blobs/__init__.py +0 -0
- kagglesdk/blobs/services/__init__.py +0 -0
- kagglesdk/blobs/services/blob_api_service.py +25 -0
- kagglesdk/blobs/types/__init__.py +0 -0
- kagglesdk/blobs/types/blob_api_service.py +177 -0
- kagglesdk/common/__init__.py +0 -0
- kagglesdk/common/types/__init__.py +0 -0
- kagglesdk/common/types/file_download.py +102 -0
- kagglesdk/common/types/http_redirect.py +105 -0
- kagglesdk/competitions/__init__.py +0 -0
- kagglesdk/competitions/services/__init__.py +0 -0
- kagglesdk/competitions/services/competition_api_service.py +129 -0
- kagglesdk/competitions/types/__init__.py +0 -0
- kagglesdk/competitions/types/competition_api_service.py +1874 -0
- kagglesdk/competitions/types/competition_enums.py +53 -0
- kagglesdk/competitions/types/submission_status.py +9 -0
- kagglesdk/datasets/__init__.py +0 -0
- kagglesdk/datasets/services/__init__.py +0 -0
- kagglesdk/datasets/services/dataset_api_service.py +170 -0
- kagglesdk/datasets/types/__init__.py +0 -0
- kagglesdk/datasets/types/dataset_api_service.py +2777 -0
- kagglesdk/datasets/types/dataset_enums.py +82 -0
- kagglesdk/datasets/types/dataset_types.py +646 -0
- kagglesdk/education/__init__.py +0 -0
- kagglesdk/education/services/__init__.py +0 -0
- kagglesdk/education/services/education_api_service.py +19 -0
- kagglesdk/education/types/__init__.py +0 -0
- kagglesdk/education/types/education_api_service.py +248 -0
- kagglesdk/education/types/education_service.py +139 -0
- kagglesdk/kaggle_client.py +66 -0
- kagglesdk/kaggle_env.py +42 -0
- kagglesdk/kaggle_http_client.py +316 -0
- kagglesdk/kaggle_object.py +293 -0
- kagglesdk/kernels/__init__.py +0 -0
- kagglesdk/kernels/services/__init__.py +0 -0
- kagglesdk/kernels/services/kernels_api_service.py +109 -0
- kagglesdk/kernels/types/__init__.py +0 -0
- kagglesdk/kernels/types/kernels_api_service.py +1951 -0
- kagglesdk/kernels/types/kernels_enums.py +33 -0
- kagglesdk/models/__init__.py +0 -0
- kagglesdk/models/services/__init__.py +0 -0
- kagglesdk/models/services/model_api_service.py +255 -0
- kagglesdk/models/services/model_service.py +19 -0
- kagglesdk/models/types/__init__.py +0 -0
- kagglesdk/models/types/model_api_service.py +3719 -0
- kagglesdk/models/types/model_enums.py +60 -0
- kagglesdk/models/types/model_service.py +275 -0
- kagglesdk/models/types/model_types.py +286 -0
- kagglesdk/test/test_client.py +45 -0
- kagglesdk/users/__init__.py +0 -0
- kagglesdk/users/types/__init__.py +0 -0
- kagglesdk/users/types/users_enums.py +22 -0
kaggle/configuration.py
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2024 Kaggle Inc
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
# coding: utf-8
|
|
18
|
+
from __future__ import absolute_import
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
import six
|
|
22
|
+
import sys
|
|
23
|
+
import urllib3
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Configuration:
|
|
27
|
+
|
|
28
|
+
def __init__(self):
|
|
29
|
+
"""Constructor"""
|
|
30
|
+
# Default Base url
|
|
31
|
+
self.host = _get_endpoint_from_env() or "https://www.kaggle.com/api/v1"
|
|
32
|
+
|
|
33
|
+
# Authentication Settings
|
|
34
|
+
# dict to store API key(s)
|
|
35
|
+
self.api_key = {}
|
|
36
|
+
# dict to store API prefix (e.g. Bearer)
|
|
37
|
+
self.api_key_prefix = {}
|
|
38
|
+
# Username for HTTP basic authentication
|
|
39
|
+
self.username = ""
|
|
40
|
+
# Password for HTTP basic authentication
|
|
41
|
+
self.password = ""
|
|
42
|
+
|
|
43
|
+
# Logging Settings
|
|
44
|
+
self.logger = {
|
|
45
|
+
"package_logger": logging.getLogger("kaggle"),
|
|
46
|
+
"urllib3_logger": logging.getLogger("urllib3")
|
|
47
|
+
}
|
|
48
|
+
# Log format
|
|
49
|
+
self.logger_format = '%(asctime)s %(levelname)s %(message)s'
|
|
50
|
+
# Log stream handler
|
|
51
|
+
self.logger_stream_handler = None
|
|
52
|
+
# Log file handler
|
|
53
|
+
self.logger_file_handler = None
|
|
54
|
+
# Debug file location
|
|
55
|
+
self.logger_file = None
|
|
56
|
+
# Debug switch
|
|
57
|
+
self.debug = False
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def logger_file(self):
|
|
61
|
+
"""The logger file.
|
|
62
|
+
|
|
63
|
+
If the logger_file is None, then add stream handler and remove file
|
|
64
|
+
handler. Otherwise, add file handler and remove stream handler.
|
|
65
|
+
|
|
66
|
+
:param value: The logger_file path.
|
|
67
|
+
:type: str
|
|
68
|
+
"""
|
|
69
|
+
return self.__logger_file
|
|
70
|
+
|
|
71
|
+
@logger_file.setter
|
|
72
|
+
def logger_file(self, value):
|
|
73
|
+
"""The logger file.
|
|
74
|
+
|
|
75
|
+
If the logger_file is None, then add stream handler and remove file
|
|
76
|
+
handler. Otherwise, add file handler and remove stream handler.
|
|
77
|
+
|
|
78
|
+
:param value: The logger_file path.
|
|
79
|
+
:type: str
|
|
80
|
+
"""
|
|
81
|
+
self.__logger_file = value
|
|
82
|
+
if self.__logger_file:
|
|
83
|
+
# If set logging file,
|
|
84
|
+
# then add file handler and remove stream handler.
|
|
85
|
+
self.logger_file_handler = logging.FileHandler(self.__logger_file)
|
|
86
|
+
self.logger_file_handler.setFormatter(self.logger_formatter)
|
|
87
|
+
for _, logger in six.iteritems(self.logger):
|
|
88
|
+
logger.addHandler(self.logger_file_handler)
|
|
89
|
+
if self.logger_stream_handler:
|
|
90
|
+
logger.removeHandler(self.logger_stream_handler)
|
|
91
|
+
else:
|
|
92
|
+
# If not set logging file,
|
|
93
|
+
# then add stream handler and remove file handler.
|
|
94
|
+
self.logger_stream_handler = logging.StreamHandler()
|
|
95
|
+
self.logger_stream_handler.setFormatter(self.logger_formatter)
|
|
96
|
+
for _, logger in six.iteritems(self.logger):
|
|
97
|
+
logger.addHandler(self.logger_stream_handler)
|
|
98
|
+
if self.logger_file_handler:
|
|
99
|
+
logger.removeHandler(self.logger_file_handler)
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def debug(self):
|
|
103
|
+
"""Debug status
|
|
104
|
+
|
|
105
|
+
:param value: The debug status, True or False.
|
|
106
|
+
:type: bool
|
|
107
|
+
"""
|
|
108
|
+
return self.__debug
|
|
109
|
+
|
|
110
|
+
@debug.setter
|
|
111
|
+
def debug(self, value):
|
|
112
|
+
"""Debug status
|
|
113
|
+
|
|
114
|
+
:param value: The debug status, True or False.
|
|
115
|
+
:type: bool
|
|
116
|
+
"""
|
|
117
|
+
self.__debug = value
|
|
118
|
+
if self.__debug:
|
|
119
|
+
# if debug status is True, turn on debug logging
|
|
120
|
+
for _, logger in six.iteritems(self.logger):
|
|
121
|
+
logger.setLevel(logging.DEBUG)
|
|
122
|
+
else:
|
|
123
|
+
# if debug status is False, turn off debug logging,
|
|
124
|
+
# setting log level to default `logging.WARNING`
|
|
125
|
+
for _, logger in six.iteritems(self.logger):
|
|
126
|
+
logger.setLevel(logging.WARNING)
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def logger_format(self):
|
|
130
|
+
"""The logger format.
|
|
131
|
+
|
|
132
|
+
The logger_formatter will be updated when sets logger_format.
|
|
133
|
+
|
|
134
|
+
:param value: The format string.
|
|
135
|
+
:type: str
|
|
136
|
+
"""
|
|
137
|
+
return self.__logger_format
|
|
138
|
+
|
|
139
|
+
@logger_format.setter
|
|
140
|
+
def logger_format(self, value):
|
|
141
|
+
"""The logger format.
|
|
142
|
+
|
|
143
|
+
The logger_formatter will be updated when sets logger_format.
|
|
144
|
+
|
|
145
|
+
:param value: The format string.
|
|
146
|
+
:type: str
|
|
147
|
+
"""
|
|
148
|
+
self.__logger_format = value
|
|
149
|
+
self.logger_formatter = logging.Formatter(self.__logger_format)
|
|
150
|
+
|
|
151
|
+
def get_api_key_with_prefix(self, identifier):
|
|
152
|
+
"""Gets API key (with prefix if set).
|
|
153
|
+
|
|
154
|
+
:param identifier: The identifier of apiKey.
|
|
155
|
+
:return: The token for api key authentication.
|
|
156
|
+
"""
|
|
157
|
+
if (self.api_key.get(identifier) and self.api_key_prefix.get(identifier)):
|
|
158
|
+
return self.api_key_prefix[identifier] + ' ' + self.api_key[
|
|
159
|
+
identifier] # noqa: E501
|
|
160
|
+
elif self.api_key.get(identifier):
|
|
161
|
+
return self.api_key[identifier]
|
|
162
|
+
|
|
163
|
+
def get_basic_auth_token(self):
|
|
164
|
+
"""Gets HTTP basic authentication header (string).
|
|
165
|
+
|
|
166
|
+
:return: The token for basic HTTP authentication.
|
|
167
|
+
"""
|
|
168
|
+
return urllib3.util.make_headers(basic_auth=self.username + ':' +
|
|
169
|
+
self.password).get('authorization')
|
|
170
|
+
|
|
171
|
+
def auth_settings(self):
|
|
172
|
+
"""Gets Auth Settings dict for api client.
|
|
173
|
+
|
|
174
|
+
:return: The Auth Settings information dict.
|
|
175
|
+
"""
|
|
176
|
+
return {
|
|
177
|
+
'basicAuth': {
|
|
178
|
+
'type': 'basic',
|
|
179
|
+
'in': 'header',
|
|
180
|
+
'key': 'Authorization',
|
|
181
|
+
'value': self.get_basic_auth_token()
|
|
182
|
+
},
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
def to_debug_report(self):
|
|
186
|
+
"""Gets the essential information for debugging.
|
|
187
|
+
|
|
188
|
+
:return: The report for debugging.
|
|
189
|
+
"""
|
|
190
|
+
return "Python SDK Debug Report:\n" \
|
|
191
|
+
"OS: {env}\n" \
|
|
192
|
+
"Python Version: {pyversion}\n" \
|
|
193
|
+
"Version of the API: 1\n" \
|
|
194
|
+
"SDK Package Version: 1". \
|
|
195
|
+
format(env=sys.platform, pyversion=sys.version)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def _get_endpoint_from_env():
|
|
199
|
+
import os
|
|
200
|
+
endpoint = os.environ.get("KAGGLE_API_ENDPOINT")
|
|
201
|
+
if endpoint is None:
|
|
202
|
+
return None
|
|
203
|
+
endpoint = endpoint.rstrip("/")
|
|
204
|
+
if endpoint.endswith("/api/v1"):
|
|
205
|
+
return endpoint
|
|
206
|
+
return endpoint + "/api/v1"
|
|
File without changes
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2024 Kaggle Inc
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
# coding: utf-8
|
|
18
|
+
|
|
19
|
+
import pprint
|
|
20
|
+
import re # noqa: F401
|
|
21
|
+
|
|
22
|
+
import six
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class DatasetColumn(object):
|
|
26
|
+
"""
|
|
27
|
+
Attributes:
|
|
28
|
+
column_types (dict): The key is attribute name
|
|
29
|
+
and the value is attribute type.
|
|
30
|
+
attribute_map (dict): The key is attribute name
|
|
31
|
+
and the value is json key in definition.
|
|
32
|
+
"""
|
|
33
|
+
column_types = {
|
|
34
|
+
'order': 'float',
|
|
35
|
+
'name': 'str',
|
|
36
|
+
'type': 'str',
|
|
37
|
+
'original_type': 'str',
|
|
38
|
+
'description': 'str'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
attribute_map = {
|
|
42
|
+
'order': 'order',
|
|
43
|
+
'name': 'name',
|
|
44
|
+
'type': 'type',
|
|
45
|
+
'original_type': 'originalType',
|
|
46
|
+
'description': 'description'
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
def __init__(self,
|
|
50
|
+
order=None,
|
|
51
|
+
name=None,
|
|
52
|
+
type=None,
|
|
53
|
+
original_type=None,
|
|
54
|
+
description=None): # noqa: E501
|
|
55
|
+
"""DatasetColumn - a model defined in Swagger""" # noqa: E501
|
|
56
|
+
|
|
57
|
+
self._order = None
|
|
58
|
+
self._name = None
|
|
59
|
+
self._type = None
|
|
60
|
+
self._original_type = None
|
|
61
|
+
self._description = None
|
|
62
|
+
self.discriminator = None
|
|
63
|
+
|
|
64
|
+
if order is not None:
|
|
65
|
+
self.order = order
|
|
66
|
+
if name is not None:
|
|
67
|
+
self.name = name
|
|
68
|
+
if type is not None:
|
|
69
|
+
self.type = type
|
|
70
|
+
if original_type is not None:
|
|
71
|
+
self.original_type = original_type
|
|
72
|
+
if description is not None:
|
|
73
|
+
self.description = description
|
|
74
|
+
|
|
75
|
+
@property
|
|
76
|
+
def order(self):
|
|
77
|
+
"""Gets the order of this DatasetColumn. # noqa: E501
|
|
78
|
+
|
|
79
|
+
The order that the column comes in, 0-based. (The first column is 0, second is 1, etc.) # noqa: E501
|
|
80
|
+
|
|
81
|
+
:return: The order of this DatasetColumn. # noqa: E501
|
|
82
|
+
:rtype: float
|
|
83
|
+
"""
|
|
84
|
+
return self._order
|
|
85
|
+
|
|
86
|
+
@order.setter
|
|
87
|
+
def order(self, order):
|
|
88
|
+
"""Sets the order of this DatasetColumn.
|
|
89
|
+
|
|
90
|
+
The order that the column comes in, 0-based. (The first column is 0, second is 1, etc.) # noqa: E501
|
|
91
|
+
|
|
92
|
+
:param order: The order of this DatasetColumn. # noqa: E501
|
|
93
|
+
:type: float
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
self._order = order
|
|
97
|
+
|
|
98
|
+
@property
|
|
99
|
+
def name(self):
|
|
100
|
+
"""Gets the name of this DatasetColumn. # noqa: E501
|
|
101
|
+
|
|
102
|
+
The column name # noqa: E501
|
|
103
|
+
|
|
104
|
+
:return: The name of this DatasetColumn. # noqa: E501
|
|
105
|
+
:rtype: str
|
|
106
|
+
"""
|
|
107
|
+
return self._name
|
|
108
|
+
|
|
109
|
+
@name.setter
|
|
110
|
+
def name(self, name):
|
|
111
|
+
"""Sets the name of this DatasetColumn.
|
|
112
|
+
|
|
113
|
+
The column name # noqa: E501
|
|
114
|
+
|
|
115
|
+
:param name: The name of this DatasetColumn. # noqa: E501
|
|
116
|
+
:type: str
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
self._name = name
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def type(self):
|
|
123
|
+
"""Gets the type of this DatasetColumn. # noqa: E501
|
|
124
|
+
|
|
125
|
+
The type of all of the fields in the column. Please see the data types on https://github.com/Kaggle/kaggle-api/wiki/Dataset-Metadata # noqa: E501
|
|
126
|
+
|
|
127
|
+
:return: The type of this DatasetColumn. # noqa: E501
|
|
128
|
+
:rtype: str
|
|
129
|
+
"""
|
|
130
|
+
return self._type
|
|
131
|
+
|
|
132
|
+
@type.setter
|
|
133
|
+
def type(self, type):
|
|
134
|
+
"""Sets the type of this DatasetColumn.
|
|
135
|
+
|
|
136
|
+
The type of all of the fields in the column. Please see the data types on https://github.com/Kaggle/kaggle-api/wiki/Dataset-Metadata # noqa: E501
|
|
137
|
+
|
|
138
|
+
:param type: The type of this DatasetColumn. # noqa: E501
|
|
139
|
+
:type: str
|
|
140
|
+
"""
|
|
141
|
+
|
|
142
|
+
self._type = type
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def original_type(self):
|
|
146
|
+
"""Gets the original_type of this DatasetColumn. # noqa: E501
|
|
147
|
+
|
|
148
|
+
Used to store the original type of the column, which will be converted to Kaggle's types. For example, an `originalType` of `\"integer\"` would convert to a `type` of `\"numeric\"` # noqa: E501
|
|
149
|
+
|
|
150
|
+
:return: The original_type of this DatasetColumn. # noqa: E501
|
|
151
|
+
:rtype: str
|
|
152
|
+
"""
|
|
153
|
+
return self._original_type
|
|
154
|
+
|
|
155
|
+
@original_type.setter
|
|
156
|
+
def original_type(self, original_type):
|
|
157
|
+
"""Sets the original_type of this DatasetColumn.
|
|
158
|
+
|
|
159
|
+
Used to store the original type of the column, which will be converted to Kaggle's types. For example, an `originalType` of `\"integer\"` would convert to a `type` of `\"numeric\"` # noqa: E501
|
|
160
|
+
|
|
161
|
+
:param original_type: The original_type of this DatasetColumn. # noqa: E501
|
|
162
|
+
:type: str
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
self._original_type = original_type
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def description(self):
|
|
169
|
+
"""Gets the description of this DatasetColumn. # noqa: E501
|
|
170
|
+
|
|
171
|
+
The description of the column # noqa: E501
|
|
172
|
+
|
|
173
|
+
:return: The description of this DatasetColumn. # noqa: E501
|
|
174
|
+
:rtype: str
|
|
175
|
+
"""
|
|
176
|
+
return self._description
|
|
177
|
+
|
|
178
|
+
@description.setter
|
|
179
|
+
def description(self, description):
|
|
180
|
+
"""Sets the description of this DatasetColumn.
|
|
181
|
+
|
|
182
|
+
The description of the column # noqa: E501
|
|
183
|
+
|
|
184
|
+
:param description: The description of this DatasetColumn. # noqa: E501
|
|
185
|
+
:type: str
|
|
186
|
+
"""
|
|
187
|
+
|
|
188
|
+
self._description = description
|
|
189
|
+
|
|
190
|
+
def to_dict(self):
|
|
191
|
+
"""Returns the model properties as a dict"""
|
|
192
|
+
result = {}
|
|
193
|
+
|
|
194
|
+
for attr, _ in six.iteritems(self.column_types):
|
|
195
|
+
value = getattr(self, attr)
|
|
196
|
+
if isinstance(value, list):
|
|
197
|
+
result[attr] = list(
|
|
198
|
+
map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value))
|
|
199
|
+
elif hasattr(value, "to_dict"):
|
|
200
|
+
result[attr] = value.to_dict()
|
|
201
|
+
elif isinstance(value, dict):
|
|
202
|
+
result[attr] = dict(
|
|
203
|
+
map(
|
|
204
|
+
lambda item: (item[0], item[1].to_dict())
|
|
205
|
+
if hasattr(item[1], "to_dict") else item, value.items()))
|
|
206
|
+
else:
|
|
207
|
+
result[attr] = value
|
|
208
|
+
|
|
209
|
+
return result
|
|
210
|
+
|
|
211
|
+
def to_str(self):
|
|
212
|
+
"""Returns the string representation of the model"""
|
|
213
|
+
return pprint.pformat(self.to_dict())
|
|
214
|
+
|
|
215
|
+
def __repr__(self):
|
|
216
|
+
"""For `print` and `pprint`"""
|
|
217
|
+
return self.to_str()
|
|
218
|
+
|
|
219
|
+
def __eq__(self, other):
|
|
220
|
+
"""Returns true if both objects are equal"""
|
|
221
|
+
if not isinstance(other, DatasetColumn):
|
|
222
|
+
return False
|
|
223
|
+
|
|
224
|
+
return self.__dict__ == other.__dict__
|
|
225
|
+
|
|
226
|
+
def __ne__(self, other):
|
|
227
|
+
"""Returns true if both objects are not equal"""
|
|
228
|
+
return not self == other
|