polyaxon 2.4.0rc1__py3-none-any.whl → 2.6.0__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.
Files changed (218) hide show
  1. polyaxon/_auxiliaries/default_scheduling.py +17 -7
  2. polyaxon/_auxiliaries/init.py +14 -6
  3. polyaxon/_auxiliaries/sidecar.py +10 -8
  4. polyaxon/_cli/dashboard.py +2 -5
  5. polyaxon/_cli/run.py +14 -0
  6. polyaxon/_cli/version.py +4 -1
  7. polyaxon/_compiler/contexts/contexts.py +4 -0
  8. polyaxon/_compiler/resolver/agent.py +10 -9
  9. polyaxon/_compiler/resolver/runtime.py +4 -0
  10. polyaxon/_constants/metadata.py +1 -0
  11. polyaxon/_contexts/keys.py +1 -0
  12. polyaxon/_deploy/schemas/auth.py +3 -3
  13. polyaxon/_deploy/schemas/celery.py +10 -8
  14. polyaxon/_deploy/schemas/deployment.py +148 -116
  15. polyaxon/_deploy/schemas/email.py +8 -8
  16. polyaxon/_deploy/schemas/ingress.py +7 -7
  17. polyaxon/_deploy/schemas/intervals.py +3 -1
  18. polyaxon/_deploy/schemas/operators.py +8 -8
  19. polyaxon/_deploy/schemas/proxy.py +9 -9
  20. polyaxon/_deploy/schemas/rbac.py +1 -1
  21. polyaxon/_deploy/schemas/root_user.py +5 -5
  22. polyaxon/_deploy/schemas/security_context.py +25 -15
  23. polyaxon/_deploy/schemas/service.py +73 -69
  24. polyaxon/_deploy/schemas/ssl.py +3 -3
  25. polyaxon/_deploy/schemas/ui.py +10 -6
  26. polyaxon/_docker/builder/builder.py +4 -1
  27. polyaxon/_docker/converter/base/containers.py +4 -7
  28. polyaxon/_docker/converter/base/env_vars.py +5 -5
  29. polyaxon/_docker/converter/base/mounts.py +2 -2
  30. polyaxon/_docker/docker_types.py +57 -30
  31. polyaxon/_env_vars/keys.py +2 -0
  32. polyaxon/_flow/__init__.py +3 -2
  33. polyaxon/_flow/builds/__init__.py +8 -8
  34. polyaxon/_flow/cache/__init__.py +4 -4
  35. polyaxon/_flow/component/base.py +25 -18
  36. polyaxon/_flow/component/component.py +4 -3
  37. polyaxon/_flow/early_stopping/__init__.py +1 -1
  38. polyaxon/_flow/early_stopping/policies.py +12 -10
  39. polyaxon/_flow/environment/__init__.py +42 -24
  40. polyaxon/_flow/events/__init__.py +1 -1
  41. polyaxon/_flow/hooks/__init__.py +11 -11
  42. polyaxon/_flow/init/__init__.py +41 -25
  43. polyaxon/_flow/io/io.py +57 -47
  44. polyaxon/_flow/joins/__init__.py +5 -5
  45. polyaxon/_flow/matrix/bayes.py +23 -17
  46. polyaxon/_flow/matrix/grid_search.py +16 -7
  47. polyaxon/_flow/matrix/hyperband.py +10 -10
  48. polyaxon/_flow/matrix/hyperopt.py +14 -9
  49. polyaxon/_flow/matrix/iterative.py +14 -8
  50. polyaxon/_flow/matrix/mapping.py +4 -4
  51. polyaxon/_flow/matrix/params.py +138 -77
  52. polyaxon/_flow/matrix/random_search.py +10 -5
  53. polyaxon/_flow/matrix/tuner.py +4 -4
  54. polyaxon/_flow/mounts/artifacts_mounts.py +1 -1
  55. polyaxon/_flow/notifications/__init__.py +1 -1
  56. polyaxon/_flow/operations/base.py +10 -8
  57. polyaxon/_flow/operations/compiled_operation.py +5 -4
  58. polyaxon/_flow/operations/operation.py +30 -22
  59. polyaxon/_flow/optimization/__init__.py +2 -2
  60. polyaxon/_flow/params/params.py +10 -9
  61. polyaxon/_flow/plugins/__init__.py +19 -13
  62. polyaxon/_flow/run/dag.py +12 -9
  63. polyaxon/_flow/run/dask/dask.py +4 -4
  64. polyaxon/_flow/run/dask/replica.py +17 -11
  65. polyaxon/_flow/run/job.py +17 -11
  66. polyaxon/_flow/run/kubeflow/mpi_job.py +10 -5
  67. polyaxon/_flow/run/kubeflow/mx_job.py +25 -9
  68. polyaxon/_flow/run/kubeflow/paddle_job.py +16 -9
  69. polyaxon/_flow/run/kubeflow/pytorch_job.py +24 -17
  70. polyaxon/_flow/run/kubeflow/replica.py +17 -11
  71. polyaxon/_flow/run/kubeflow/scheduling_policy.py +7 -5
  72. polyaxon/_flow/run/kubeflow/tf_job.py +15 -8
  73. polyaxon/_flow/run/kubeflow/xgboost_job.py +9 -4
  74. polyaxon/_flow/run/ray/ray.py +9 -6
  75. polyaxon/_flow/run/ray/replica.py +25 -16
  76. polyaxon/_flow/run/resources.py +14 -13
  77. polyaxon/_flow/run/service.py +4 -4
  78. polyaxon/_flow/schedules/cron.py +4 -4
  79. polyaxon/_flow/schedules/interval.py +4 -4
  80. polyaxon/_flow/templates/__init__.py +3 -3
  81. polyaxon/_flow/termination/__init__.py +3 -3
  82. polyaxon/_fs/async_manager.py +1 -1
  83. polyaxon/_fs/watcher.py +26 -27
  84. polyaxon/_k8s/k8s_validation.py +1 -1
  85. polyaxon/_k8s/logging/async_monitor.py +18 -3
  86. polyaxon/_local_process/converter/base/containers.py +4 -7
  87. polyaxon/_local_process/converter/base/env_vars.py +5 -5
  88. polyaxon/_local_process/process_types.py +15 -12
  89. polyaxon/_polyaxonfile/specs/compiled_operation.py +1 -1
  90. polyaxon/_polyaxonfile/specs/libs/parser.py +1 -1
  91. polyaxon/_polyaxonfile/specs/libs/validator.py +1 -1
  92. polyaxon/_polyaxonfile/specs/operation.py +1 -1
  93. polyaxon/_polyaxonfile/specs/sections.py +8 -0
  94. polyaxon/_runner/agent/async_agent.py +9 -6
  95. polyaxon/_runner/agent/base_agent.py +8 -5
  96. polyaxon/_runner/agent/sync_agent.py +8 -5
  97. polyaxon/_runner/converter/converter.py +12 -4
  98. polyaxon/_schemas/agent.py +69 -37
  99. polyaxon/_schemas/authentication.py +4 -4
  100. polyaxon/_schemas/base.py +26 -2
  101. polyaxon/_schemas/checks.py +3 -3
  102. polyaxon/_schemas/cli.py +4 -6
  103. polyaxon/_schemas/client.py +20 -18
  104. polyaxon/_schemas/compatibility.py +4 -4
  105. polyaxon/_schemas/container_resources.py +1 -1
  106. polyaxon/_schemas/home.py +3 -3
  107. polyaxon/_schemas/installation.py +13 -9
  108. polyaxon/_schemas/lifecycle.py +23 -23
  109. polyaxon/_schemas/log_handler.py +2 -2
  110. polyaxon/_schemas/services.py +26 -14
  111. polyaxon/_schemas/types/artifacts.py +3 -3
  112. polyaxon/_schemas/types/dockerfile.py +14 -12
  113. polyaxon/_schemas/types/event.py +2 -2
  114. polyaxon/_schemas/types/file.py +3 -3
  115. polyaxon/_schemas/types/git.py +12 -4
  116. polyaxon/_schemas/types/tensorboard.py +14 -8
  117. polyaxon/_schemas/user.py +3 -3
  118. polyaxon/_schemas/version.py +2 -2
  119. polyaxon/_sdk/api/agents_v1_api.py +45 -45
  120. polyaxon/_sdk/api/artifacts_stores_v1_api.py +3 -3
  121. polyaxon/_sdk/api/auth_v1_api.py +13 -13
  122. polyaxon/_sdk/api/connections_v1_api.py +15 -15
  123. polyaxon/_sdk/api/dashboards_v1_api.py +15 -15
  124. polyaxon/_sdk/api/organizations_v1_api.py +77 -77
  125. polyaxon/_sdk/api/presets_v1_api.py +15 -15
  126. polyaxon/_sdk/api/project_dashboards_v1_api.py +17 -17
  127. polyaxon/_sdk/api/project_searches_v1_api.py +17 -17
  128. polyaxon/_sdk/api/projects_v1_api.py +65 -65
  129. polyaxon/_sdk/api/queues_v1_api.py +19 -19
  130. polyaxon/_sdk/api/runs_v1_api.py +127 -127
  131. polyaxon/_sdk/api/searches_v1_api.py +15 -15
  132. polyaxon/_sdk/api/service_accounts_v1_api.py +27 -27
  133. polyaxon/_sdk/api/tags_v1_api.py +17 -17
  134. polyaxon/_sdk/api/teams_v1_api.py +51 -51
  135. polyaxon/_sdk/api/users_v1_api.py +25 -25
  136. polyaxon/_sdk/api/versions_v1_api.py +7 -7
  137. polyaxon/_sdk/schemas/v1_activity.py +8 -8
  138. polyaxon/_sdk/schemas/v1_agent.py +17 -16
  139. polyaxon/_sdk/schemas/v1_agent_state_response.py +4 -4
  140. polyaxon/_sdk/schemas/v1_agent_state_response_agent_state.py +10 -10
  141. polyaxon/_sdk/schemas/v1_agent_status_body_request.py +3 -3
  142. polyaxon/_sdk/schemas/v1_analytics_spec.py +4 -4
  143. polyaxon/_sdk/schemas/v1_artifact_tree.py +3 -3
  144. polyaxon/_sdk/schemas/v1_auth.py +1 -1
  145. polyaxon/_sdk/schemas/v1_cloning.py +3 -3
  146. polyaxon/_sdk/schemas/v1_connection_response.py +9 -9
  147. polyaxon/_sdk/schemas/v1_dashboard.py +9 -9
  148. polyaxon/_sdk/schemas/v1_dashboard_spec.py +5 -5
  149. polyaxon/_sdk/schemas/v1_entities_tags.py +2 -2
  150. polyaxon/_sdk/schemas/v1_entities_transfer.py +2 -2
  151. polyaxon/_sdk/schemas/v1_entity_notification_body.py +7 -7
  152. polyaxon/_sdk/schemas/v1_entity_stage_body_request.py +5 -5
  153. polyaxon/_sdk/schemas/v1_entity_status_body_request.py +5 -5
  154. polyaxon/_sdk/schemas/v1_events_response.py +2 -2
  155. polyaxon/_sdk/schemas/v1_list_activities_response.py +4 -4
  156. polyaxon/_sdk/schemas/v1_list_agents_response.py +4 -4
  157. polyaxon/_sdk/schemas/v1_list_bookmarks_response.py +4 -4
  158. polyaxon/_sdk/schemas/v1_list_connections_response.py +4 -4
  159. polyaxon/_sdk/schemas/v1_list_dashboards_response.py +4 -4
  160. polyaxon/_sdk/schemas/v1_list_organization_members_response.py +4 -4
  161. polyaxon/_sdk/schemas/v1_list_organizations_response.py +4 -4
  162. polyaxon/_sdk/schemas/v1_list_presets_response.py +4 -4
  163. polyaxon/_sdk/schemas/v1_list_project_versions_response.py +4 -4
  164. polyaxon/_sdk/schemas/v1_list_projects_response.py +4 -4
  165. polyaxon/_sdk/schemas/v1_list_queues_response.py +4 -4
  166. polyaxon/_sdk/schemas/v1_list_run_artifacts_response.py +4 -4
  167. polyaxon/_sdk/schemas/v1_list_run_connections_response.py +4 -4
  168. polyaxon/_sdk/schemas/v1_list_run_edges_response.py +4 -4
  169. polyaxon/_sdk/schemas/v1_list_runs_response.py +4 -4
  170. polyaxon/_sdk/schemas/v1_list_searches_response.py +4 -4
  171. polyaxon/_sdk/schemas/v1_list_service_accounts_response.py +4 -4
  172. polyaxon/_sdk/schemas/v1_list_tags_response.py +4 -4
  173. polyaxon/_sdk/schemas/v1_list_team_members_response.py +4 -4
  174. polyaxon/_sdk/schemas/v1_list_teams_response.py +4 -4
  175. polyaxon/_sdk/schemas/v1_list_token_response.py +4 -4
  176. polyaxon/_sdk/schemas/v1_operation_body.py +8 -8
  177. polyaxon/_sdk/schemas/v1_organization.py +16 -16
  178. polyaxon/_sdk/schemas/v1_organization_member.py +6 -6
  179. polyaxon/_sdk/schemas/v1_password_change.py +3 -3
  180. polyaxon/_sdk/schemas/v1_pipeline.py +3 -3
  181. polyaxon/_sdk/schemas/v1_preset.py +11 -12
  182. polyaxon/_sdk/schemas/v1_project.py +17 -17
  183. polyaxon/_sdk/schemas/v1_project_settings.py +11 -11
  184. polyaxon/_sdk/schemas/v1_project_version.py +20 -20
  185. polyaxon/_sdk/schemas/v1_queue.py +12 -12
  186. polyaxon/_sdk/schemas/v1_run.py +38 -38
  187. polyaxon/_sdk/schemas/v1_run_connection.py +3 -3
  188. polyaxon/_sdk/schemas/v1_run_edge.py +5 -5
  189. polyaxon/_sdk/schemas/v1_run_edge_lineage.py +3 -3
  190. polyaxon/_sdk/schemas/v1_run_edges_graph.py +1 -1
  191. polyaxon/_sdk/schemas/v1_run_reference_catalog.py +4 -4
  192. polyaxon/_sdk/schemas/v1_run_settings.py +9 -9
  193. polyaxon/_sdk/schemas/v1_search.py +10 -10
  194. polyaxon/_sdk/schemas/v1_search_spec.py +14 -14
  195. polyaxon/_sdk/schemas/v1_section_spec.py +12 -12
  196. polyaxon/_sdk/schemas/v1_service_account.py +9 -9
  197. polyaxon/_sdk/schemas/v1_settings_catalog.py +4 -4
  198. polyaxon/_sdk/schemas/v1_tag.py +6 -6
  199. polyaxon/_sdk/schemas/v1_team.py +11 -11
  200. polyaxon/_sdk/schemas/v1_team_member.py +6 -6
  201. polyaxon/_sdk/schemas/v1_team_settings.py +2 -2
  202. polyaxon/_sdk/schemas/v1_token.py +10 -10
  203. polyaxon/_sdk/schemas/v1_trial_start.py +6 -6
  204. polyaxon/_sdk/schemas/v1_user.py +6 -6
  205. polyaxon/_sdk/schemas/v1_user_access.py +7 -7
  206. polyaxon/_sdk/schemas/v1_user_email.py +1 -1
  207. polyaxon/_sdk/schemas/v1_user_singup.py +5 -5
  208. polyaxon/_sdk/schemas/v1_uuids.py +1 -1
  209. polyaxon/_sidecar/container/__init__.py +13 -8
  210. polyaxon/_utils/cli_constants.py +2 -0
  211. polyaxon/_utils/test_utils.py +2 -1
  212. polyaxon/pkg.py +1 -1
  213. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/METADATA +13 -13
  214. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/RECORD +218 -218
  215. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/WHEEL +1 -1
  216. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/LICENSE +0 -0
  217. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/entry_points.txt +0 -0
  218. {polyaxon-2.4.0rc1.dist-info → polyaxon-2.6.0.dist-info}/top_level.txt +0 -0
@@ -222,13 +222,13 @@ class V1Build(BaseSchemaModel):
222
222
 
223
223
  _IDENTIFIER = "build"
224
224
  hub_ref: StrictStr = Field(alias="hubRef")
225
- connection: Optional[StrictStr]
226
- presets: Optional[Union[List[StrictStr], RefField]]
227
- queue: Optional[StrictStr]
228
- namespace: Optional[StrictStr]
229
- cache: Optional[Union[V1Cache, RefField]]
230
- params: Optional[Dict[str, Union[V1Param, RefField]]]
231
- run_patch: Optional[Dict[str, Any]] = Field(alias="runPatch")
225
+ connection: Optional[StrictStr] = None
226
+ presets: Optional[Union[List[StrictStr], RefField]] = None
227
+ queue: Optional[StrictStr] = None
228
+ namespace: Optional[StrictStr] = None
229
+ cache: Optional[Union[V1Cache, RefField]] = None
230
+ params: Optional[Dict[str, Union[V1Param, RefField]]] = None
231
+ run_patch: Optional[Dict[str, Any]] = Field(alias="runPatch", default=None)
232
232
  patch_strategy: Optional[Union[PatchStrategy, RefField]] = Field(
233
- alias="patchStrategy"
233
+ alias="patchStrategy", default=None
234
234
  )
@@ -99,7 +99,7 @@ class V1Cache(BaseSchemaModel):
99
99
 
100
100
  _IDENTIFIER = "cache"
101
101
 
102
- disable: Optional[BoolOrRef]
103
- ttl: Optional[IntOrRef]
104
- io: Optional[Union[List[StrictStr], RefField]]
105
- sections: Optional[Union[List[CacheSection], RefField]]
102
+ disable: Optional[BoolOrRef] = None
103
+ ttl: Optional[IntOrRef] = None
104
+ io: Optional[Union[List[StrictStr], RefField]] = None
105
+ sections: Optional[Union[List[CacheSection], RefField]] = None
@@ -1,6 +1,13 @@
1
1
  from typing import List, Optional, Union
2
2
 
3
- from clipped.compact.pydantic import Field, StrictStr, constr, validator
3
+ from clipped.compact.pydantic import (
4
+ NAME_REGEX,
5
+ Field,
6
+ StrictStr,
7
+ field_validator,
8
+ patter_constr,
9
+ validation_before,
10
+ )
4
11
  from clipped.types.ref_or_obj import BoolOrRef, FloatOrRef, RefField
5
12
  from clipped.utils.lists import to_list
6
13
 
@@ -9,27 +16,27 @@ from polyaxon._flow.cache import V1Cache
9
16
  from polyaxon._flow.hooks import V1Hook
10
17
  from polyaxon._flow.plugins import V1Plugins
11
18
  from polyaxon._flow.termination import V1Termination
12
- from polyaxon._schemas.base import NAME_REGEX, BaseSchemaModel
19
+ from polyaxon._schemas.base import BaseSchemaModel
13
20
 
14
21
 
15
22
  class BaseComponent(BaseSchemaModel):
16
- version: Optional[float]
17
- kind: Optional[StrictStr]
18
- name: Optional[Union[constr(regex=NAME_REGEX), RefField]]
19
- description: Optional[StrictStr]
20
- tags: Optional[List[StrictStr]]
21
- presets: Optional[List[StrictStr]]
22
- queue: Optional[StrictStr]
23
- namespace: Optional[StrictStr]
24
- cache: Optional[Union[V1Cache, RefField]]
25
- termination: Optional[Union[V1Termination, RefField]]
26
- plugins: Optional[Union[V1Plugins, RefField]]
27
- build: Optional[Union[V1Build, RefField]]
28
- hooks: Optional[Union[List[V1Hook], RefField]]
29
- is_approved: Optional[BoolOrRef] = Field(alias="isApproved")
30
- cost: Optional[FloatOrRef]
23
+ version: Optional[float] = None
24
+ kind: Optional[StrictStr] = None
25
+ name: Optional[Union[patter_constr(pattern=NAME_REGEX), RefField]] = None
26
+ description: Optional[StrictStr] = None
27
+ tags: Optional[List[StrictStr]] = None
28
+ presets: Optional[List[StrictStr]] = None
29
+ queue: Optional[StrictStr] = None
30
+ namespace: Optional[StrictStr] = None
31
+ cache: Optional[Union[V1Cache, RefField]] = None
32
+ termination: Optional[Union[V1Termination, RefField]] = None
33
+ plugins: Optional[Union[V1Plugins, RefField]] = None
34
+ build: Optional[Union[V1Build, RefField]] = None
35
+ hooks: Optional[Union[List[V1Hook], RefField]] = None
36
+ is_approved: Optional[BoolOrRef] = Field(alias="isApproved", default=None)
37
+ cost: Optional[FloatOrRef] = None
31
38
 
32
- @validator("tags", "presets", pre=True)
39
+ @field_validator("tags", "presets", **validation_before)
33
40
  def validate_str_list(cls, v):
34
41
  if isinstance(v, str):
35
42
  return to_list(v, check_str=True)
@@ -375,12 +375,13 @@ class V1Component(
375
375
  """
376
376
 
377
377
  _IDENTIFIER = "component"
378
+ _CUSTOM_DUMP_FIELDS = {"run"}
378
379
 
379
380
  kind: Literal[_IDENTIFIER] = _IDENTIFIER
380
- inputs: Optional[List[V1IO]]
381
- outputs: Optional[List[V1IO]]
381
+ inputs: Optional[List[V1IO]] = None
382
+ outputs: Optional[List[V1IO]] = None
382
383
  run: Union[V1Runtime]
383
- template: Optional[V1Template]
384
+ template: Optional[V1Template] = None
384
385
 
385
386
  def get_run_kind(self):
386
387
  return self.run.kind if self.run else None
@@ -13,5 +13,5 @@ from polyaxon._flow.early_stopping.policies import (
13
13
 
14
14
  V1EarlyStopping = Annotated[
15
15
  Union[V1MetricEarlyStopping, V1FailureEarlyStopping],
16
- Field(discriminator="kind", alias="earlyStopping"),
16
+ Field(discriminator="kind"),
17
17
  ]
@@ -13,9 +13,9 @@ class V1MedianStoppingPolicy(BaseSchemaModel):
13
13
  _USE_DISCRIMINATOR = True
14
14
 
15
15
  kind: Literal[_IDENTIFIER] = _IDENTIFIER
16
- evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
17
- min_interval: Optional[IntOrRef] = Field(alias="minInterval")
18
- min_samples: Optional[IntOrRef] = Field(alias="minSamples")
16
+ evaluation_interval: IntOrRef = Field(alias="evaluationInterval", default=None)
17
+ min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
18
+ min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
19
19
 
20
20
 
21
21
  class V1TruncationStoppingPolicy(BaseSchemaModel):
@@ -24,9 +24,11 @@ class V1TruncationStoppingPolicy(BaseSchemaModel):
24
24
  kind: Literal[_IDENTIFIER] = _IDENTIFIER
25
25
  percent: FloatOrRef
26
26
  evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
27
- min_interval: Optional[IntOrRef] = Field(alias="minInterval")
28
- min_samples: Optional[IntOrRef] = Field(alias="minSamples")
29
- include_succeeded: Optional[BoolOrRef] = Field(alias="includeSucceeded")
27
+ min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
28
+ min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
29
+ include_succeeded: Optional[BoolOrRef] = Field(
30
+ alias="includeSucceeded", default=None
31
+ )
30
32
 
31
33
 
32
34
  class V1DiffStoppingPolicy(BaseSchemaModel):
@@ -35,13 +37,13 @@ class V1DiffStoppingPolicy(BaseSchemaModel):
35
37
  kind: Literal[_IDENTIFIER] = _IDENTIFIER
36
38
  percent: FloatOrRef
37
39
  evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
38
- min_interval: Optional[IntOrRef] = Field(alias="minInterval")
39
- min_samples: Optional[IntOrRef] = Field(alias="minSamples")
40
+ min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
41
+ min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
40
42
 
41
43
 
42
44
  V1EarlyStoppingPolicy = Annotated[
43
45
  Union[V1MedianStoppingPolicy, V1TruncationStoppingPolicy, V1DiffStoppingPolicy],
44
- Field(discriminator="kind", alias="earlyStopping"),
46
+ Field(discriminator="kind"),
45
47
  ]
46
48
 
47
49
 
@@ -150,7 +152,7 @@ class V1MetricEarlyStopping(BaseSchemaModel):
150
152
  metric: StrictStr
151
153
  value: FloatOrRef
152
154
  optimization: Union[StrictFloat, V1Optimization]
153
- policy: Optional[V1EarlyStoppingPolicy]
155
+ policy: Optional[V1EarlyStoppingPolicy] = None
154
156
 
155
157
 
156
158
  class V1FailureEarlyStopping(BaseSchemaModel):
@@ -1,7 +1,13 @@
1
1
  from typing import Dict, List, Optional, Union
2
2
  from typing_extensions import Literal
3
3
 
4
- from clipped.compact.pydantic import Field, StrictStr, validator
4
+ from clipped.compact.pydantic import (
5
+ Field,
6
+ StrictStr,
7
+ field_validator,
8
+ validation_always,
9
+ validation_before,
10
+ )
5
11
 
6
12
  from polyaxon._k8s import k8s_schemas, k8s_validation
7
13
  from polyaxon._schemas.base import BaseSchemaModel
@@ -389,52 +395,64 @@ class V1Environment(BaseSchemaModel):
389
395
  "dnsConfig",
390
396
  ]
391
397
 
392
- labels: Optional[Dict[StrictStr, StrictStr]]
393
- annotations: Optional[Dict[StrictStr, StrictStr]]
394
- node_selector: Optional[Dict[StrictStr, StrictStr]] = Field(alias="nodeSelector")
395
- affinity: Optional[Union[k8s_schemas.V1Affinity, Dict]]
396
- tolerations: Optional[List[Union[k8s_schemas.V1Toleration, Dict]]]
397
- node_name: Optional[StrictStr] = Field(alias="nodeName")
398
- service_account_name: Optional[StrictStr] = Field(alias="serviceAccountName")
399
- host_aliases: Optional[List[k8s_schemas.V1HostAlias]] = Field(alias="hostAliases")
398
+ labels: Optional[Dict[StrictStr, StrictStr]] = None
399
+ annotations: Optional[Dict[StrictStr, StrictStr]] = None
400
+ node_selector: Optional[Dict[StrictStr, StrictStr]] = Field(
401
+ alias="nodeSelector", default=None
402
+ )
403
+ affinity: Optional[Union[k8s_schemas.V1Affinity, Dict]] = None
404
+ tolerations: Optional[List[Union[k8s_schemas.V1Toleration, Dict]]] = None
405
+ node_name: Optional[StrictStr] = Field(alias="nodeName", default=None)
406
+ service_account_name: Optional[StrictStr] = Field(
407
+ alias="serviceAccountName", default=None
408
+ )
409
+ host_aliases: Optional[List[k8s_schemas.V1HostAlias]] = Field(
410
+ alias="hostAliases", default=None
411
+ )
400
412
  security_context: Optional[Union[k8s_schemas.V1SecurityContext, Dict]] = Field(
401
- alias="securityContext"
413
+ alias="securityContext", default=None
414
+ )
415
+ image_pull_secrets: Optional[List[StrictStr]] = Field(
416
+ alias="imagePullSecrets", default=None
417
+ )
418
+ host_network: Optional[bool] = Field(alias="hostNetwork", default=None)
419
+ host_pid: Optional[bool] = Field(alias="hostPID", default=None)
420
+ dns_policy: Optional[StrictStr] = Field(alias="dnsPolicy", default=None)
421
+ dns_config: Optional[k8s_schemas.V1PodDNSConfig] = Field(
422
+ alias="dnsConfig", default=None
423
+ )
424
+ scheduler_name: Optional[StrictStr] = Field(alias="schedulerName", default=None)
425
+ priority_class_name: Optional[StrictStr] = Field(
426
+ alias="priorityClassName", default=None
402
427
  )
403
- image_pull_secrets: Optional[List[StrictStr]] = Field(alias="imagePullSecrets")
404
- host_network: Optional[bool] = Field(alias="hostNetwork")
405
- host_pid: Optional[bool] = Field(alias="hostPID")
406
- dns_policy: Optional[StrictStr] = Field(alias="dnsPolicy")
407
- dns_config: Optional[k8s_schemas.V1PodDNSConfig] = Field(alias="dnsConfig")
408
- scheduler_name: Optional[StrictStr] = Field(alias="schedulerName")
409
- priority_class_name: Optional[StrictStr] = Field(alias="priorityClassName")
410
- priority: Optional[int]
428
+ priority: Optional[int] = None
411
429
  restart_policy: Optional[
412
430
  Literal["Always", "OnFailure", "Never", "ExitCode"]
413
- ] = Field(alias="restartPolicy")
431
+ ] = Field(alias="restartPolicy", default=None)
414
432
 
415
- @validator("affinity", always=True, pre=True)
433
+ @field_validator("affinity", **validation_always, **validation_before)
416
434
  def validate_affinity(cls, v):
417
435
  return k8s_validation.validate_k8s_affinity(v)
418
436
 
419
- @validator("tolerations", always=True, pre=True)
437
+ @field_validator("tolerations", **validation_always, **validation_before)
420
438
  def validate_tolerations(cls, v):
421
439
  if not v:
422
440
  return v
423
441
  return [k8s_validation.validate_k8s_toleration(vi) for vi in v]
424
442
 
425
- @validator("host_aliases", always=True, pre=True)
443
+ @field_validator("host_aliases", **validation_always, **validation_before)
426
444
  def validate_host_aliases(cls, v):
427
445
  if not v:
428
446
  return v
429
447
  return [k8s_validation.validate_k8s_host_alias(vi) for vi in v]
430
448
 
431
- @validator("security_context", always=True, pre=True)
449
+ @field_validator("security_context", **validation_always, **validation_before)
432
450
  def validate_security_context(cls, v):
433
451
  if not v:
434
452
  return v
435
453
  return k8s_validation.validate_k8s_security_context(v)
436
454
 
437
- @validator("dns_config", always=True, pre=True)
455
+ @field_validator("dns_config", **validation_always, **validation_before)
438
456
  def validate_dns_config(cls, v):
439
457
  if not v:
440
458
  return v
@@ -71,7 +71,7 @@ class V1EventTrigger(BaseSchemaModel, ctx_refs.RefMixin):
71
71
  ## YAML usage
72
72
 
73
73
  ```yaml
74
- >>> events:
74
+ >>> event:
75
75
  >>> ref: {{ ops.upstream-operation }}
76
76
  >>> kinds: [run_status_running]
77
77
  ```
@@ -1,6 +1,6 @@
1
1
  from typing import Dict, List, Optional, Union
2
2
 
3
- from clipped.compact.pydantic import Field, StrictStr, validator
3
+ from clipped.compact.pydantic import Field, StrictStr, field_validator
4
4
  from clipped.types.ref_or_obj import BoolOrRef, RefField
5
5
 
6
6
  from polyaxon._flow.params import V1Param
@@ -208,16 +208,16 @@ class V1Hook(BaseSchemaModel):
208
208
  _IDENTIFIER = "hook"
209
209
 
210
210
  hub_ref: StrictStr = Field(alias="hubRef")
211
- connection: Optional[StrictStr]
212
- trigger: Optional[V1Statuses]
213
- conditions: Optional[StrictStr]
214
- presets: Optional[List[StrictStr]]
215
- queue: Optional[StrictStr]
216
- namespace: Optional[StrictStr]
217
- params: Optional[Union[Dict[str, V1Param], RefField]]
218
- disable_defaults: Optional[BoolOrRef] = Field(alias="disableDefaults")
219
-
220
- @validator("trigger")
211
+ connection: Optional[StrictStr] = None
212
+ trigger: Optional[V1Statuses] = None
213
+ conditions: Optional[StrictStr] = None
214
+ presets: Optional[List[StrictStr]] = None
215
+ queue: Optional[StrictStr] = None
216
+ namespace: Optional[StrictStr] = None
217
+ params: Optional[Union[Dict[str, V1Param], RefField]] = None
218
+ disable_defaults: Optional[BoolOrRef] = Field(alias="disableDefaults", default=None)
219
+
220
+ @field_validator("trigger")
221
221
  def validate_trigger(cls, v):
222
222
  if v and v not in V1Statuses.get_allowable_hook_values():
223
223
  raise ValueError(
@@ -1,6 +1,14 @@
1
1
  from typing import List, Optional, Union
2
2
 
3
- from clipped.compact.pydantic import Field, StrictStr, root_validator, validator
3
+ from clipped.compact.pydantic import (
4
+ Field,
5
+ StrictStr,
6
+ field_validator,
7
+ model_validator,
8
+ validation_after,
9
+ validation_always,
10
+ validation_before,
11
+ )
4
12
  from clipped.config.schema import skip_partial
5
13
  from clipped.types.ref_or_obj import RefField
6
14
 
@@ -202,32 +210,40 @@ class V1Init(BaseSchemaModel):
202
210
  _IDENTIFIER = "init"
203
211
  _SWAGGER_FIELDS = ["container"]
204
212
 
205
- artifacts: Optional[Union[V1ArtifactsType, RefField]]
206
- paths: Optional[Union[List[Union[List[StrictStr], StrictStr]], StrictStr, RefField]]
207
- git: Optional[Union[V1GitType, RefField]]
208
- dockerfile: Optional[Union[V1DockerfileType, RefField]]
209
- file: Optional[Union[V1FileType, RefField]]
210
- tensorboard: Optional[Union[V1TensorboardType, RefField]]
211
- lineage_ref: Optional[Union[StrictStr, RefField]] = Field(alias="lineageRef")
212
- model_ref: Optional[Union[StrictStr, RefField]] = Field(alias="modelRef")
213
- artifact_ref: Optional[Union[StrictStr, RefField]] = Field(alias="artifactRef")
214
- connection: Optional[StrictStr]
215
- path: Optional[StrictStr]
216
- container: Optional[Union[k8s_schemas.V1Container, RefField]]
213
+ artifacts: Optional[Union[V1ArtifactsType, RefField]] = None
214
+ paths: Optional[
215
+ Union[List[Union[List[StrictStr], StrictStr]], StrictStr, RefField]
216
+ ] = None
217
+ git: Optional[Union[V1GitType, RefField]] = None
218
+ dockerfile: Optional[Union[V1DockerfileType, RefField]] = None
219
+ file: Optional[Union[V1FileType, RefField]] = None
220
+ tensorboard: Optional[Union[V1TensorboardType, RefField]] = None
221
+ lineage_ref: Optional[Union[StrictStr, RefField]] = Field(
222
+ alias="lineageRef", default=None
223
+ )
224
+ model_ref: Optional[Union[StrictStr, RefField]] = Field(
225
+ alias="modelRef", default=None
226
+ )
227
+ artifact_ref: Optional[Union[StrictStr, RefField]] = Field(
228
+ alias="artifactRef", default=None
229
+ )
230
+ connection: Optional[StrictStr] = None
231
+ path: Optional[StrictStr] = None
232
+ container: Optional[Union[k8s_schemas.V1Container, RefField]] = None
217
233
 
218
- @root_validator
234
+ @model_validator(**validation_after)
219
235
  @skip_partial
220
236
  def validate_init(cls, values):
221
- artifacts = values.get("artifacts")
222
- paths = values.get("paths")
223
- git = values.get("git")
224
- dockerfile = values.get("dockerfile")
225
- file = values.get("file")
226
- tensorboard = values.get("tensorboard")
227
- lineage_ref = values.get("lineage_ref")
228
- model_ref = values.get("model_ref")
229
- artifact_ref = values.get("artifact_ref")
230
- connection = values.get("connection")
237
+ artifacts = cls.get_value_for_key("artifacts", values)
238
+ paths = cls.get_value_for_key("paths", values)
239
+ git = cls.get_value_for_key("git", values)
240
+ dockerfile = cls.get_value_for_key("dockerfile", values)
241
+ file = cls.get_value_for_key("file", values)
242
+ tensorboard = cls.get_value_for_key("tensorboard", values)
243
+ lineage_ref = cls.get_value_for_key("lineage_ref", values)
244
+ model_ref = cls.get_value_for_key("model_ref", values)
245
+ artifact_ref = cls.get_value_for_key("artifact_ref", values)
246
+ connection = cls.get_value_for_key("connection", values)
231
247
  schemas = 0
232
248
  if artifacts:
233
249
  schemas += 1
@@ -258,7 +274,7 @@ class V1Init(BaseSchemaModel):
258
274
  )
259
275
  return values
260
276
 
261
- @validator("container", always=True, pre=True)
277
+ @field_validator("container", **validation_always, **validation_before)
262
278
  def validate_container(cls, v):
263
279
  return k8s_validation.validate_k8s_container(v)
264
280
 
polyaxon/_flow/io/io.py CHANGED
@@ -2,7 +2,15 @@ import re
2
2
 
3
3
  from typing import Any, Dict, List, Optional, Union
4
4
 
5
- from clipped.compact.pydantic import Field, StrictStr, root_validator, validator
5
+ from clipped.compact.pydantic import (
6
+ Field,
7
+ StrictStr,
8
+ field_validator,
9
+ model_validator,
10
+ validation_after,
11
+ validation_always,
12
+ validation_before,
13
+ )
6
14
  from clipped.config.schema import skip_partial
7
15
  from clipped.types.numbers import StrictIntOrFloat
8
16
  from clipped.types.ref_or_obj import BoolOrRef, IntOrRef, RefField
@@ -86,7 +94,7 @@ def validate_io(
86
94
  )
87
95
 
88
96
  if is_flag and type != "bool":
89
- raise TypeError(
97
+ raise ValueError(
90
98
  "IO type `{}` cannot be a flag, it must be of type `{}`".format(
91
99
  type, "bool"
92
100
  )
@@ -241,29 +249,31 @@ class V1Validation(BaseSchemaModel):
241
249
  * maxItems - maximum number of items
242
250
  """
243
251
 
244
- delay: Optional[BoolOrRef]
245
- gt: Optional[Union[StrictIntOrFloat, RefField]]
246
- ge: Optional[Union[StrictIntOrFloat, RefField]]
247
- lt: Optional[Union[StrictIntOrFloat, RefField]]
248
- le: Optional[Union[StrictIntOrFloat, RefField]]
249
- multiple_of: Optional[Union[StrictIntOrFloat, RefField]] = Field(alias="multipleOf")
250
- min_digits: Optional[IntOrRef] = Field(alias="minDigits")
251
- max_digits: Optional[IntOrRef] = Field(alias="maxDigits")
252
- decimal_places: Optional[IntOrRef] = Field(alias="decimalPlaces")
253
- regex: Optional[StrictStr]
254
- min_length: Optional[IntOrRef] = Field(alias="minLength")
255
- max_length: Optional[IntOrRef] = Field(alias="maxLength")
256
- contains: Optional[Any]
257
- excludes: Optional[Any]
258
- options: Optional[Any]
259
- min_items: Optional[IntOrRef] = Field(alias="minItems")
260
- max_items: Optional[IntOrRef] = Field(alias="maxItems")
261
- keys: Optional[Union[List[StrictStr], RefField]]
252
+ delay: Optional[BoolOrRef] = None
253
+ gt: Optional[Union[StrictIntOrFloat, RefField]] = None
254
+ ge: Optional[Union[StrictIntOrFloat, RefField]] = None
255
+ lt: Optional[Union[StrictIntOrFloat, RefField]] = None
256
+ le: Optional[Union[StrictIntOrFloat, RefField]] = None
257
+ multiple_of: Optional[Union[StrictIntOrFloat, RefField]] = Field(
258
+ alias="multipleOf", default=None
259
+ )
260
+ min_digits: Optional[IntOrRef] = Field(alias="minDigits", default=None)
261
+ max_digits: Optional[IntOrRef] = Field(alias="maxDigits", default=None)
262
+ decimal_places: Optional[IntOrRef] = Field(alias="decimalPlaces", default=None)
263
+ regex: Optional[StrictStr] = None
264
+ min_length: Optional[IntOrRef] = Field(alias="minLength", default=None)
265
+ max_length: Optional[IntOrRef] = Field(alias="maxLength", default=None)
266
+ contains: Optional[Any] = None
267
+ excludes: Optional[Any] = None
268
+ options: Optional[Any] = None
269
+ min_items: Optional[IntOrRef] = Field(alias="minItems", default=None)
270
+ max_items: Optional[IntOrRef] = Field(alias="maxItems", default=None)
271
+ keys: Optional[Union[List[StrictStr], RefField]] = None
262
272
  contains_keys: Optional[Union[List[StrictStr], RefField]] = Field(
263
- alias="containsKeys"
273
+ alias="containsKeys", default=None
264
274
  )
265
275
  excludes_keys: Optional[Union[List[StrictStr], RefField]] = Field(
266
- alias="excludesKeys"
276
+ alias="excludesKeys", default=None
267
277
  )
268
278
 
269
279
  def _validate_gt(self, value):
@@ -891,27 +901,27 @@ class V1IO(BaseSchemaModel):
891
901
  _IDENTIFIER = "io"
892
902
 
893
903
  name: StrictStr
894
- description: Optional[StrictStr]
895
- type: Optional[StrictStr]
896
- is_optional: Optional[bool] = Field(alias="isOptional")
897
- is_list: Optional[bool] = Field(alias="isList")
898
- is_flag: Optional[bool] = Field(alias="isFlag")
899
- arg_format: Optional[StrictStr] = Field(alias="argFormat")
900
- connection: Optional[StrictStr]
901
- to_init: Optional[bool] = Field(alias="toInit")
902
- to_env: Optional[StrictStr] = Field(alias="toEnv")
903
- value: Optional[Any]
904
- validation: Optional[V1Validation]
905
- delay_validation: Optional[bool] = Field(alias="delayValidation")
906
- options: Optional[Any]
907
-
908
- @validator("name", always=True)
904
+ description: Optional[StrictStr] = None
905
+ type: Optional[StrictStr] = None
906
+ is_optional: Optional[bool] = Field(alias="isOptional", default=None)
907
+ is_list: Optional[bool] = Field(alias="isList", default=None)
908
+ is_flag: Optional[bool] = Field(alias="isFlag", default=None)
909
+ arg_format: Optional[StrictStr] = Field(alias="argFormat", default=None)
910
+ connection: Optional[StrictStr] = None
911
+ to_init: Optional[bool] = Field(alias="toInit", default=None)
912
+ to_env: Optional[StrictStr] = Field(alias="toEnv", default=None)
913
+ value: Optional[Any] = None
914
+ validation: Optional[V1Validation] = None
915
+ delay_validation: Optional[bool] = Field(alias="delayValidation", default=None)
916
+ options: Optional[Any] = None
917
+
918
+ @field_validator("name", **validation_always)
909
919
  def validate_name(cls, v):
910
920
  if v in IO_NAME_BLACK_LIST:
911
921
  raise ValueError(IO_NAME_ERROR)
912
922
  return v
913
923
 
914
- @root_validator(pre=True)
924
+ @model_validator(**validation_before)
915
925
  def handle_validation(cls, values):
916
926
  validation = values.get("validation")
917
927
  if not validation and (
@@ -926,20 +936,20 @@ class V1IO(BaseSchemaModel):
926
936
  if values.get("delay_validation") is not None:
927
937
  validation.delay = values.pop("delay_validation")
928
938
  if validation:
929
- values["validation"] = validation
939
+ values["validation"] = validation.to_dict()
930
940
  return values
931
941
 
932
- @root_validator
942
+ @model_validator(**validation_after)
933
943
  @skip_partial
934
944
  def validate_io(cls, values):
935
945
  validate_io(
936
- name=values.get("name"),
937
- type=values.get("type"),
938
- value=values.get("value"),
939
- is_list=values.get("is_list"),
940
- is_optional=values.get("is_optional"),
941
- is_flag=values.get("is_flag"),
942
- validation=values.get("validation"),
946
+ name=cls.get_value_for_key("name", values),
947
+ type=cls.get_value_for_key("type", values),
948
+ value=cls.get_value_for_key("value", values),
949
+ is_list=cls.get_value_for_key("is_list", values),
950
+ is_optional=cls.get_value_for_key("is_optional", values),
951
+ is_flag=cls.get_value_for_key("is_flag", values),
952
+ validation=cls.get_value_for_key("validation", values),
943
953
  )
944
954
  return values
945
955
 
@@ -205,9 +205,9 @@ class V1Join(BaseSchemaModel):
205
205
 
206
206
  _IDENTIFIER = "join"
207
207
 
208
- ref: Optional[StrictStr]
208
+ ref: Optional[StrictStr] = None
209
209
  query: StrictStr
210
- sort: Optional[StrictStr]
211
- limit: Optional[IntOrRef]
212
- offset: Optional[IntOrRef]
213
- params: Optional[Union[Dict[str, V1JoinParam], RefField]]
210
+ sort: Optional[StrictStr] = None
211
+ limit: Optional[IntOrRef] = None
212
+ offset: Optional[IntOrRef] = None
213
+ params: Optional[Union[Dict[str, V1JoinParam], RefField]] = None