Skip to content

Commit 9fd3320

Browse files
authored
Add kagglesdk (#623)
This is generated code. To the extent that it has been tested, it is used in some of the public API code, which is exercised by the unit tests. It might be nice if there was a way to allow both this repo and `kagglehub` to share this package without publishing to pypi.
1 parent baf8902 commit 9fd3320

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+11568
-0
lines changed

kagglesdk/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from kagglesdk.kaggle_client import KaggleClient
2+
from kagglesdk.kaggle_env import KaggleEnv

kagglesdk/common/__init__.py

Whitespace-only changes.

kagglesdk/common/types/__init__.py

Whitespace-only changes.
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
from kagglesdk.kaggle_object import *
2+
from typing import Optional
3+
4+
class FileDownload(KaggleObject):
5+
r"""
6+
Standard response object representing a file download.
7+
See http://go/kaggle-proto-handler-file-downloads
8+
Some field names/descriptions borrowed from
9+
google3/gdata/rosy/proto/data.proto
10+
11+
Attributes:
12+
content_type (str)
13+
MIME type of the data
14+
TODO(aip.dev/143): (-- api-linter: core::0143::standardized-codes=disabled
15+
--)
16+
file_name (str)
17+
Original file name
18+
token (str)
19+
A unique fingerprint for the file/media data
20+
content_length (int)
21+
Size of the data, in bytes (if known)
22+
"""
23+
24+
def __init__(self):
25+
self._content_type = ""
26+
self._file_name = ""
27+
self._token = ""
28+
self._content_length = None
29+
self._freeze()
30+
31+
@property
32+
def content_type(self) -> str:
33+
r"""
34+
MIME type of the data
35+
TODO(aip.dev/143): (-- api-linter: core::0143::standardized-codes=disabled
36+
--)
37+
"""
38+
return self._content_type
39+
40+
@content_type.setter
41+
def content_type(self, content_type: str):
42+
if content_type is None:
43+
del self.content_type
44+
return
45+
if not isinstance(content_type, str):
46+
raise TypeError('content_type must be of type str')
47+
self._content_type = content_type
48+
49+
@property
50+
def file_name(self) -> str:
51+
"""Original file name"""
52+
return self._file_name
53+
54+
@file_name.setter
55+
def file_name(self, file_name: str):
56+
if file_name is None:
57+
del self.file_name
58+
return
59+
if not isinstance(file_name, str):
60+
raise TypeError('file_name must be of type str')
61+
self._file_name = file_name
62+
63+
@property
64+
def token(self) -> str:
65+
"""A unique fingerprint for the file/media data"""
66+
return self._token
67+
68+
@token.setter
69+
def token(self, token: str):
70+
if token is None:
71+
del self.token
72+
return
73+
if not isinstance(token, str):
74+
raise TypeError('token must be of type str')
75+
self._token = token
76+
77+
@property
78+
def content_length(self) -> int:
79+
"""Size of the data, in bytes (if known)"""
80+
return self._content_length or 0
81+
82+
@content_length.setter
83+
def content_length(self, content_length: int):
84+
if content_length is None:
85+
del self.content_length
86+
return
87+
if not isinstance(content_length, int):
88+
raise TypeError('content_length must be of type int')
89+
self._content_length = content_length
90+
91+
92+
FileDownload._fields = [
93+
FieldMetadata("contentType", "content_type", "_content_type", str, "", PredefinedSerializer()),
94+
FieldMetadata("fileName", "file_name", "_file_name", str, "", PredefinedSerializer()),
95+
FieldMetadata("token", "token", "_token", str, "", PredefinedSerializer()),
96+
FieldMetadata("contentLength", "content_length", "_content_length", int, None, PredefinedSerializer(), optional=True),
97+
]
98+
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
from datetime import timedelta
2+
from kagglesdk.kaggle_object import *
3+
from typing import Optional
4+
5+
class HttpRedirect(KaggleObject):
6+
r"""
7+
Represents an HTTP redirect (e.g. 301 or 302) response.
8+
Patterned after ASP.NET MVC's RedirectResult.
9+
10+
Attributes:
11+
url (str)
12+
Destination URL for the redirect.
13+
permanent (bool)
14+
Should it be an HTTP 301 (permanent) redirect or just temporary (HTTP
15+
302)?.
16+
bypass_encoding (bool)
17+
When `true`, the `url` is already encoded, so bypass `UriHelper.Encode`.
18+
Otherwise, invoke `UriHelper.Encode` on the `url` before returning to the
19+
client.
20+
expiry (timedelta)
21+
Specifies how long the redirected url can be cached.
22+
"""
23+
24+
def __init__(self):
25+
self._url = ""
26+
self._permanent = False
27+
self._bypass_encoding = None
28+
self._expiry = None
29+
self._freeze()
30+
31+
@property
32+
def url(self) -> str:
33+
"""Destination URL for the redirect."""
34+
return self._url
35+
36+
@url.setter
37+
def url(self, url: str):
38+
if url is None:
39+
del self.url
40+
return
41+
if not isinstance(url, str):
42+
raise TypeError('url must be of type str')
43+
self._url = url
44+
45+
@property
46+
def permanent(self) -> bool:
47+
r"""
48+
Should it be an HTTP 301 (permanent) redirect or just temporary (HTTP
49+
302)?.
50+
"""
51+
return self._permanent
52+
53+
@permanent.setter
54+
def permanent(self, permanent: bool):
55+
if permanent is None:
56+
del self.permanent
57+
return
58+
if not isinstance(permanent, bool):
59+
raise TypeError('permanent must be of type bool')
60+
self._permanent = permanent
61+
62+
@property
63+
def bypass_encoding(self) -> bool:
64+
r"""
65+
When `true`, the `url` is already encoded, so bypass `UriHelper.Encode`.
66+
Otherwise, invoke `UriHelper.Encode` on the `url` before returning to the
67+
client.
68+
"""
69+
return self._bypass_encoding or False
70+
71+
@bypass_encoding.setter
72+
def bypass_encoding(self, bypass_encoding: bool):
73+
if bypass_encoding is None:
74+
del self.bypass_encoding
75+
return
76+
if not isinstance(bypass_encoding, bool):
77+
raise TypeError('bypass_encoding must be of type bool')
78+
self._bypass_encoding = bypass_encoding
79+
80+
@property
81+
def expiry(self) -> timedelta:
82+
"""Specifies how long the redirected url can be cached."""
83+
return self._expiry
84+
85+
@expiry.setter
86+
def expiry(self, expiry: timedelta):
87+
if expiry is None:
88+
del self.expiry
89+
return
90+
if not isinstance(expiry, timedelta):
91+
raise TypeError('expiry must be of type timedelta')
92+
self._expiry = expiry
93+
94+
95+
@classmethod
96+
def prepare_from(cls, http_response):
97+
return http_response
98+
99+
HttpRedirect._fields = [
100+
FieldMetadata("url", "url", "_url", str, "", PredefinedSerializer()),
101+
FieldMetadata("permanent", "permanent", "_permanent", bool, False, PredefinedSerializer()),
102+
FieldMetadata("bypassEncoding", "bypass_encoding", "_bypass_encoding", bool, None, PredefinedSerializer(), optional=True),
103+
FieldMetadata("expiry", "expiry", "_expiry", timedelta, None, TimeDeltaSerializer()),
104+
]
105+

kagglesdk/competitions/__init__.py

Whitespace-only changes.

kagglesdk/competitions/services/__init__.py

Whitespace-only changes.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
from kagglesdk.common.types.file_download import FileDownload
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, ApiListCompetitionsRequest, ApiListCompetitionsResponse, ApiListDataFilesRequest, ApiListDataFilesResponse, ApiListSubmissionsRequest, ApiListSubmissionsResponse, ApiStartSubmissionUploadRequest, ApiStartSubmissionUploadResponse
4+
from kagglesdk.kaggle_http_client import KaggleHttpClient
5+
6+
class CompetitionApiClient(object):
7+
8+
def __init__(self, client: KaggleHttpClient):
9+
self._client = client
10+
11+
def list_competitions(self, request: ApiListCompetitionsRequest = None) -> ApiListCompetitionsResponse:
12+
r"""
13+
Args:
14+
request (ApiListCompetitionsRequest):
15+
The request object; initialized to empty instance if not specified.
16+
"""
17+
18+
if request is None:
19+
request = ApiListCompetitionsRequest()
20+
21+
return self._client.call("competitions.CompetitionApiService", "ApiListCompetitions", request, ApiListCompetitionsResponse)
22+
23+
def list_submissions(self, request: ApiListSubmissionsRequest = None) -> ApiListSubmissionsResponse:
24+
r"""
25+
Args:
26+
request (ApiListSubmissionsRequest):
27+
The request object; initialized to empty instance if not specified.
28+
"""
29+
30+
if request is None:
31+
request = ApiListSubmissionsRequest()
32+
33+
return self._client.call("competitions.CompetitionApiService", "ApiListSubmissions", request, ApiListSubmissionsResponse)
34+
35+
def list_data_files(self, request: ApiListDataFilesRequest = None) -> ApiListDataFilesResponse:
36+
r"""
37+
Args:
38+
request (ApiListDataFilesRequest):
39+
The request object; initialized to empty instance if not specified.
40+
"""
41+
42+
if request is None:
43+
request = ApiListDataFilesRequest()
44+
45+
return self._client.call("competitions.CompetitionApiService", "ApiListDataFiles", request, ApiListDataFilesResponse)
46+
47+
def get_leaderboard(self, request: ApiGetLeaderboardRequest = None) -> ApiGetLeaderboardResponse:
48+
r"""
49+
Args:
50+
request (ApiGetLeaderboardRequest):
51+
The request object; initialized to empty instance if not specified.
52+
"""
53+
54+
if request is None:
55+
request = ApiGetLeaderboardRequest()
56+
57+
return self._client.call("competitions.CompetitionApiService", "ApiGetLeaderboard", request, ApiGetLeaderboardResponse)
58+
59+
def download_leaderboard(self, request: ApiDownloadLeaderboardRequest = None) -> FileDownload:
60+
r"""
61+
Args:
62+
request (ApiDownloadLeaderboardRequest):
63+
The request object; initialized to empty instance if not specified.
64+
"""
65+
66+
if request is None:
67+
request = ApiDownloadLeaderboardRequest()
68+
69+
return self._client.call("competitions.CompetitionApiService", "ApiDownloadLeaderboard", request, FileDownload)
70+
71+
def create_submission(self, request: ApiCreateSubmissionRequest = None) -> ApiCreateSubmissionResponse:
72+
r"""
73+
Args:
74+
request (ApiCreateSubmissionRequest):
75+
The request object; initialized to empty instance if not specified.
76+
"""
77+
78+
if request is None:
79+
request = ApiCreateSubmissionRequest()
80+
81+
return self._client.call("competitions.CompetitionApiService", "ApiCreateSubmission", request, ApiCreateSubmissionResponse)
82+
83+
def start_submission_upload(self, request: ApiStartSubmissionUploadRequest = None) -> ApiStartSubmissionUploadResponse:
84+
r"""
85+
Args:
86+
request (ApiStartSubmissionUploadRequest):
87+
The request object; initialized to empty instance if not specified.
88+
"""
89+
90+
if request is None:
91+
request = ApiStartSubmissionUploadRequest()
92+
93+
return self._client.call("competitions.CompetitionApiService", "ApiStartSubmissionUpload", request, ApiStartSubmissionUploadResponse)
94+
95+
def download_data_files(self, request: ApiDownloadDataFilesRequest = None) -> HttpRedirect:
96+
r"""
97+
Args:
98+
request (ApiDownloadDataFilesRequest):
99+
The request object; initialized to empty instance if not specified.
100+
"""
101+
102+
if request is None:
103+
request = ApiDownloadDataFilesRequest()
104+
105+
return self._client.call("competitions.CompetitionApiService", "ApiDownloadDataFiles", request, HttpRedirect)
106+
107+
def download_data_file(self, request: ApiDownloadDataFileRequest = None) -> HttpRedirect:
108+
r"""
109+
Args:
110+
request (ApiDownloadDataFileRequest):
111+
The request object; initialized to empty instance if not specified.
112+
"""
113+
114+
if request is None:
115+
request = ApiDownloadDataFileRequest()
116+
117+
return self._client.call("competitions.CompetitionApiService", "ApiDownloadDataFile", request, HttpRedirect)

kagglesdk/competitions/types/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)