polyaxon 2.5.3__py3-none-any.whl → 2.6.0.post1__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.
- polyaxon/_auxiliaries/default_scheduling.py +17 -7
- polyaxon/_auxiliaries/init.py +14 -6
- polyaxon/_auxiliaries/sidecar.py +10 -8
- polyaxon/_compiler/resolver/agent.py +10 -9
- polyaxon/_deploy/schemas/auth.py +3 -3
- polyaxon/_deploy/schemas/celery.py +10 -8
- polyaxon/_deploy/schemas/deployment.py +148 -115
- polyaxon/_deploy/schemas/email.py +8 -8
- polyaxon/_deploy/schemas/ingress.py +7 -7
- polyaxon/_deploy/schemas/intervals.py +3 -1
- polyaxon/_deploy/schemas/operators.py +8 -8
- polyaxon/_deploy/schemas/proxy.py +9 -9
- polyaxon/_deploy/schemas/rbac.py +1 -1
- polyaxon/_deploy/schemas/root_user.py +5 -5
- polyaxon/_deploy/schemas/security_context.py +25 -15
- polyaxon/_deploy/schemas/service.py +73 -69
- polyaxon/_deploy/schemas/ssl.py +3 -3
- polyaxon/_deploy/schemas/ui.py +10 -8
- polyaxon/_docker/builder/builder.py +4 -1
- polyaxon/_docker/converter/base/containers.py +4 -7
- polyaxon/_docker/converter/base/env_vars.py +5 -5
- polyaxon/_docker/converter/base/mounts.py +2 -2
- polyaxon/_docker/docker_types.py +57 -30
- polyaxon/_flow/__init__.py +3 -2
- polyaxon/_flow/builds/__init__.py +8 -8
- polyaxon/_flow/cache/__init__.py +4 -4
- polyaxon/_flow/component/base.py +25 -18
- polyaxon/_flow/component/component.py +4 -3
- polyaxon/_flow/early_stopping/__init__.py +1 -1
- polyaxon/_flow/early_stopping/policies.py +12 -10
- polyaxon/_flow/environment/__init__.py +42 -24
- polyaxon/_flow/hooks/__init__.py +11 -11
- polyaxon/_flow/init/__init__.py +41 -25
- polyaxon/_flow/io/io.py +59 -47
- polyaxon/_flow/joins/__init__.py +5 -5
- polyaxon/_flow/matrix/bayes.py +23 -17
- polyaxon/_flow/matrix/grid_search.py +16 -7
- polyaxon/_flow/matrix/hyperband.py +10 -10
- polyaxon/_flow/matrix/hyperopt.py +14 -9
- polyaxon/_flow/matrix/iterative.py +14 -8
- polyaxon/_flow/matrix/mapping.py +4 -4
- polyaxon/_flow/matrix/params.py +138 -77
- polyaxon/_flow/matrix/random_search.py +10 -5
- polyaxon/_flow/matrix/tuner.py +4 -4
- polyaxon/_flow/mounts/artifacts_mounts.py +1 -1
- polyaxon/_flow/notifications/__init__.py +1 -1
- polyaxon/_flow/operations/base.py +10 -8
- polyaxon/_flow/operations/compiled_operation.py +5 -4
- polyaxon/_flow/operations/operation.py +30 -22
- polyaxon/_flow/optimization/__init__.py +2 -2
- polyaxon/_flow/params/params.py +11 -10
- polyaxon/_flow/plugins/__init__.py +19 -13
- polyaxon/_flow/run/dag.py +12 -9
- polyaxon/_flow/run/dask/dask.py +4 -4
- polyaxon/_flow/run/dask/replica.py +17 -11
- polyaxon/_flow/run/job.py +17 -11
- polyaxon/_flow/run/kubeflow/mpi_job.py +10 -5
- polyaxon/_flow/run/kubeflow/mx_job.py +25 -9
- polyaxon/_flow/run/kubeflow/paddle_job.py +16 -9
- polyaxon/_flow/run/kubeflow/pytorch_job.py +24 -17
- polyaxon/_flow/run/kubeflow/replica.py +17 -11
- polyaxon/_flow/run/kubeflow/scheduling_policy.py +7 -5
- polyaxon/_flow/run/kubeflow/tf_job.py +15 -8
- polyaxon/_flow/run/kubeflow/xgboost_job.py +9 -4
- polyaxon/_flow/run/ray/ray.py +9 -6
- polyaxon/_flow/run/ray/replica.py +25 -16
- polyaxon/_flow/run/resources.py +14 -13
- polyaxon/_flow/run/service.py +4 -4
- polyaxon/_flow/schedules/cron.py +4 -4
- polyaxon/_flow/schedules/interval.py +4 -4
- polyaxon/_flow/templates/__init__.py +3 -3
- polyaxon/_flow/termination/__init__.py +3 -3
- polyaxon/_fs/watcher.py +26 -27
- polyaxon/_k8s/k8s_validation.py +1 -1
- polyaxon/_local_process/converter/base/containers.py +4 -7
- polyaxon/_local_process/converter/base/env_vars.py +5 -5
- polyaxon/_local_process/process_types.py +15 -12
- polyaxon/_polyaxonfile/specs/compiled_operation.py +1 -1
- polyaxon/_polyaxonfile/specs/libs/validator.py +1 -1
- polyaxon/_polyaxonfile/specs/operation.py +1 -1
- polyaxon/_runner/agent/sync_agent.py +1 -1
- polyaxon/_runner/converter/converter.py +1 -1
- polyaxon/_schemas/agent.py +69 -37
- polyaxon/_schemas/authentication.py +4 -4
- polyaxon/_schemas/base.py +26 -2
- polyaxon/_schemas/checks.py +3 -3
- polyaxon/_schemas/cli.py +4 -6
- polyaxon/_schemas/client.py +20 -18
- polyaxon/_schemas/compatibility.py +4 -4
- polyaxon/_schemas/container_resources.py +1 -1
- polyaxon/_schemas/home.py +3 -3
- polyaxon/_schemas/installation.py +8 -8
- polyaxon/_schemas/lifecycle.py +21 -21
- polyaxon/_schemas/log_handler.py +2 -2
- polyaxon/_schemas/services.py +26 -14
- polyaxon/_schemas/types/artifacts.py +3 -3
- polyaxon/_schemas/types/dockerfile.py +14 -12
- polyaxon/_schemas/types/event.py +2 -2
- polyaxon/_schemas/types/file.py +3 -3
- polyaxon/_schemas/types/git.py +12 -4
- polyaxon/_schemas/types/tensorboard.py +14 -8
- polyaxon/_schemas/user.py +3 -3
- polyaxon/_schemas/version.py +2 -2
- polyaxon/_sdk/api/agents_v1_api.py +45 -45
- polyaxon/_sdk/api/artifacts_stores_v1_api.py +3 -3
- polyaxon/_sdk/api/auth_v1_api.py +13 -13
- polyaxon/_sdk/api/connections_v1_api.py +15 -15
- polyaxon/_sdk/api/dashboards_v1_api.py +15 -15
- polyaxon/_sdk/api/organizations_v1_api.py +77 -77
- polyaxon/_sdk/api/presets_v1_api.py +15 -15
- polyaxon/_sdk/api/project_dashboards_v1_api.py +17 -17
- polyaxon/_sdk/api/project_searches_v1_api.py +17 -17
- polyaxon/_sdk/api/projects_v1_api.py +65 -65
- polyaxon/_sdk/api/queues_v1_api.py +19 -19
- polyaxon/_sdk/api/runs_v1_api.py +127 -127
- polyaxon/_sdk/api/searches_v1_api.py +15 -15
- polyaxon/_sdk/api/service_accounts_v1_api.py +27 -27
- polyaxon/_sdk/api/tags_v1_api.py +17 -17
- polyaxon/_sdk/api/teams_v1_api.py +51 -51
- polyaxon/_sdk/api/users_v1_api.py +25 -25
- polyaxon/_sdk/api/versions_v1_api.py +7 -7
- polyaxon/_sdk/schemas/v1_activity.py +8 -8
- polyaxon/_sdk/schemas/v1_agent.py +17 -17
- polyaxon/_sdk/schemas/v1_agent_state_response.py +4 -4
- polyaxon/_sdk/schemas/v1_agent_state_response_agent_state.py +10 -10
- polyaxon/_sdk/schemas/v1_agent_status_body_request.py +3 -3
- polyaxon/_sdk/schemas/v1_analytics_spec.py +4 -4
- polyaxon/_sdk/schemas/v1_artifact_tree.py +3 -3
- polyaxon/_sdk/schemas/v1_auth.py +1 -1
- polyaxon/_sdk/schemas/v1_cloning.py +3 -3
- polyaxon/_sdk/schemas/v1_connection_response.py +9 -9
- polyaxon/_sdk/schemas/v1_dashboard.py +9 -9
- polyaxon/_sdk/schemas/v1_dashboard_spec.py +5 -5
- polyaxon/_sdk/schemas/v1_entities_tags.py +2 -2
- polyaxon/_sdk/schemas/v1_entities_transfer.py +2 -2
- polyaxon/_sdk/schemas/v1_entity_notification_body.py +7 -7
- polyaxon/_sdk/schemas/v1_entity_stage_body_request.py +5 -5
- polyaxon/_sdk/schemas/v1_entity_status_body_request.py +5 -5
- polyaxon/_sdk/schemas/v1_events_response.py +2 -2
- polyaxon/_sdk/schemas/v1_list_activities_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_agents_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_bookmarks_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_connections_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_dashboards_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_organization_members_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_organizations_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_presets_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_project_versions_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_projects_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_queues_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_artifacts_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_connections_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_edges_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_runs_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_searches_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_service_accounts_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_tags_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_team_members_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_teams_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_token_response.py +4 -4
- polyaxon/_sdk/schemas/v1_operation_body.py +8 -8
- polyaxon/_sdk/schemas/v1_organization.py +16 -16
- polyaxon/_sdk/schemas/v1_organization_member.py +6 -6
- polyaxon/_sdk/schemas/v1_password_change.py +3 -3
- polyaxon/_sdk/schemas/v1_pipeline.py +3 -3
- polyaxon/_sdk/schemas/v1_preset.py +11 -11
- polyaxon/_sdk/schemas/v1_project.py +17 -17
- polyaxon/_sdk/schemas/v1_project_settings.py +11 -11
- polyaxon/_sdk/schemas/v1_project_version.py +20 -20
- polyaxon/_sdk/schemas/v1_queue.py +12 -12
- polyaxon/_sdk/schemas/v1_run.py +38 -38
- polyaxon/_sdk/schemas/v1_run_connection.py +3 -3
- polyaxon/_sdk/schemas/v1_run_edge.py +5 -5
- polyaxon/_sdk/schemas/v1_run_edge_lineage.py +3 -3
- polyaxon/_sdk/schemas/v1_run_edges_graph.py +1 -1
- polyaxon/_sdk/schemas/v1_run_reference_catalog.py +4 -4
- polyaxon/_sdk/schemas/v1_run_settings.py +9 -9
- polyaxon/_sdk/schemas/v1_search.py +10 -10
- polyaxon/_sdk/schemas/v1_search_spec.py +14 -14
- polyaxon/_sdk/schemas/v1_section_spec.py +12 -12
- polyaxon/_sdk/schemas/v1_service_account.py +9 -9
- polyaxon/_sdk/schemas/v1_settings_catalog.py +4 -4
- polyaxon/_sdk/schemas/v1_tag.py +6 -6
- polyaxon/_sdk/schemas/v1_team.py +11 -11
- polyaxon/_sdk/schemas/v1_team_member.py +6 -6
- polyaxon/_sdk/schemas/v1_team_settings.py +2 -2
- polyaxon/_sdk/schemas/v1_token.py +10 -10
- polyaxon/_sdk/schemas/v1_trial_start.py +6 -6
- polyaxon/_sdk/schemas/v1_user.py +6 -6
- polyaxon/_sdk/schemas/v1_user_access.py +7 -7
- polyaxon/_sdk/schemas/v1_user_email.py +1 -1
- polyaxon/_sdk/schemas/v1_user_singup.py +5 -5
- polyaxon/_sdk/schemas/v1_uuids.py +1 -1
- polyaxon/_utils/test_utils.py +2 -1
- polyaxon/pkg.py +1 -1
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/METADATA +10 -10
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/RECORD +201 -201
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/LICENSE +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/WHEEL +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/entry_points.txt +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/top_level.txt +0 -0
polyaxon/_schemas/agent.py
CHANGED
@@ -2,7 +2,13 @@ import os
|
|
2
2
|
|
3
3
|
from typing import Dict, List, Optional
|
4
4
|
|
5
|
-
from clipped.compact.pydantic import
|
5
|
+
from clipped.compact.pydantic import (
|
6
|
+
Field,
|
7
|
+
StrictStr,
|
8
|
+
field_validator,
|
9
|
+
model_validator,
|
10
|
+
validation_before,
|
11
|
+
)
|
6
12
|
from clipped.config.schema import skip_partial, to_partial
|
7
13
|
from vents.connections import ConnectionCatalog
|
8
14
|
|
@@ -70,16 +76,18 @@ def validate_agent_config(
|
|
70
76
|
class BaseAgentConfig(ConnectionCatalog, BaseSchemaModel):
|
71
77
|
_REQUIRED_ARTIFACTS_STORE = True
|
72
78
|
|
73
|
-
connections: Optional[List[V1Connection]] = Field(
|
79
|
+
connections: Optional[List[V1Connection]] = Field(
|
80
|
+
default=None, alias=ENV_KEYS_AGENT_CONNECTIONS
|
81
|
+
)
|
74
82
|
artifacts_store: Optional[V1Connection] = Field(
|
75
|
-
alias=ENV_KEYS_AGENT_ARTIFACTS_STORE
|
83
|
+
default=None, alias=ENV_KEYS_AGENT_ARTIFACTS_STORE
|
76
84
|
)
|
77
|
-
namespace: Optional[StrictStr] = Field(alias=ENV_KEYS_K8S_NAMESPACE)
|
85
|
+
namespace: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_K8S_NAMESPACE)
|
78
86
|
|
79
87
|
class Config:
|
80
|
-
extra =
|
88
|
+
extra = "ignore"
|
81
89
|
|
82
|
-
@
|
90
|
+
@model_validator(**validation_before)
|
83
91
|
def handle_camel_case_artifacts_store(cls, values):
|
84
92
|
if (
|
85
93
|
not values.get("artifacts_store")
|
@@ -89,7 +97,7 @@ class BaseAgentConfig(ConnectionCatalog, BaseSchemaModel):
|
|
89
97
|
values[ENV_KEYS_AGENT_ARTIFACTS_STORE] = values["artifactsStore"]
|
90
98
|
return values
|
91
99
|
|
92
|
-
@
|
100
|
+
@field_validator("connections", **validation_before)
|
93
101
|
def validate_json_list(cls, v):
|
94
102
|
if not isinstance(v, str):
|
95
103
|
return v
|
@@ -103,7 +111,7 @@ class BaseAgentConfig(ConnectionCatalog, BaseSchemaModel):
|
|
103
111
|
except PolyaxonSchemaError as e:
|
104
112
|
raise ValueError("Received an invalid connections") from e
|
105
113
|
|
106
|
-
@
|
114
|
+
@field_validator("artifacts_store", **validation_before)
|
107
115
|
def validate_store_json(cls, v):
|
108
116
|
if not isinstance(v, str):
|
109
117
|
return v
|
@@ -118,9 +126,10 @@ class BaseAgentConfig(ConnectionCatalog, BaseSchemaModel):
|
|
118
126
|
"Received an invalid artifacts store `{}`".format(v)
|
119
127
|
) from e
|
120
128
|
|
121
|
-
@
|
129
|
+
@field_validator("artifacts_store")
|
122
130
|
@skip_partial
|
123
131
|
def validate_agent_config(cls, artifacts_store, values):
|
132
|
+
values = cls.get_data_from_values(values)
|
124
133
|
try:
|
125
134
|
validate_agent_config(
|
126
135
|
artifacts_store,
|
@@ -186,38 +195,59 @@ class BaseAgentConfig(ConnectionCatalog, BaseSchemaModel):
|
|
186
195
|
|
187
196
|
class AgentConfig(BaseAgentConfig):
|
188
197
|
_IDENTIFIER = "agent"
|
198
|
+
_CUSTOM_DUMP_FIELDS = {
|
199
|
+
"sidecar",
|
200
|
+
"init",
|
201
|
+
"notifier",
|
202
|
+
"cleaner",
|
203
|
+
"default_scheduling",
|
204
|
+
}
|
189
205
|
|
190
|
-
is_replica: Optional[bool] = Field(alias=ENV_KEYS_AGENT_IS_REPLICA)
|
191
|
-
watch_cluster: Optional[bool] = Field(alias=ENV_KEYS_WATCH_CLUSTER)
|
192
|
-
single_namespace: Optional[bool] = Field(
|
206
|
+
is_replica: Optional[bool] = Field(default=None, alias=ENV_KEYS_AGENT_IS_REPLICA)
|
207
|
+
watch_cluster: Optional[bool] = Field(default=None, alias=ENV_KEYS_WATCH_CLUSTER)
|
208
|
+
single_namespace: Optional[bool] = Field(
|
209
|
+
default=None, alias=ENV_KEYS_SINGLE_NAMESPACE
|
210
|
+
)
|
193
211
|
additional_namespaces: Optional[List[StrictStr]] = Field(
|
194
|
-
alias=ENV_KEYS_ADDITIONAL_NAMESPACES
|
212
|
+
default=None, alias=ENV_KEYS_ADDITIONAL_NAMESPACES
|
213
|
+
)
|
214
|
+
sidecar: Optional[V1PolyaxonSidecarContainer] = Field(
|
215
|
+
default=None, alias=ENV_KEYS_AGENT_SIDECAR
|
216
|
+
)
|
217
|
+
init: Optional[V1PolyaxonInitContainer] = Field(
|
218
|
+
default=None, alias=ENV_KEYS_AGENT_INIT
|
219
|
+
)
|
220
|
+
notifier: Optional[V1PolyaxonNotifier] = Field(
|
221
|
+
default=None, alias=ENV_KEYS_AGENT_NOTIFIER
|
222
|
+
)
|
223
|
+
cleaner: Optional[V1PolyaxonCleaner] = Field(
|
224
|
+
default=None, alias=ENV_KEYS_AGENT_CLEANER
|
195
225
|
)
|
196
|
-
sidecar: Optional[V1PolyaxonSidecarContainer] = Field(alias=ENV_KEYS_AGENT_SIDECAR)
|
197
|
-
init: Optional[V1PolyaxonInitContainer] = Field(alias=ENV_KEYS_AGENT_INIT)
|
198
|
-
notifier: Optional[V1PolyaxonNotifier] = Field(alias=ENV_KEYS_AGENT_NOTIFIER)
|
199
|
-
cleaner: Optional[V1PolyaxonCleaner] = Field(alias=ENV_KEYS_AGENT_CLEANER)
|
200
226
|
use_proxy_env_vars_use_in_ops: Optional[bool] = Field(
|
201
|
-
alias=ENV_KEYS_AGENT_USE_PROXY_ENV_VARS_IN_OPS
|
227
|
+
default=None, alias=ENV_KEYS_AGENT_USE_PROXY_ENV_VARS_IN_OPS
|
202
228
|
)
|
203
229
|
default_scheduling: Optional[V1DefaultScheduling] = Field(
|
204
|
-
alias=ENV_KEYS_AGENT_DEFAULT_SCHEDULING
|
230
|
+
default=None, alias=ENV_KEYS_AGENT_DEFAULT_SCHEDULING
|
205
231
|
)
|
206
232
|
default_image_pull_secrets: Optional[List[StrictStr]] = Field(
|
207
|
-
alias=ENV_KEYS_AGENT_DEFAULT_IMAGE_PULL_SECRETS
|
233
|
+
default=None, alias=ENV_KEYS_AGENT_DEFAULT_IMAGE_PULL_SECRETS
|
234
|
+
)
|
235
|
+
app_secret_name: Optional[StrictStr] = Field(
|
236
|
+
default=None, alias=ENV_KEYS_K8S_APP_SECRET_NAME
|
208
237
|
)
|
209
|
-
|
210
|
-
|
211
|
-
|
238
|
+
agent_secret_name: Optional[StrictStr] = Field(
|
239
|
+
default=None, alias=ENV_KEYS_AGENT_SECRET_NAME
|
240
|
+
)
|
241
|
+
runs_sa: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_AGENT_RUNS_SA)
|
212
242
|
enable_health_checks: Optional[bool] = Field(
|
213
|
-
alias=ENV_KEYS_AGENT_ENABLE_HEALTH_CHECKS
|
243
|
+
default=None, alias=ENV_KEYS_AGENT_ENABLE_HEALTH_CHECKS
|
214
244
|
)
|
215
245
|
# This refresh logic will mitigate several issues with AKS's numerous networking problems
|
216
246
|
executor_refresh_interval: Optional[int] = Field(
|
217
|
-
alias=ENV_KEYS_AGENT_EXECUTOR_REFRESH_INTERVAL
|
247
|
+
default=None, alias=ENV_KEYS_AGENT_EXECUTOR_REFRESH_INTERVAL
|
218
248
|
)
|
219
249
|
|
220
|
-
@
|
250
|
+
@model_validator(**validation_before)
|
221
251
|
def handle_camel_case_agent(cls, values):
|
222
252
|
if (
|
223
253
|
not values.get("is_replica")
|
@@ -307,6 +337,8 @@ class AgentConfig(BaseAgentConfig):
|
|
307
337
|
):
|
308
338
|
if not default_scheduling and default_image_pull_secrets:
|
309
339
|
default_scheduling = V1DefaultScheduling()
|
340
|
+
if default_scheduling and isinstance(default_scheduling, dict):
|
341
|
+
default_scheduling = V1DefaultScheduling.from_dict(default_scheduling)
|
310
342
|
if default_scheduling and not default_scheduling.image_pull_secrets:
|
311
343
|
default_scheduling.image_pull_secrets = default_image_pull_secrets
|
312
344
|
super().__init__(
|
@@ -315,42 +347,42 @@ class AgentConfig(BaseAgentConfig):
|
|
315
347
|
**data,
|
316
348
|
)
|
317
349
|
|
318
|
-
@
|
350
|
+
@field_validator(
|
319
351
|
"artifacts_store",
|
320
352
|
"sidecar",
|
321
353
|
"init",
|
322
354
|
"cleaner",
|
323
355
|
"notifier",
|
324
356
|
"default_scheduling",
|
325
|
-
|
357
|
+
**validation_before,
|
326
358
|
)
|
327
359
|
def validate_json(cls, v, field):
|
328
360
|
if not isinstance(v, str):
|
329
361
|
return v
|
362
|
+
key = cls.get_alias_for_field(field)
|
330
363
|
try:
|
331
364
|
return ConfigParser.parse(Dict)(
|
332
|
-
key=
|
365
|
+
key=key,
|
333
366
|
value=v,
|
334
367
|
is_optional=True,
|
335
368
|
)
|
336
369
|
except PolyaxonSchemaError as e:
|
337
|
-
raise ValueError(
|
338
|
-
"Received an invalid {} `{}`".format(field.alias, v)
|
339
|
-
) from e
|
370
|
+
raise ValueError("Received an invalid {} `{}`".format(key, v)) from e
|
340
371
|
|
341
|
-
@
|
372
|
+
@field_validator(
|
373
|
+
"additional_namespaces", "default_image_pull_secrets", **validation_before
|
374
|
+
)
|
342
375
|
def validate_str_list(cls, v, field):
|
376
|
+
key = cls.get_alias_for_field(field)
|
343
377
|
try:
|
344
378
|
return ConfigParser.parse(str)(
|
345
|
-
key=
|
379
|
+
key=key,
|
346
380
|
value=v,
|
347
381
|
is_optional=True,
|
348
382
|
is_list=True,
|
349
383
|
)
|
350
384
|
except PolyaxonSchemaError as e:
|
351
|
-
raise ValueError(
|
352
|
-
"Received an invalid {} `{}`".format(field.alias, v)
|
353
|
-
) from e
|
385
|
+
raise ValueError("Received an invalid {} `{}`".format(key, v)) from e
|
354
386
|
|
355
387
|
def get_executor_refresh_interval(self) -> int:
|
356
388
|
return self.executor_refresh_interval or 60 * 5
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Optional
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import
|
3
|
+
from clipped.compact.pydantic import Field, StrictStr
|
4
4
|
|
5
5
|
from polyaxon._env_vars.keys import ENV_KEYS_AUTH_TOKEN, ENV_KEYS_AUTH_USERNAME
|
6
6
|
from polyaxon._schemas.base import BaseSchemaModel
|
@@ -18,11 +18,11 @@ class AccessTokenConfig(BaseSchemaModel):
|
|
18
18
|
|
19
19
|
_IDENTIFIER = "token"
|
20
20
|
|
21
|
-
username: Optional[StrictStr] = Field(alias=ENV_KEYS_AUTH_USERNAME)
|
22
|
-
token: Optional[StrictStr] = Field(alias=ENV_KEYS_AUTH_TOKEN)
|
21
|
+
username: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_AUTH_USERNAME)
|
22
|
+
token: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_AUTH_TOKEN)
|
23
23
|
|
24
24
|
class Config:
|
25
|
-
extra =
|
25
|
+
extra = "ignore"
|
26
26
|
|
27
27
|
|
28
28
|
class V1Credentials(BaseSchemaModel):
|
polyaxon/_schemas/base.py
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
from clipped.compact.pydantic import PYDANTIC_VERSION
|
1
2
|
from clipped.config.schema import BaseSchemaModel as _BaseSchemaModel
|
3
|
+
from clipped.config.schema import RootModel as _RootModel
|
2
4
|
|
3
5
|
from polyaxon import pkg
|
4
6
|
from polyaxon._config.spec import ConfigSpec
|
@@ -11,5 +13,27 @@ class BaseSchemaModel(_BaseSchemaModel):
|
|
11
13
|
_CONFIG_SPEC = ConfigSpec
|
12
14
|
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
class RootModel(_RootModel):
|
17
|
+
_VERSION = pkg.SCHEMA_VERSION
|
18
|
+
_SCHEMA_EXCEPTION = PolyaxonSchemaError
|
19
|
+
_CONFIG_SPEC = ConfigSpec
|
20
|
+
|
21
|
+
@property
|
22
|
+
def _root(self):
|
23
|
+
return self.__root__ if hasattr(self, "__root__") else self.root
|
24
|
+
|
25
|
+
def set_root(self, value):
|
26
|
+
if hasattr(self, "__root__"):
|
27
|
+
self.__root__ = value
|
28
|
+
else:
|
29
|
+
self.root = value
|
30
|
+
return self
|
31
|
+
|
32
|
+
def get_root(self):
|
33
|
+
return self._root
|
34
|
+
|
35
|
+
@classmethod
|
36
|
+
def make(cls, value):
|
37
|
+
if PYDANTIC_VERSION.startswith("2."):
|
38
|
+
return cls(root=value)
|
39
|
+
return cls(__root__=value)
|
polyaxon/_schemas/checks.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import os
|
2
2
|
|
3
3
|
from datetime import datetime, timedelta
|
4
|
-
from typing import Optional
|
4
|
+
from typing import ClassVar, Optional
|
5
5
|
|
6
6
|
from clipped.utils.tz import now
|
7
7
|
|
@@ -11,9 +11,9 @@ from polyaxon._schemas.base import BaseSchemaModel
|
|
11
11
|
|
12
12
|
class ChecksConfig(BaseSchemaModel):
|
13
13
|
_IDENTIFIER = "checks"
|
14
|
-
_INTERVAL = 30 * 60
|
14
|
+
_INTERVAL: ClassVar[int] = 30 * 60
|
15
15
|
|
16
|
-
last_check: Optional[datetime]
|
16
|
+
last_check: Optional[datetime] = None
|
17
17
|
|
18
18
|
def __init__(
|
19
19
|
self,
|
polyaxon/_schemas/cli.py
CHANGED
@@ -11,13 +11,11 @@ from polyaxon._schemas.log_handler import V1LogHandler
|
|
11
11
|
|
12
12
|
class CliConfig(ChecksConfig):
|
13
13
|
_IDENTIFIER = "cli"
|
14
|
-
_DIST = "dist"
|
15
|
-
_INTERVAL = 30 * 60
|
16
14
|
|
17
|
-
current_version: Optional[StrictStr]
|
18
|
-
installation: Optional[V1Installation]
|
19
|
-
compatibility: Optional[V1Compatibility]
|
20
|
-
log_handler: Optional[V1LogHandler]
|
15
|
+
current_version: Optional[StrictStr] = None
|
16
|
+
installation: Optional[V1Installation] = None
|
17
|
+
compatibility: Optional[V1Compatibility] = None
|
18
|
+
log_handler: Optional[V1LogHandler] = None
|
21
19
|
|
22
20
|
@property
|
23
21
|
def min_version(self) -> Optional[str]:
|
polyaxon/_schemas/client.py
CHANGED
@@ -4,7 +4,7 @@ from typing import Dict, Optional, Union
|
|
4
4
|
|
5
5
|
import urllib3
|
6
6
|
|
7
|
-
from clipped.compact.pydantic import
|
7
|
+
from clipped.compact.pydantic import Field, StrictStr
|
8
8
|
from clipped.utils.http import clean_host
|
9
9
|
|
10
10
|
from polyaxon._contexts import paths as ctx_paths
|
@@ -55,10 +55,10 @@ class ClientConfig(BaseSchemaModel):
|
|
55
55
|
_PAGE_SIZE = 20
|
56
56
|
_BASE_URL = "{}/api/{}"
|
57
57
|
|
58
|
-
host: Optional[StrictStr] = Field(alias=ENV_KEYS_HOST)
|
58
|
+
host: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_HOST)
|
59
59
|
version: Optional[StrictStr] = Field(default="v1", alias=ENV_KEYS_API_VERSION)
|
60
60
|
debug: Optional[bool] = Field(default=False, alias=ENV_KEYS_DEBUG)
|
61
|
-
log_level: Optional[StrictStr] = Field(alias=ENV_KEYS_LOG_LEVEL)
|
61
|
+
log_level: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_LOG_LEVEL)
|
62
62
|
authentication_type: Optional[StrictStr] = Field(
|
63
63
|
default=AuthenticationTypes.TOKEN, alias=ENV_KEYS_AUTHENTICATION_TYPE
|
64
64
|
)
|
@@ -70,40 +70,42 @@ class ClientConfig(BaseSchemaModel):
|
|
70
70
|
tracking_timeout: Optional[float] = Field(
|
71
71
|
default=1, alias=ENV_KEYS_TRACKING_TIMEOUT
|
72
72
|
)
|
73
|
-
timezone: Optional[StrictStr] = Field(alias=ENV_KEYS_TIME_ZONE)
|
73
|
+
timezone: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_TIME_ZONE)
|
74
74
|
watch_interval: Optional[int] = Field(default=5, alias=ENV_KEYS_WATCH_INTERVAL)
|
75
75
|
interval: Optional[float] = Field(default=5, alias=ENV_KEYS_INTERVAL)
|
76
|
-
verify_ssl: Optional[bool] = Field(alias=ENV_KEYS_VERIFY_SSL)
|
77
|
-
ssl_ca_cert: Optional[StrictStr] = Field(alias=ENV_KEYS_SSL_CA_CERT)
|
78
|
-
cert_file: Optional[StrictStr] = Field(alias=ENV_KEYS_CERT_FILE)
|
79
|
-
key_file: Optional[StrictStr] = Field(alias=ENV_KEYS_KEY_FILE)
|
80
|
-
assert_hostname: Optional[bool] = Field(
|
76
|
+
verify_ssl: Optional[bool] = Field(default=None, alias=ENV_KEYS_VERIFY_SSL)
|
77
|
+
ssl_ca_cert: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_SSL_CA_CERT)
|
78
|
+
cert_file: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_CERT_FILE)
|
79
|
+
key_file: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_KEY_FILE)
|
80
|
+
assert_hostname: Optional[bool] = Field(
|
81
|
+
default=None, alias=ENV_KEYS_ASSERT_HOSTNAME
|
82
|
+
)
|
81
83
|
connection_pool_maxsize: Optional[int] = Field(
|
82
|
-
alias=ENV_KEYS_CONNECTION_POOL_MAXSIZE
|
84
|
+
default=None, alias=ENV_KEYS_CONNECTION_POOL_MAXSIZE
|
83
85
|
)
|
84
86
|
archives_root: Optional[StrictStr] = Field(
|
85
87
|
default=ctx_paths.CONTEXT_ARCHIVES_ROOT, alias=ENV_KEYS_ARCHIVES_ROOT
|
86
88
|
)
|
87
89
|
header: Optional[Union[StrictStr, PolyaxonServiceHeaders]] = Field(
|
88
|
-
alias=ENV_KEYS_HEADER
|
90
|
+
default=None, alias=ENV_KEYS_HEADER
|
89
91
|
)
|
90
92
|
header_service: Optional[Union[StrictStr, PolyaxonServices]] = Field(
|
91
|
-
alias=ENV_KEYS_HEADER_SERVICE
|
93
|
+
default=None, alias=ENV_KEYS_HEADER_SERVICE
|
92
94
|
)
|
93
|
-
namespace: Optional[StrictStr] = Field(alias=ENV_KEYS_K8S_NAMESPACE)
|
95
|
+
namespace: Optional[StrictStr] = Field(default=None, alias=ENV_KEYS_K8S_NAMESPACE)
|
94
96
|
no_api: Optional[bool] = Field(default=False, alias=ENV_KEYS_NO_API)
|
95
97
|
disable_errors_reporting: Optional[bool] = Field(
|
96
98
|
default=False, alias=ENV_KEYS_DISABLE_ERRORS_REPORTING
|
97
99
|
)
|
98
100
|
compatibility_check_interval: Optional[int] = Field(
|
99
|
-
alias=ENV_KEYS_INTERVALS_COMPATIBILITY_CHECK
|
101
|
+
default=None, alias=ENV_KEYS_INTERVALS_COMPATIBILITY_CHECK
|
100
102
|
)
|
101
|
-
retries: Optional[int] = Field(alias=ENV_KEYS_RETRIES)
|
102
|
-
token: Optional[StrictStr]
|
103
|
-
client_header: Optional[Dict]
|
103
|
+
retries: Optional[int] = Field(default=None, alias=ENV_KEYS_RETRIES)
|
104
|
+
token: Optional[StrictStr] = None
|
105
|
+
client_header: Optional[Dict] = None
|
104
106
|
|
105
107
|
class Config:
|
106
|
-
extra =
|
108
|
+
extra = "ignore"
|
107
109
|
|
108
110
|
def __init__(
|
109
111
|
self,
|
@@ -5,7 +5,7 @@ from polyaxon._schemas.version import V1Version
|
|
5
5
|
|
6
6
|
|
7
7
|
class V1Compatibility(BaseSchemaModel):
|
8
|
-
cli: Optional[V1Version]
|
9
|
-
platform: Optional[V1Version]
|
10
|
-
agent: Optional[V1Version]
|
11
|
-
ui: Optional[V1Version]
|
8
|
+
cli: Optional[V1Version] = None
|
9
|
+
platform: Optional[V1Version] = None
|
10
|
+
agent: Optional[V1Version] = None
|
11
|
+
ui: Optional[V1Version] = None
|
@@ -25,7 +25,7 @@ class ContainerGPUResourcesConfig(BaseSchemaModel):
|
|
25
25
|
memory_used: StrictIntOrFloat
|
26
26
|
memory_total: StrictIntOrFloat
|
27
27
|
memory_utilization: StrictIntOrFloat
|
28
|
-
processes: Optional[List[Dict]]
|
28
|
+
processes: Optional[List[Dict]] = None
|
29
29
|
|
30
30
|
|
31
31
|
class ContainerResourcesConfig(BaseSchemaModel):
|
polyaxon/_schemas/home.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Optional
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import
|
3
|
+
from clipped.compact.pydantic import Field, StrictStr
|
4
4
|
|
5
5
|
from polyaxon._env_vars.keys import ENV_KEYS_HOME
|
6
6
|
from polyaxon._schemas.base import BaseSchemaModel
|
@@ -17,7 +17,7 @@ class HomeConfig(BaseSchemaModel):
|
|
17
17
|
|
18
18
|
_IDENTIFIER = "home"
|
19
19
|
|
20
|
-
path: Optional[StrictStr] = Field(alias=ENV_KEYS_HOME)
|
20
|
+
path: Optional[StrictStr] = Field(alias=ENV_KEYS_HOME, default=None)
|
21
21
|
|
22
22
|
class Config:
|
23
|
-
extra =
|
23
|
+
extra = "ignore"
|
@@ -5,15 +5,15 @@ from clipped.config.schema import BaseAllowSchemaModel
|
|
5
5
|
|
6
6
|
|
7
7
|
class V1Installation(BaseAllowSchemaModel):
|
8
|
-
key: Optional[StrictStr]
|
9
|
-
version: Optional[StrictStr]
|
10
|
-
dist: Optional[StrictStr]
|
11
|
-
host: Optional[StrictStr]
|
12
|
-
hmac: Optional[StrictStr]
|
13
|
-
mode: Optional[StrictStr]
|
14
|
-
org: Optional[bool]
|
8
|
+
key: Optional[StrictStr] = None
|
9
|
+
version: Optional[StrictStr] = None
|
10
|
+
dist: Optional[StrictStr] = None
|
11
|
+
host: Optional[StrictStr] = None
|
12
|
+
hmac: Optional[StrictStr] = None
|
13
|
+
mode: Optional[StrictStr] = None
|
14
|
+
org: Optional[bool] = None
|
15
|
+
auth: Optional[List[StrictStr]] = None
|
15
16
|
single_url: Optional[bool] = Field(alias="singleUrl", default=None)
|
16
17
|
default_streams_url: Optional[StrictStr] = Field(
|
17
18
|
alias="defaultStreamsUrl", default=None
|
18
19
|
)
|
19
|
-
auth: Optional[List[StrictStr]]
|
polyaxon/_schemas/lifecycle.py
CHANGED
@@ -332,36 +332,36 @@ class BaseCondition(BaseAllowSchemaModel):
|
|
332
332
|
|
333
333
|
|
334
334
|
class V1StatusCondition(BaseCondition):
|
335
|
-
type: Optional[V1Statuses]
|
336
|
-
status: Optional[Union[bool, str]]
|
337
|
-
reason: Optional[StrictStr]
|
338
|
-
message: Optional[StrictStr]
|
339
|
-
last_update_time: Optional[datetime.datetime]
|
340
|
-
last_transition_time: Optional[datetime.datetime]
|
341
|
-
meta_info: Optional[Dict[str, Any]]
|
335
|
+
type: Optional[V1Statuses] = None
|
336
|
+
status: Optional[Union[bool, str]] = None
|
337
|
+
reason: Optional[StrictStr] = None
|
338
|
+
message: Optional[StrictStr] = None
|
339
|
+
last_update_time: Optional[datetime.datetime] = None
|
340
|
+
last_transition_time: Optional[datetime.datetime] = None
|
341
|
+
meta_info: Optional[Dict[str, Any]] = None
|
342
342
|
|
343
343
|
|
344
344
|
class V1Status(BaseSchemaModel):
|
345
|
-
uuid: Optional[StrictStr]
|
346
|
-
status: Optional[V1Statuses]
|
347
|
-
status_conditions: Optional[List[V1StatusCondition]]
|
348
|
-
meta_info: Optional[Dict[str, Any]]
|
345
|
+
uuid: Optional[StrictStr] = None
|
346
|
+
status: Optional[V1Statuses] = None
|
347
|
+
status_conditions: Optional[List[V1StatusCondition]] = None
|
348
|
+
meta_info: Optional[Dict[str, Any]] = None
|
349
349
|
|
350
350
|
|
351
351
|
class V1StageCondition(BaseCondition):
|
352
|
-
type: Optional[V1Stages]
|
353
|
-
status: Optional[Union[bool, str]]
|
354
|
-
reason: Optional[StrictStr]
|
355
|
-
message: Optional[StrictStr]
|
356
|
-
last_update_time: Optional[datetime.datetime]
|
357
|
-
last_transition_time: Optional[datetime.datetime]
|
358
|
-
meta_info: Optional[Dict[str, Any]]
|
352
|
+
type: Optional[V1Stages] = None
|
353
|
+
status: Optional[Union[bool, str]] = None
|
354
|
+
reason: Optional[StrictStr] = None
|
355
|
+
message: Optional[StrictStr] = None
|
356
|
+
last_update_time: Optional[datetime.datetime] = None
|
357
|
+
last_transition_time: Optional[datetime.datetime] = None
|
358
|
+
meta_info: Optional[Dict[str, Any]] = None
|
359
359
|
|
360
360
|
|
361
361
|
class V1Stage(BaseSchemaModel):
|
362
|
-
uuid: Optional[StrictStr]
|
363
|
-
stage: Optional[V1Stages]
|
364
|
-
stage_conditions: Optional[List[V1StageCondition]]
|
362
|
+
uuid: Optional[StrictStr] = None
|
363
|
+
stage: Optional[V1Stages] = None
|
364
|
+
stage_conditions: Optional[List[V1StageCondition]] = None
|
365
365
|
|
366
366
|
|
367
367
|
class V1ProjectVersionKind(str, PEnum):
|
polyaxon/_schemas/log_handler.py
CHANGED
@@ -9,8 +9,8 @@ from clipped.config.schema import BaseAllowSchemaModel
|
|
9
9
|
class V1LogHandler(BaseAllowSchemaModel):
|
10
10
|
_IDENTIFIER = "log_handler"
|
11
11
|
|
12
|
-
dsn: Optional[StrictStr]
|
13
|
-
environment: Optional[StrictStr]
|
12
|
+
dsn: Optional[StrictStr] = None
|
13
|
+
environment: Optional[StrictStr] = None
|
14
14
|
|
15
15
|
@property
|
16
16
|
def decoded_dsn(self):
|
polyaxon/_schemas/services.py
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import
|
3
|
+
from clipped.compact.pydantic import (
|
4
|
+
Field,
|
5
|
+
StrictStr,
|
6
|
+
field_validator,
|
7
|
+
validation_always,
|
8
|
+
validation_before,
|
9
|
+
)
|
4
10
|
|
5
11
|
from polyaxon._containers.pull_policy import PullPolicy
|
6
12
|
from polyaxon._k8s import k8s_schemas, k8s_validation
|
@@ -14,25 +20,31 @@ class BaseServiceConfig(BaseSchemaModel):
|
|
14
20
|
"tolerations",
|
15
21
|
}
|
16
22
|
|
17
|
-
image: Optional[StrictStr]
|
18
|
-
image_tag: Optional[StrictStr] = Field(alias="imageTag")
|
19
|
-
image_pull_policy: Optional[PullPolicy] = Field(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
image: Optional[StrictStr] = None
|
24
|
+
image_tag: Optional[StrictStr] = Field(default=None, alias="imageTag")
|
25
|
+
image_pull_policy: Optional[PullPolicy] = Field(
|
26
|
+
default=None, alias="imagePullPolicy"
|
27
|
+
)
|
28
|
+
resources: Optional[Union[k8s_schemas.V1ResourceRequirements, Dict]] = None
|
29
|
+
node_selector: Optional[Dict[StrictStr, StrictStr]] = Field(
|
30
|
+
default=None, alias="nodeSelector"
|
31
|
+
)
|
32
|
+
affinity: Optional[Union[k8s_schemas.V1Affinity, Dict]] = None
|
33
|
+
tolerations: Optional[List[Union[k8s_schemas.V1Toleration, Dict]]] = None
|
34
|
+
image_pull_secrets: Optional[List[StrictStr]] = Field(
|
35
|
+
default=None, alias="imagePullSecrets"
|
36
|
+
)
|
37
|
+
hpa: Optional[Dict] = None
|
38
|
+
|
39
|
+
@field_validator("resources", **validation_always, **validation_before)
|
28
40
|
def validate_resources(cls, v):
|
29
41
|
return k8s_validation.validate_k8s_resource_requirements(v)
|
30
42
|
|
31
|
-
@
|
43
|
+
@field_validator("affinity", **validation_always, **validation_before)
|
32
44
|
def validate_affinity(cls, v):
|
33
45
|
return k8s_validation.validate_k8s_affinity(v)
|
34
46
|
|
35
|
-
@
|
47
|
+
@field_validator("tolerations", **validation_always, **validation_before)
|
36
48
|
def validate_tolerations(cls, v):
|
37
49
|
if not v:
|
38
50
|
return v
|
@@ -154,6 +154,6 @@ class V1ArtifactsType(BaseTypeConfig):
|
|
154
154
|
|
155
155
|
_IDENTIFIER = "artifacts"
|
156
156
|
|
157
|
-
files: Optional[Union[List[Union[str, List[str]]], RefField]]
|
158
|
-
dirs: Optional[Union[List[Union[str, List[str]]], RefField]]
|
159
|
-
workers: Optional[Union[StrictInt, RefField]]
|
157
|
+
files: Optional[Union[List[Union[str, List[str]]], RefField]] = None
|
158
|
+
dirs: Optional[Union[List[Union[str, List[str]]], RefField]] = None
|
159
|
+
workers: Optional[Union[StrictInt, RefField]] = None
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import Field, StrictStr,
|
3
|
+
from clipped.compact.pydantic import Field, StrictStr, field_validator
|
4
4
|
from clipped.config.schema import skip_partial
|
5
5
|
from clipped.types.docker_image import validate_image
|
6
6
|
from clipped.types.ref_or_obj import RefField
|
@@ -179,31 +179,33 @@ class V1DockerfileType(BaseTypeConfig):
|
|
179
179
|
_IDENTIFIER = "dockerfile"
|
180
180
|
|
181
181
|
image: StrictStr
|
182
|
-
env: Optional[
|
183
|
-
|
182
|
+
env: Optional[
|
183
|
+
Union[Dict[str, Any], List[Union[Tuple[str, str], List[str]]], RefField]
|
184
|
+
] = None
|
185
|
+
path: Optional[Union[List[StrictStr], RefField]] = None
|
184
186
|
copy_: Optional[
|
185
187
|
Union[
|
186
188
|
List[Union[StrictStr, List[StrictStr], Tuple[StrictStr, StrictStr]]],
|
187
189
|
RefField,
|
188
190
|
]
|
189
|
-
] = Field(alias="copy")
|
191
|
+
] = Field(alias="copy", default=None)
|
190
192
|
post_run_copy: Optional[
|
191
193
|
Union[
|
192
194
|
List[Union[StrictStr, List[StrictStr], Tuple[StrictStr, StrictStr]]],
|
193
195
|
RefField,
|
194
196
|
]
|
195
|
-
] = Field(alias="postRunCopy")
|
196
|
-
run: Optional[Union[List[StrictStr], RefField]]
|
197
|
-
lang_env: Optional[StrictStr] = Field(alias="langEnv")
|
198
|
-
uid: Optional[Union[int, RefField]]
|
199
|
-
gid: Optional[Union[int, RefField]]
|
200
|
-
username: Optional[StrictStr]
|
197
|
+
] = Field(alias="postRunCopy", default=None)
|
198
|
+
run: Optional[Union[List[StrictStr], RefField]] = None
|
199
|
+
lang_env: Optional[StrictStr] = Field(alias="langEnv", default=None)
|
200
|
+
uid: Optional[Union[int, RefField]] = None
|
201
|
+
gid: Optional[Union[int, RefField]] = None
|
202
|
+
username: Optional[StrictStr] = None
|
201
203
|
filename: Optional[StrictStr] = Field(default=POLYAXON_DOCKERFILE_NAME)
|
202
204
|
workdir: Optional[StrictStr] = Field(default=POLYAXON_DOCKER_WORKDIR)
|
203
|
-
workdir_path: Optional[StrictStr] = Field(alias="workdirPath")
|
205
|
+
workdir_path: Optional[StrictStr] = Field(alias="workdirPath", default=None)
|
204
206
|
shell: Optional[StrictStr] = Field(default=POLYAXON_DOCKER_SHELL)
|
205
207
|
|
206
|
-
@
|
208
|
+
@field_validator("image")
|
207
209
|
@skip_partial
|
208
210
|
def check_image(cls, image):
|
209
211
|
validate_image(image)
|
polyaxon/_schemas/types/event.py
CHANGED