Skip to content

Commit ac758fa

Browse files
authored
Full kagglesdk regen and release 0.1.33 (#59)
Fixes broken import chain in 0.1.32 where several files (host_service, episode_service, competition_api_service) referenced modules that were never shipped: competition_types, simulations, competition_email_invite, evaluation_algorithm, submission, legacy_competition_host_service, kernels_service. This crashed at import time in any consumer that touched those services. Root cause: prior scoped commits copied only the touched service files without their transitive import closure. This commit does a full sync of the kapigen output across all packages. Merge strategy: kapigen produces two flavors depending on flags (internal, tuned for frontend / ExportToFrontend, and publicapi, tuned for the kagglesdk publish flow / isKaggleSdk). Neither is a strict superset. The publicapi flavor has correct kagglesdk-tuned support code (KaggleClient.__init__, kaggle_http_client), while internal has broader class coverage. We take publicapi as the base and layer internal-only classes on top, using a class-level union for files where both flavors have overlapping but non-identical class sets. Verified: all 320 kagglesdk modules import cleanly and KaggleClient instantiates with all 21 subclients accessible.
1 parent ab06cbb commit ac758fa

15 files changed

Lines changed: 519 additions & 4036 deletions

kagglesdk/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "0.1.32"
1+
__version__ = "0.1.33"
22

33
from kagglesdk.kaggle_client import KaggleClient
44
from kagglesdk.kaggle_creds import KaggleCredentials

kagglesdk/benchmarks/types/benchmark_enums.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ class BenchmarkTaskVersionSource(enum.Enum):
3838
"""Created by the LIH 'Benchmark Sandbox: Discover What Works' flow."""
3939
WEB = 2
4040
r"""
41-
Created via the kaggle.com web client (e.g. CreateBenchmarkTaskFromPrompt
42-
or saving a benchmark task from a kernel session).
41+
Created via a kaggle.com web RPC (e.g. CreateBenchmarkTaskFromPrompt,
42+
CreateBenchmarkTaskFromDockerImage, or saving a benchmark task from a
43+
kernel session).
4344
"""
4445
CLI = 3
4546
"""Created via the Kaggle CLI / public BenchmarkTasksApi handler."""

kagglesdk/benchmarks/types/benchmark_task_run_service.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@ class BatchScheduleBenchmarkModelVersionResult(KaggleObject):
1616
benchmark_task_version_id (int)
1717
One of the values provided in
1818
BatchScheduleBenchmarkTaskRunsRequest.benchmark_task_versions
19+
parent_task_version_id (int)
20+
When the requested benchmark_task_version_id is a child of another task
21+
version, scheduling is redirected to the parent and this field reports the
22+
parent's id. Unset when the requested task version was executed directly.
1923
"""
2024

2125
def __init__(self):
2226
self._benchmark_model_version_id = 0
2327
self._run_scheduled = False
2428
self._run_skipped_reason = None
2529
self._benchmark_task_version_id = 0
30+
self._parent_task_version_id = None
2631
self._freeze()
2732

2833
@property
@@ -93,11 +98,30 @@ def run_skipped_reason(self, run_skipped_reason: Optional[str]):
9398
raise TypeError('run_skipped_reason must be of type str')
9499
self._run_skipped_reason = run_skipped_reason
95100

101+
@property
102+
def parent_task_version_id(self) -> int:
103+
r"""
104+
When the requested benchmark_task_version_id is a child of another task
105+
version, scheduling is redirected to the parent and this field reports the
106+
parent's id. Unset when the requested task version was executed directly.
107+
"""
108+
return self._parent_task_version_id or 0
109+
110+
@parent_task_version_id.setter
111+
def parent_task_version_id(self, parent_task_version_id: Optional[int]):
112+
if parent_task_version_id is None:
113+
del self.parent_task_version_id
114+
return
115+
if not isinstance(parent_task_version_id, int):
116+
raise TypeError('parent_task_version_id must be of type int')
117+
self._parent_task_version_id = parent_task_version_id
118+
96119

97120
BatchScheduleBenchmarkModelVersionResult._fields = [
98121
FieldMetadata("benchmarkModelVersionId", "benchmark_model_version_id", "_benchmark_model_version_id", int, 0, PredefinedSerializer()),
99122
FieldMetadata("runScheduled", "run_scheduled", "_run_scheduled", bool, False, PredefinedSerializer()),
100123
FieldMetadata("runSkippedReason", "run_skipped_reason", "_run_skipped_reason", str, None, PredefinedSerializer(), optional=True),
101124
FieldMetadata("benchmarkTaskVersionId", "benchmark_task_version_id", "_benchmark_task_version_id", int, 0, PredefinedSerializer()),
125+
FieldMetadata("parentTaskVersionId", "parent_task_version_id", "_parent_task_version_id", int, None, PredefinedSerializer(), optional=True),
102126
]
103127

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
from kagglesdk.kaggle_object import *
2+
3+
class EnvVariable(KaggleObject):
4+
r"""
5+
Environment variable on a DOCKER_IMAGE BenchmarkTask's container.
6+
7+
- `key`: variable name (e.g. `API_BASE_URL`).
8+
- `value`: literal value, OR (when `is_secret_name` is true) the name
9+
of a UserSecret on the caller's account.
10+
- `is_secret_name`: when true, the system resolves `value` against the
11+
caller's UserSecrets at runtime and injects the resolved secret.
12+
13+
Attributes:
14+
key (str)
15+
value (str)
16+
is_secret_name (bool)
17+
"""
18+
19+
def __init__(self):
20+
self._key = ""
21+
self._value = ""
22+
self._is_secret_name = False
23+
self._freeze()
24+
25+
@property
26+
def key(self) -> str:
27+
return self._key
28+
29+
@key.setter
30+
def key(self, key: str):
31+
if key is None:
32+
del self.key
33+
return
34+
if not isinstance(key, str):
35+
raise TypeError('key must be of type str')
36+
self._key = key
37+
38+
@property
39+
def value(self) -> str:
40+
return self._value
41+
42+
@value.setter
43+
def value(self, value: str):
44+
if value is None:
45+
del self.value
46+
return
47+
if not isinstance(value, str):
48+
raise TypeError('value must be of type str')
49+
self._value = value
50+
51+
@property
52+
def is_secret_name(self) -> bool:
53+
return self._is_secret_name
54+
55+
@is_secret_name.setter
56+
def is_secret_name(self, is_secret_name: bool):
57+
if is_secret_name is None:
58+
del self.is_secret_name
59+
return
60+
if not isinstance(is_secret_name, bool):
61+
raise TypeError('is_secret_name must be of type bool')
62+
self._is_secret_name = is_secret_name
63+
64+
65+
class UserSecret(KaggleObject):
66+
r"""
67+
UserSecret to create/update on the caller's account before running a
68+
DOCKER_IMAGE BenchmarkTask.
69+
70+
- `name`: secret label (matched against existing UserSecrets by Label).
71+
- `value`: plaintext secret value.
72+
- `override_existing`: when true, replace any existing secret with the
73+
same name. When false, fail with AlreadyExists on a name collision.
74+
75+
Attributes:
76+
name (str)
77+
value (str)
78+
override_existing (bool)
79+
"""
80+
81+
def __init__(self):
82+
self._name = ""
83+
self._value = ""
84+
self._override_existing = False
85+
self._freeze()
86+
87+
@property
88+
def name(self) -> str:
89+
return self._name
90+
91+
@name.setter
92+
def name(self, name: str):
93+
if name is None:
94+
del self.name
95+
return
96+
if not isinstance(name, str):
97+
raise TypeError('name must be of type str')
98+
self._name = name
99+
100+
@property
101+
def value(self) -> str:
102+
return self._value
103+
104+
@value.setter
105+
def value(self, value: str):
106+
if value is None:
107+
del self.value
108+
return
109+
if not isinstance(value, str):
110+
raise TypeError('value must be of type str')
111+
self._value = value
112+
113+
@property
114+
def override_existing(self) -> bool:
115+
return self._override_existing
116+
117+
@override_existing.setter
118+
def override_existing(self, override_existing: bool):
119+
if override_existing is None:
120+
del self.override_existing
121+
return
122+
if not isinstance(override_existing, bool):
123+
raise TypeError('override_existing must be of type bool')
124+
self._override_existing = override_existing
125+
126+
127+
EnvVariable._fields = [
128+
FieldMetadata("key", "key", "_key", str, "", PredefinedSerializer()),
129+
FieldMetadata("value", "value", "_value", str, "", PredefinedSerializer()),
130+
FieldMetadata("isSecretName", "is_secret_name", "_is_secret_name", bool, False, PredefinedSerializer()),
131+
]
132+
133+
UserSecret._fields = [
134+
FieldMetadata("name", "name", "_name", str, "", PredefinedSerializer()),
135+
FieldMetadata("value", "value", "_value", str, "", PredefinedSerializer()),
136+
FieldMetadata("overrideExisting", "override_existing", "_override_existing", bool, False, PredefinedSerializer()),
137+
]
138+

0 commit comments

Comments
 (0)