flyte 0.0.1b0__py3-none-any.whl → 2.0.0b46__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.
- flyte/__init__.py +83 -30
- flyte/_bin/connect.py +61 -0
- flyte/_bin/debug.py +38 -0
- flyte/_bin/runtime.py +87 -19
- flyte/_bin/serve.py +351 -0
- flyte/_build.py +3 -2
- flyte/_cache/cache.py +6 -5
- flyte/_cache/local_cache.py +216 -0
- flyte/_code_bundle/_ignore.py +31 -5
- flyte/_code_bundle/_packaging.py +42 -11
- flyte/_code_bundle/_utils.py +57 -34
- flyte/_code_bundle/bundle.py +130 -27
- flyte/_constants.py +1 -0
- flyte/_context.py +21 -5
- flyte/_custom_context.py +73 -0
- flyte/_debug/constants.py +37 -0
- flyte/_debug/utils.py +17 -0
- flyte/_debug/vscode.py +315 -0
- flyte/_deploy.py +396 -75
- flyte/_deployer.py +109 -0
- flyte/_environment.py +94 -11
- flyte/_excepthook.py +37 -0
- flyte/_group.py +2 -1
- flyte/_hash.py +1 -16
- flyte/_image.py +544 -234
- flyte/_initialize.py +443 -294
- flyte/_interface.py +40 -5
- flyte/_internal/controllers/__init__.py +22 -8
- flyte/_internal/controllers/_local_controller.py +159 -35
- flyte/_internal/controllers/_trace.py +18 -10
- flyte/_internal/controllers/remote/__init__.py +38 -9
- flyte/_internal/controllers/remote/_action.py +82 -12
- flyte/_internal/controllers/remote/_client.py +6 -2
- flyte/_internal/controllers/remote/_controller.py +290 -64
- flyte/_internal/controllers/remote/_core.py +155 -95
- flyte/_internal/controllers/remote/_informer.py +40 -20
- flyte/_internal/controllers/remote/_service_protocol.py +2 -2
- flyte/_internal/imagebuild/__init__.py +2 -10
- flyte/_internal/imagebuild/docker_builder.py +391 -84
- flyte/_internal/imagebuild/image_builder.py +111 -55
- flyte/_internal/imagebuild/remote_builder.py +409 -0
- flyte/_internal/imagebuild/utils.py +79 -0
- flyte/_internal/resolvers/_app_env_module.py +92 -0
- flyte/_internal/resolvers/_task_module.py +5 -38
- flyte/_internal/resolvers/app_env.py +26 -0
- flyte/_internal/resolvers/common.py +8 -1
- flyte/_internal/resolvers/default.py +2 -2
- flyte/_internal/runtime/convert.py +322 -33
- flyte/_internal/runtime/entrypoints.py +106 -18
- flyte/_internal/runtime/io.py +71 -23
- flyte/_internal/runtime/resources_serde.py +21 -7
- flyte/_internal/runtime/reuse.py +125 -0
- flyte/_internal/runtime/rusty.py +196 -0
- flyte/_internal/runtime/task_serde.py +239 -66
- flyte/_internal/runtime/taskrunner.py +48 -8
- flyte/_internal/runtime/trigger_serde.py +162 -0
- flyte/_internal/runtime/types_serde.py +7 -16
- flyte/_keyring/file.py +115 -0
- flyte/_link.py +30 -0
- flyte/_logging.py +241 -42
- flyte/_map.py +312 -0
- flyte/_metrics.py +59 -0
- flyte/_module.py +74 -0
- flyte/_pod.py +30 -0
- flyte/_resources.py +296 -33
- flyte/_retry.py +1 -7
- flyte/_reusable_environment.py +72 -7
- flyte/_run.py +461 -132
- flyte/_secret.py +47 -11
- flyte/_serve.py +333 -0
- flyte/_task.py +245 -56
- flyte/_task_environment.py +219 -97
- flyte/_task_plugins.py +47 -0
- flyte/_tools.py +8 -8
- flyte/_trace.py +15 -24
- flyte/_trigger.py +1027 -0
- flyte/_utils/__init__.py +12 -1
- flyte/_utils/asyn.py +3 -1
- flyte/_utils/async_cache.py +139 -0
- flyte/_utils/coro_management.py +5 -4
- flyte/_utils/description_parser.py +19 -0
- flyte/_utils/docker_credentials.py +173 -0
- flyte/_utils/helpers.py +45 -19
- flyte/_utils/module_loader.py +123 -0
- flyte/_utils/org_discovery.py +57 -0
- flyte/_utils/uv_script_parser.py +8 -1
- flyte/_version.py +16 -3
- flyte/app/__init__.py +27 -0
- flyte/app/_app_environment.py +362 -0
- flyte/app/_connector_environment.py +40 -0
- flyte/app/_deploy.py +130 -0
- flyte/app/_parameter.py +343 -0
- flyte/app/_runtime/__init__.py +3 -0
- flyte/app/_runtime/app_serde.py +383 -0
- flyte/app/_types.py +113 -0
- flyte/app/extras/__init__.py +9 -0
- flyte/app/extras/_auth_middleware.py +217 -0
- flyte/app/extras/_fastapi.py +93 -0
- flyte/app/extras/_model_loader/__init__.py +3 -0
- flyte/app/extras/_model_loader/config.py +7 -0
- flyte/app/extras/_model_loader/loader.py +288 -0
- flyte/cli/__init__.py +12 -0
- flyte/cli/_abort.py +28 -0
- flyte/cli/_build.py +114 -0
- flyte/cli/_common.py +493 -0
- flyte/cli/_create.py +371 -0
- flyte/cli/_delete.py +45 -0
- flyte/cli/_deploy.py +401 -0
- flyte/cli/_gen.py +316 -0
- flyte/cli/_get.py +446 -0
- flyte/cli/_option.py +33 -0
- {union/_cli → flyte/cli}/_params.py +152 -153
- flyte/cli/_plugins.py +209 -0
- flyte/cli/_prefetch.py +292 -0
- flyte/cli/_run.py +690 -0
- flyte/cli/_serve.py +338 -0
- flyte/cli/_update.py +86 -0
- flyte/cli/_user.py +20 -0
- flyte/cli/main.py +246 -0
- flyte/config/__init__.py +3 -0
- flyte/config/_config.py +248 -0
- flyte/config/_internal.py +73 -0
- flyte/config/_reader.py +225 -0
- flyte/connectors/__init__.py +11 -0
- flyte/connectors/_connector.py +330 -0
- flyte/connectors/_server.py +194 -0
- flyte/connectors/utils.py +159 -0
- flyte/errors.py +134 -2
- flyte/extend.py +24 -0
- flyte/extras/_container.py +69 -56
- flyte/git/__init__.py +3 -0
- flyte/git/_config.py +279 -0
- flyte/io/__init__.py +8 -1
- flyte/io/{structured_dataset → _dataframe}/__init__.py +32 -30
- flyte/io/{structured_dataset → _dataframe}/basic_dfs.py +75 -68
- flyte/io/{structured_dataset/structured_dataset.py → _dataframe/dataframe.py} +207 -242
- flyte/io/_dir.py +575 -113
- flyte/io/_file.py +587 -141
- flyte/io/_hashing_io.py +342 -0
- flyte/io/extend.py +7 -0
- flyte/models.py +635 -0
- flyte/prefetch/__init__.py +22 -0
- flyte/prefetch/_hf_model.py +563 -0
- flyte/remote/__init__.py +14 -3
- flyte/remote/_action.py +879 -0
- flyte/remote/_app.py +346 -0
- flyte/remote/_auth_metadata.py +42 -0
- flyte/remote/_client/_protocols.py +62 -4
- flyte/remote/_client/auth/_auth_utils.py +19 -0
- flyte/remote/_client/auth/_authenticators/base.py +8 -2
- flyte/remote/_client/auth/_authenticators/device_code.py +4 -5
- flyte/remote/_client/auth/_authenticators/factory.py +4 -0
- flyte/remote/_client/auth/_authenticators/passthrough.py +79 -0
- flyte/remote/_client/auth/_authenticators/pkce.py +17 -18
- flyte/remote/_client/auth/_channel.py +47 -18
- flyte/remote/_client/auth/_client_config.py +5 -3
- flyte/remote/_client/auth/_keyring.py +15 -2
- flyte/remote/_client/auth/_token_client.py +3 -3
- flyte/remote/_client/controlplane.py +206 -18
- flyte/remote/_common.py +66 -0
- flyte/remote/_data.py +107 -22
- flyte/remote/_logs.py +116 -33
- flyte/remote/_project.py +21 -19
- flyte/remote/_run.py +164 -631
- flyte/remote/_secret.py +72 -29
- flyte/remote/_task.py +387 -46
- flyte/remote/_trigger.py +368 -0
- flyte/remote/_user.py +43 -0
- flyte/report/_report.py +10 -6
- flyte/storage/__init__.py +13 -1
- flyte/storage/_config.py +237 -0
- flyte/storage/_parallel_reader.py +289 -0
- flyte/storage/_storage.py +268 -59
- flyte/syncify/__init__.py +56 -0
- flyte/syncify/_api.py +414 -0
- flyte/types/__init__.py +39 -0
- flyte/types/_interface.py +22 -7
- flyte/{io/pickle/transformer.py → types/_pickle.py} +37 -9
- flyte/types/_string_literals.py +8 -9
- flyte/types/_type_engine.py +230 -129
- flyte/types/_utils.py +1 -1
- flyte-2.0.0b46.data/scripts/debug.py +38 -0
- flyte-2.0.0b46.data/scripts/runtime.py +194 -0
- flyte-2.0.0b46.dist-info/METADATA +352 -0
- flyte-2.0.0b46.dist-info/RECORD +221 -0
- flyte-2.0.0b46.dist-info/entry_points.txt +8 -0
- flyte-2.0.0b46.dist-info/licenses/LICENSE +201 -0
- flyte/_api_commons.py +0 -3
- flyte/_cli/_common.py +0 -287
- flyte/_cli/_create.py +0 -42
- flyte/_cli/_delete.py +0 -23
- flyte/_cli/_deploy.py +0 -140
- flyte/_cli/_get.py +0 -235
- flyte/_cli/_run.py +0 -152
- flyte/_cli/main.py +0 -72
- flyte/_datastructures.py +0 -342
- flyte/_internal/controllers/pbhash.py +0 -39
- flyte/_protos/common/authorization_pb2.py +0 -66
- flyte/_protos/common/authorization_pb2.pyi +0 -108
- flyte/_protos/common/authorization_pb2_grpc.py +0 -4
- flyte/_protos/common/identifier_pb2.py +0 -71
- flyte/_protos/common/identifier_pb2.pyi +0 -82
- flyte/_protos/common/identifier_pb2_grpc.py +0 -4
- flyte/_protos/common/identity_pb2.py +0 -48
- flyte/_protos/common/identity_pb2.pyi +0 -72
- flyte/_protos/common/identity_pb2_grpc.py +0 -4
- flyte/_protos/common/list_pb2.py +0 -36
- flyte/_protos/common/list_pb2.pyi +0 -69
- flyte/_protos/common/list_pb2_grpc.py +0 -4
- flyte/_protos/common/policy_pb2.py +0 -37
- flyte/_protos/common/policy_pb2.pyi +0 -27
- flyte/_protos/common/policy_pb2_grpc.py +0 -4
- flyte/_protos/common/role_pb2.py +0 -37
- flyte/_protos/common/role_pb2.pyi +0 -53
- flyte/_protos/common/role_pb2_grpc.py +0 -4
- flyte/_protos/common/runtime_version_pb2.py +0 -28
- flyte/_protos/common/runtime_version_pb2.pyi +0 -24
- flyte/_protos/common/runtime_version_pb2_grpc.py +0 -4
- flyte/_protos/logs/dataplane/payload_pb2.py +0 -96
- flyte/_protos/logs/dataplane/payload_pb2.pyi +0 -168
- flyte/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
- flyte/_protos/secret/definition_pb2.py +0 -49
- flyte/_protos/secret/definition_pb2.pyi +0 -93
- flyte/_protos/secret/definition_pb2_grpc.py +0 -4
- flyte/_protos/secret/payload_pb2.py +0 -62
- flyte/_protos/secret/payload_pb2.pyi +0 -94
- flyte/_protos/secret/payload_pb2_grpc.py +0 -4
- flyte/_protos/secret/secret_pb2.py +0 -38
- flyte/_protos/secret/secret_pb2.pyi +0 -6
- flyte/_protos/secret/secret_pb2_grpc.py +0 -198
- flyte/_protos/secret/secret_pb2_grpc_grpc.py +0 -198
- flyte/_protos/validate/validate/validate_pb2.py +0 -76
- flyte/_protos/workflow/node_execution_service_pb2.py +0 -26
- flyte/_protos/workflow/node_execution_service_pb2.pyi +0 -4
- flyte/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
- flyte/_protos/workflow/queue_service_pb2.py +0 -106
- flyte/_protos/workflow/queue_service_pb2.pyi +0 -141
- flyte/_protos/workflow/queue_service_pb2_grpc.py +0 -172
- flyte/_protos/workflow/run_definition_pb2.py +0 -128
- flyte/_protos/workflow/run_definition_pb2.pyi +0 -310
- flyte/_protos/workflow/run_definition_pb2_grpc.py +0 -4
- flyte/_protos/workflow/run_logs_service_pb2.py +0 -41
- flyte/_protos/workflow/run_logs_service_pb2.pyi +0 -28
- flyte/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
- flyte/_protos/workflow/run_service_pb2.py +0 -133
- flyte/_protos/workflow/run_service_pb2.pyi +0 -175
- flyte/_protos/workflow/run_service_pb2_grpc.py +0 -412
- flyte/_protos/workflow/state_service_pb2.py +0 -58
- flyte/_protos/workflow/state_service_pb2.pyi +0 -71
- flyte/_protos/workflow/state_service_pb2_grpc.py +0 -138
- flyte/_protos/workflow/task_definition_pb2.py +0 -72
- flyte/_protos/workflow/task_definition_pb2.pyi +0 -65
- flyte/_protos/workflow/task_definition_pb2_grpc.py +0 -4
- flyte/_protos/workflow/task_service_pb2.py +0 -44
- flyte/_protos/workflow/task_service_pb2.pyi +0 -31
- flyte/_protos/workflow/task_service_pb2_grpc.py +0 -104
- flyte/io/_dataframe.py +0 -0
- flyte/io/pickle/__init__.py +0 -0
- flyte/remote/_console.py +0 -18
- flyte-0.0.1b0.dist-info/METADATA +0 -179
- flyte-0.0.1b0.dist-info/RECORD +0 -390
- flyte-0.0.1b0.dist-info/entry_points.txt +0 -3
- union/__init__.py +0 -54
- union/_api_commons.py +0 -3
- union/_bin/__init__.py +0 -0
- union/_bin/runtime.py +0 -113
- union/_build.py +0 -25
- union/_cache/__init__.py +0 -12
- union/_cache/cache.py +0 -141
- union/_cache/defaults.py +0 -9
- union/_cache/policy_function_body.py +0 -42
- union/_cli/__init__.py +0 -0
- union/_cli/_common.py +0 -263
- union/_cli/_create.py +0 -40
- union/_cli/_delete.py +0 -23
- union/_cli/_deploy.py +0 -120
- union/_cli/_get.py +0 -162
- union/_cli/_run.py +0 -150
- union/_cli/main.py +0 -72
- union/_code_bundle/__init__.py +0 -8
- union/_code_bundle/_ignore.py +0 -113
- union/_code_bundle/_packaging.py +0 -187
- union/_code_bundle/_utils.py +0 -342
- union/_code_bundle/bundle.py +0 -176
- union/_context.py +0 -146
- union/_datastructures.py +0 -295
- union/_deploy.py +0 -185
- union/_doc.py +0 -29
- union/_docstring.py +0 -26
- union/_environment.py +0 -43
- union/_group.py +0 -31
- union/_hash.py +0 -23
- union/_image.py +0 -760
- union/_initialize.py +0 -585
- union/_interface.py +0 -84
- union/_internal/__init__.py +0 -3
- union/_internal/controllers/__init__.py +0 -77
- union/_internal/controllers/_local_controller.py +0 -77
- union/_internal/controllers/pbhash.py +0 -39
- union/_internal/controllers/remote/__init__.py +0 -40
- union/_internal/controllers/remote/_action.py +0 -131
- union/_internal/controllers/remote/_client.py +0 -43
- union/_internal/controllers/remote/_controller.py +0 -169
- union/_internal/controllers/remote/_core.py +0 -341
- union/_internal/controllers/remote/_informer.py +0 -260
- union/_internal/controllers/remote/_service_protocol.py +0 -44
- union/_internal/imagebuild/__init__.py +0 -11
- union/_internal/imagebuild/docker_builder.py +0 -416
- union/_internal/imagebuild/image_builder.py +0 -243
- union/_internal/imagebuild/remote_builder.py +0 -0
- union/_internal/resolvers/__init__.py +0 -0
- union/_internal/resolvers/_task_module.py +0 -31
- union/_internal/resolvers/common.py +0 -24
- union/_internal/resolvers/default.py +0 -27
- union/_internal/runtime/__init__.py +0 -0
- union/_internal/runtime/convert.py +0 -163
- union/_internal/runtime/entrypoints.py +0 -121
- union/_internal/runtime/io.py +0 -136
- union/_internal/runtime/resources_serde.py +0 -134
- union/_internal/runtime/task_serde.py +0 -202
- union/_internal/runtime/taskrunner.py +0 -179
- union/_internal/runtime/types_serde.py +0 -53
- union/_logging.py +0 -124
- union/_protos/__init__.py +0 -0
- union/_protos/common/authorization_pb2.py +0 -66
- union/_protos/common/authorization_pb2.pyi +0 -106
- union/_protos/common/authorization_pb2_grpc.py +0 -4
- union/_protos/common/identifier_pb2.py +0 -71
- union/_protos/common/identifier_pb2.pyi +0 -82
- union/_protos/common/identifier_pb2_grpc.py +0 -4
- union/_protos/common/identity_pb2.py +0 -48
- union/_protos/common/identity_pb2.pyi +0 -72
- union/_protos/common/identity_pb2_grpc.py +0 -4
- union/_protos/common/list_pb2.py +0 -36
- union/_protos/common/list_pb2.pyi +0 -69
- union/_protos/common/list_pb2_grpc.py +0 -4
- union/_protos/common/policy_pb2.py +0 -37
- union/_protos/common/policy_pb2.pyi +0 -27
- union/_protos/common/policy_pb2_grpc.py +0 -4
- union/_protos/common/role_pb2.py +0 -37
- union/_protos/common/role_pb2.pyi +0 -51
- union/_protos/common/role_pb2_grpc.py +0 -4
- union/_protos/common/runtime_version_pb2.py +0 -28
- union/_protos/common/runtime_version_pb2.pyi +0 -24
- union/_protos/common/runtime_version_pb2_grpc.py +0 -4
- union/_protos/logs/dataplane/payload_pb2.py +0 -96
- union/_protos/logs/dataplane/payload_pb2.pyi +0 -168
- union/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
- union/_protos/secret/definition_pb2.py +0 -49
- union/_protos/secret/definition_pb2.pyi +0 -93
- union/_protos/secret/definition_pb2_grpc.py +0 -4
- union/_protos/secret/payload_pb2.py +0 -62
- union/_protos/secret/payload_pb2.pyi +0 -94
- union/_protos/secret/payload_pb2_grpc.py +0 -4
- union/_protos/secret/secret_pb2.py +0 -38
- union/_protos/secret/secret_pb2.pyi +0 -6
- union/_protos/secret/secret_pb2_grpc.py +0 -198
- union/_protos/validate/validate/validate_pb2.py +0 -76
- union/_protos/workflow/node_execution_service_pb2.py +0 -26
- union/_protos/workflow/node_execution_service_pb2.pyi +0 -4
- union/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
- union/_protos/workflow/queue_service_pb2.py +0 -75
- union/_protos/workflow/queue_service_pb2.pyi +0 -103
- union/_protos/workflow/queue_service_pb2_grpc.py +0 -172
- union/_protos/workflow/run_definition_pb2.py +0 -100
- union/_protos/workflow/run_definition_pb2.pyi +0 -256
- union/_protos/workflow/run_definition_pb2_grpc.py +0 -4
- union/_protos/workflow/run_logs_service_pb2.py +0 -41
- union/_protos/workflow/run_logs_service_pb2.pyi +0 -28
- union/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
- union/_protos/workflow/run_service_pb2.py +0 -133
- union/_protos/workflow/run_service_pb2.pyi +0 -173
- union/_protos/workflow/run_service_pb2_grpc.py +0 -412
- union/_protos/workflow/state_service_pb2.py +0 -58
- union/_protos/workflow/state_service_pb2.pyi +0 -69
- union/_protos/workflow/state_service_pb2_grpc.py +0 -138
- union/_protos/workflow/task_definition_pb2.py +0 -72
- union/_protos/workflow/task_definition_pb2.pyi +0 -65
- union/_protos/workflow/task_definition_pb2_grpc.py +0 -4
- union/_protos/workflow/task_service_pb2.py +0 -44
- union/_protos/workflow/task_service_pb2.pyi +0 -31
- union/_protos/workflow/task_service_pb2_grpc.py +0 -104
- union/_resources.py +0 -226
- union/_retry.py +0 -32
- union/_reusable_environment.py +0 -25
- union/_run.py +0 -374
- union/_secret.py +0 -61
- union/_task.py +0 -354
- union/_task_environment.py +0 -186
- union/_timeout.py +0 -47
- union/_tools.py +0 -27
- union/_utils/__init__.py +0 -11
- union/_utils/asyn.py +0 -119
- union/_utils/file_handling.py +0 -71
- union/_utils/helpers.py +0 -46
- union/_utils/lazy_module.py +0 -54
- union/_utils/uv_script_parser.py +0 -49
- union/_version.py +0 -21
- union/connectors/__init__.py +0 -0
- union/errors.py +0 -128
- union/extras/__init__.py +0 -5
- union/extras/_container.py +0 -263
- union/io/__init__.py +0 -11
- union/io/_dataframe.py +0 -0
- union/io/_dir.py +0 -425
- union/io/_file.py +0 -418
- union/io/pickle/__init__.py +0 -0
- union/io/pickle/transformer.py +0 -117
- union/io/structured_dataset/__init__.py +0 -122
- union/io/structured_dataset/basic_dfs.py +0 -219
- union/io/structured_dataset/structured_dataset.py +0 -1057
- union/py.typed +0 -0
- union/remote/__init__.py +0 -23
- union/remote/_client/__init__.py +0 -0
- union/remote/_client/_protocols.py +0 -129
- union/remote/_client/auth/__init__.py +0 -12
- union/remote/_client/auth/_authenticators/__init__.py +0 -0
- union/remote/_client/auth/_authenticators/base.py +0 -391
- union/remote/_client/auth/_authenticators/client_credentials.py +0 -73
- union/remote/_client/auth/_authenticators/device_code.py +0 -120
- union/remote/_client/auth/_authenticators/external_command.py +0 -77
- union/remote/_client/auth/_authenticators/factory.py +0 -200
- union/remote/_client/auth/_authenticators/pkce.py +0 -515
- union/remote/_client/auth/_channel.py +0 -184
- union/remote/_client/auth/_client_config.py +0 -83
- union/remote/_client/auth/_default_html.py +0 -32
- union/remote/_client/auth/_grpc_utils/__init__.py +0 -0
- union/remote/_client/auth/_grpc_utils/auth_interceptor.py +0 -204
- union/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +0 -144
- union/remote/_client/auth/_keyring.py +0 -154
- union/remote/_client/auth/_token_client.py +0 -258
- union/remote/_client/auth/errors.py +0 -16
- union/remote/_client/controlplane.py +0 -86
- union/remote/_data.py +0 -149
- union/remote/_logs.py +0 -74
- union/remote/_project.py +0 -86
- union/remote/_run.py +0 -820
- union/remote/_secret.py +0 -132
- union/remote/_task.py +0 -193
- union/report/__init__.py +0 -3
- union/report/_report.py +0 -178
- union/report/_template.html +0 -124
- union/storage/__init__.py +0 -24
- union/storage/_remote_fs.py +0 -34
- union/storage/_storage.py +0 -247
- union/storage/_utils.py +0 -5
- union/types/__init__.py +0 -11
- union/types/_renderer.py +0 -162
- union/types/_string_literals.py +0 -120
- union/types/_type_engine.py +0 -2131
- union/types/_utils.py +0 -80
- /flyte/{_cli → _debug}/__init__.py +0 -0
- /flyte/{_protos → _keyring}/__init__.py +0 -0
- {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/WHEEL +0 -0
- {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/top_level.txt +0 -0
flyte/errors.py
CHANGED
|
@@ -10,6 +10,16 @@ from typing import Literal
|
|
|
10
10
|
ErrorKind = Literal["system", "unknown", "user"]
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
def silence_grpc_polling_error(loop, context):
|
|
14
|
+
"""
|
|
15
|
+
Suppress specific gRPC polling errors in the event loop.
|
|
16
|
+
"""
|
|
17
|
+
exc = context.get("exception")
|
|
18
|
+
if isinstance(exc, BlockingIOError):
|
|
19
|
+
return # suppress
|
|
20
|
+
loop.default_exception_handler(context)
|
|
21
|
+
|
|
22
|
+
|
|
13
23
|
class BaseRuntimeError(RuntimeError):
|
|
14
24
|
"""
|
|
15
25
|
Base class for all Union runtime errors. These errors are raised when the underlying task execution fails, either
|
|
@@ -86,6 +96,9 @@ class TaskTimeoutError(RuntimeUserError):
|
|
|
86
96
|
This error is raised when the underlying task execution runs for longer than the specified timeout.
|
|
87
97
|
"""
|
|
88
98
|
|
|
99
|
+
def __init__(self, message: str):
|
|
100
|
+
super().__init__("TaskTimeoutError", message, "user")
|
|
101
|
+
|
|
89
102
|
|
|
90
103
|
class RetriesExhaustedError(RuntimeUserError):
|
|
91
104
|
"""
|
|
@@ -119,7 +132,9 @@ class CustomError(RuntimeUserError):
|
|
|
119
132
|
Create a CustomError from an exception. The exception's class name is used as the error code and the exception
|
|
120
133
|
message is used as the error message.
|
|
121
134
|
"""
|
|
122
|
-
|
|
135
|
+
new_exc = cls(e.__class__.__name__, str(e))
|
|
136
|
+
new_exc.__cause__ = e
|
|
137
|
+
return new_exc
|
|
123
138
|
|
|
124
139
|
|
|
125
140
|
class NotInTaskContextError(RuntimeUserError):
|
|
@@ -134,10 +149,127 @@ class ActionNotFoundError(RuntimeError):
|
|
|
134
149
|
"""
|
|
135
150
|
|
|
136
151
|
|
|
152
|
+
# NOTE: Use RemoteTaskError instead, since "reference tasks" (from v1) are now
|
|
153
|
+
# simply "remote tasks" in v2.
|
|
137
154
|
class ReferenceTaskError(RuntimeUserError):
|
|
138
155
|
"""
|
|
139
156
|
This error is raised when the user tries to access a task that does not exist.
|
|
140
157
|
"""
|
|
141
158
|
|
|
159
|
+
CODE = "ReferenceTaskUsageError"
|
|
160
|
+
|
|
161
|
+
def __init__(self, message: str):
|
|
162
|
+
super().__init__(self.CODE, message, "user")
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class RemoteTaskError(ReferenceTaskError):
|
|
166
|
+
"""
|
|
167
|
+
This error is raised when the user tries to access a task that does not exist.
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
CODE = "RemoteTaskUsageError"
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class LogsNotYetAvailableError(BaseRuntimeError):
|
|
174
|
+
"""
|
|
175
|
+
This error is raised when the logs are not yet available for a task.
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
def __init__(self, message: str):
|
|
179
|
+
super().__init__("LogsNotYetAvailable", "system", message, None)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class RuntimeDataValidationError(RuntimeUserError):
|
|
183
|
+
"""
|
|
184
|
+
This error is raised when the user tries to access a resource that does not exist or is invalid.
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
def __init__(self, var: str, e: Exception | str, task_name: str = ""):
|
|
188
|
+
super().__init__(
|
|
189
|
+
"DataValidationError", f"In task {task_name} variable {var}, failed to serialize/deserialize because of {e}"
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class DeploymentError(RuntimeUserError):
|
|
194
|
+
"""
|
|
195
|
+
This error is raised when the deployment of a task fails, or some preconditions for deployment are not met.
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
def __init__(self, message: str):
|
|
199
|
+
super().__init__("DeploymentError", message, "user")
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class ImageBuildError(RuntimeUserError):
|
|
203
|
+
"""
|
|
204
|
+
This error is raised when the image build fails.
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
def __init__(self, message: str):
|
|
208
|
+
super().__init__("ImageBuildError", message, "user")
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class ModuleLoadError(RuntimeUserError):
|
|
212
|
+
"""
|
|
213
|
+
This error is raised when the module cannot be loaded, either because it does not exist or because of a
|
|
214
|
+
syntax error.
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
def __init__(self, message: str):
|
|
218
|
+
super().__init__("ModuleLoadError", message, "user")
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class InlineIOMaxBytesBreached(RuntimeUserError):
|
|
222
|
+
"""
|
|
223
|
+
This error is raised when the inline IO max bytes limit is breached.
|
|
224
|
+
This can be adjusted per task by setting max_inline_io_bytes in the task definition.
|
|
225
|
+
"""
|
|
226
|
+
|
|
227
|
+
def __init__(self, message: str):
|
|
228
|
+
super().__init__("InlineIOMaxBytesBreached", message, "user")
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class RunAbortedError(RuntimeUserError):
|
|
232
|
+
"""
|
|
233
|
+
This error is raised when the run is aborted by the user.
|
|
234
|
+
"""
|
|
235
|
+
|
|
236
|
+
def __init__(self, message: str):
|
|
237
|
+
super().__init__("RunAbortedError", message, "user")
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class SlowDownError(RuntimeUserError):
|
|
241
|
+
"""
|
|
242
|
+
This error is raised when the user tries to access a resource that does not exist or is invalid.
|
|
243
|
+
"""
|
|
244
|
+
|
|
245
|
+
def __init__(self, message: str):
|
|
246
|
+
super().__init__("SlowDownError", message, "user")
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
class OnlyAsyncIOSupportedError(RuntimeUserError):
|
|
250
|
+
"""
|
|
251
|
+
This error is raised when the user tries to use sync IO in an async task.
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
def __init__(self, message: str):
|
|
255
|
+
super().__init__("OnlyAsyncIOSupportedError", message, "user")
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
class ParameterMaterializationError(RuntimeUserError):
|
|
259
|
+
"""
|
|
260
|
+
This error is raised when the user tries to use a Parameter in an App, that has delayed Materialization,
|
|
261
|
+
but the materialization fails.
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
def __init__(self, message: str):
|
|
265
|
+
super().__init__("ParameterMaterializationError", message, "user")
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
class RestrictedTypeError(RuntimeUserError):
|
|
269
|
+
"""
|
|
270
|
+
This error is raised when the user uses a restricted type, for example current a Tuple is not supported for one
|
|
271
|
+
value.
|
|
272
|
+
"""
|
|
273
|
+
|
|
142
274
|
def __init__(self, message: str):
|
|
143
|
-
super().__init__("
|
|
275
|
+
super().__init__("RestrictedTypeUsage", message, "user")
|
flyte/extend.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from flyte._image import Architecture
|
|
2
|
+
|
|
3
|
+
from ._initialize import is_initialized
|
|
4
|
+
from ._internal.imagebuild.image_builder import ImageBuildEngine, ImageBuilder, ImageChecker
|
|
5
|
+
from ._internal.runtime.entrypoints import download_code_bundle
|
|
6
|
+
from ._internal.runtime.resources_serde import get_proto_resources
|
|
7
|
+
from ._resources import PRIMARY_CONTAINER_DEFAULT_NAME, pod_spec_from_resources
|
|
8
|
+
from ._task import AsyncFunctionTaskTemplate, TaskTemplate
|
|
9
|
+
from ._task_plugins import TaskPluginRegistry
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"PRIMARY_CONTAINER_DEFAULT_NAME",
|
|
13
|
+
"Architecture",
|
|
14
|
+
"AsyncFunctionTaskTemplate",
|
|
15
|
+
"ImageBuildEngine",
|
|
16
|
+
"ImageBuilder",
|
|
17
|
+
"ImageChecker",
|
|
18
|
+
"TaskPluginRegistry",
|
|
19
|
+
"TaskTemplate",
|
|
20
|
+
"download_code_bundle",
|
|
21
|
+
"get_proto_resources",
|
|
22
|
+
"is_initialized",
|
|
23
|
+
"pod_spec_from_resources",
|
|
24
|
+
]
|
flyte/extras/_container.py
CHANGED
|
@@ -2,27 +2,23 @@ import os
|
|
|
2
2
|
import pathlib
|
|
3
3
|
from typing import Any, Dict, List, Literal, Optional, Tuple, Type, Union
|
|
4
4
|
|
|
5
|
-
from
|
|
5
|
+
from flyteidl2.core import tasks_pb2
|
|
6
6
|
|
|
7
7
|
from flyte import Image, storage
|
|
8
|
-
from flyte._datastructures import NativeInterface, SerializationContext
|
|
9
8
|
from flyte._logging import logger
|
|
10
9
|
from flyte._task import TaskTemplate
|
|
10
|
+
from flyte.io import Dir, File
|
|
11
|
+
from flyte.models import NativeInterface, SerializationContext
|
|
11
12
|
|
|
12
|
-
_PRIMARY_CONTAINER_NAME_FIELD = "primary_container_name"
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
def _extract_command_key(cmd: str, **kwargs) -> Any:
|
|
14
|
+
def _extract_command_key(cmd: str, **kwargs) -> List[Any] | None:
|
|
16
15
|
"""
|
|
17
16
|
Extract the key from the command using regex.
|
|
18
17
|
"""
|
|
19
18
|
import re
|
|
20
19
|
|
|
21
|
-
input_regex = r"
|
|
22
|
-
|
|
23
|
-
if match:
|
|
24
|
-
return match.group(1)
|
|
25
|
-
return None
|
|
20
|
+
input_regex = r"\{\{\.inputs\.([a-zA-Z0-9_]+)\}\}"
|
|
21
|
+
return re.findall(input_regex, cmd)
|
|
26
22
|
|
|
27
23
|
|
|
28
24
|
def _extract_path_command_key(cmd: str, input_data_dir: Optional[str]) -> Optional[str]:
|
|
@@ -32,8 +28,9 @@ def _extract_path_command_key(cmd: str, input_data_dir: Optional[str]) -> Option
|
|
|
32
28
|
import re
|
|
33
29
|
|
|
34
30
|
input_data_dir = input_data_dir or ""
|
|
35
|
-
input_regex = rf"{re.escape(input_data_dir)}/(
|
|
36
|
-
|
|
31
|
+
input_regex = rf"{re.escape(input_data_dir)}/([\w\-.]+)" # captures file or dir names
|
|
32
|
+
|
|
33
|
+
match = re.search(input_regex, cmd)
|
|
37
34
|
if match:
|
|
38
35
|
return match.group(1)
|
|
39
36
|
return None
|
|
@@ -70,7 +67,7 @@ class ContainerTask(TaskTemplate):
|
|
|
70
67
|
input_data_dir: str | pathlib.Path = "/var/inputs",
|
|
71
68
|
output_data_dir: str | pathlib.Path = "/var/outputs",
|
|
72
69
|
metadata_format: MetadataFormat = "JSON",
|
|
73
|
-
local_logs: bool =
|
|
70
|
+
local_logs: bool = True,
|
|
74
71
|
**kwargs,
|
|
75
72
|
):
|
|
76
73
|
super().__init__(
|
|
@@ -83,9 +80,14 @@ class ContainerTask(TaskTemplate):
|
|
|
83
80
|
self._image = image
|
|
84
81
|
if isinstance(image, str):
|
|
85
82
|
if image == "auto":
|
|
86
|
-
self._image = Image.
|
|
83
|
+
self._image = Image.from_debian_base()
|
|
87
84
|
else:
|
|
88
|
-
self._image = Image.
|
|
85
|
+
self._image = Image.from_base(image)
|
|
86
|
+
|
|
87
|
+
if command and any(not isinstance(c, str) for c in command):
|
|
88
|
+
raise ValueError("All elements in the command list must be strings.")
|
|
89
|
+
if arguments and any(not isinstance(a, str) for a in arguments):
|
|
90
|
+
raise ValueError("All elements in the arguments list must be strings.")
|
|
89
91
|
self._cmd = command
|
|
90
92
|
self._args = arguments
|
|
91
93
|
self._input_data_dir = input_data_dir
|
|
@@ -106,32 +108,34 @@ class ContainerTask(TaskTemplate):
|
|
|
106
108
|
For FlyteFile and FlyteDirectory commands, e.g., "/var/inputs/inputs", we extract the key from strings that
|
|
107
109
|
begin with the specified `input_data_dir`.
|
|
108
110
|
"""
|
|
109
|
-
|
|
110
|
-
# from flytekit.types.file import FlyteFile
|
|
111
|
+
from flyte.io import Dir, File
|
|
111
112
|
|
|
112
113
|
volume_binding: Dict[str, Dict[str, str]] = {}
|
|
113
114
|
path_k = _extract_path_command_key(cmd, str(self._input_data_dir))
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
115
|
+
keys = [path_k] if path_k else _extract_command_key(cmd)
|
|
116
|
+
|
|
117
|
+
command = cmd
|
|
118
|
+
|
|
119
|
+
if keys:
|
|
120
|
+
for k in keys:
|
|
121
|
+
input_val = kwargs.get(k)
|
|
122
|
+
# TODO: Add support file and directory transformer first
|
|
123
|
+
if input_val and type(input_val) in [File, Dir]:
|
|
124
|
+
if not path_k:
|
|
125
|
+
raise AssertionError(
|
|
126
|
+
"File and Directory commands should not use the template syntax "
|
|
127
|
+
"like this: {{.inputs.infile}}\n"
|
|
128
|
+
"Please use a path-like syntax, such as: /var/inputs/infile.\n"
|
|
129
|
+
"This requirement is due to how Flyte Propeller processes template syntax inputs."
|
|
130
|
+
)
|
|
131
|
+
local_flyte_file_or_dir_path = input_val.path
|
|
132
|
+
remote_flyte_file_or_dir_path = os.path.join(self._input_data_dir, k) # type: ignore
|
|
133
|
+
volume_binding[local_flyte_file_or_dir_path] = {
|
|
134
|
+
"bind": remote_flyte_file_or_dir_path,
|
|
135
|
+
"mode": "rw",
|
|
136
|
+
}
|
|
137
|
+
else:
|
|
138
|
+
command = command.replace(f"{{{{.inputs.{k}}}}}", str(input_val))
|
|
135
139
|
else:
|
|
136
140
|
command = cmd
|
|
137
141
|
|
|
@@ -193,7 +197,9 @@ class ContainerTask(TaskTemplate):
|
|
|
193
197
|
microseconds=microseconds,
|
|
194
198
|
)
|
|
195
199
|
|
|
196
|
-
def _convert_output_val_to_correct_type(
|
|
200
|
+
async def _convert_output_val_to_correct_type(
|
|
201
|
+
self, output_path: pathlib.Path, output_val: Any, output_type: Type
|
|
202
|
+
) -> Any:
|
|
197
203
|
import datetime
|
|
198
204
|
|
|
199
205
|
if issubclass(output_type, bool):
|
|
@@ -202,20 +208,31 @@ class ContainerTask(TaskTemplate):
|
|
|
202
208
|
return datetime.datetime.fromisoformat(output_val)
|
|
203
209
|
elif issubclass(output_type, datetime.timedelta):
|
|
204
210
|
return self._string_to_timedelta(output_val)
|
|
211
|
+
elif issubclass(output_type, File):
|
|
212
|
+
return await File.from_local(output_path)
|
|
213
|
+
elif issubclass(output_type, Dir):
|
|
214
|
+
return await Dir.from_local(output_path)
|
|
205
215
|
else:
|
|
206
216
|
return output_type(output_val)
|
|
207
217
|
|
|
208
|
-
def
|
|
209
|
-
|
|
218
|
+
async def _get_output(self, output_directory: pathlib.Path) -> Tuple[Any]:
|
|
219
|
+
output_items = []
|
|
210
220
|
if self._outputs:
|
|
211
221
|
for k, output_type in self._outputs.items():
|
|
212
222
|
output_path = output_directory / k
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
223
|
+
if os.path.isfile(output_path):
|
|
224
|
+
with output_path.open("r") as f:
|
|
225
|
+
output_val = f.read()
|
|
226
|
+
else:
|
|
227
|
+
output_val = None
|
|
228
|
+
parsed = await self._convert_output_val_to_correct_type(output_path, output_val, output_type)
|
|
229
|
+
output_items.append(parsed)
|
|
230
|
+
# return a tuple so that each element is treated as a separate output.
|
|
231
|
+
# this allows flyte to map the user-defined output types (dict) to individual values.
|
|
232
|
+
# if we returned a list instead, it would be treated as a single output.
|
|
233
|
+
return tuple(output_items)
|
|
234
|
+
|
|
235
|
+
async def execute(self, **kwargs) -> Any:
|
|
219
236
|
try:
|
|
220
237
|
import docker
|
|
221
238
|
except ImportError:
|
|
@@ -235,6 +252,7 @@ class ContainerTask(TaskTemplate):
|
|
|
235
252
|
raise AssertionError(f"Only Image objects are supported, not strings. Got {self._image} instead.")
|
|
236
253
|
uri = self._image.uri
|
|
237
254
|
self._pull_image_if_not_exists(client, uri)
|
|
255
|
+
print(f"Command: {commands!r}")
|
|
238
256
|
|
|
239
257
|
container = client.containers.run(uri, command=commands, remove=True, volumes=volume_bindings, detach=True)
|
|
240
258
|
|
|
@@ -247,8 +265,8 @@ class ContainerTask(TaskTemplate):
|
|
|
247
265
|
|
|
248
266
|
container.wait()
|
|
249
267
|
|
|
250
|
-
|
|
251
|
-
return
|
|
268
|
+
output = await self._get_output(output_directory)
|
|
269
|
+
return output
|
|
252
270
|
|
|
253
271
|
def data_loading_config(self, sctx: SerializationContext) -> tasks_pb2.DataLoadingConfig:
|
|
254
272
|
literal_to_protobuf = {
|
|
@@ -258,16 +276,11 @@ class ContainerTask(TaskTemplate):
|
|
|
258
276
|
}
|
|
259
277
|
|
|
260
278
|
return tasks_pb2.DataLoadingConfig(
|
|
261
|
-
input_path=self._input_data_dir,
|
|
262
|
-
output_path=self._output_data_dir,
|
|
279
|
+
input_path=str(self._input_data_dir) if self._input_data_dir else None,
|
|
280
|
+
output_path=str(self._output_data_dir) if self._output_data_dir else None,
|
|
263
281
|
enabled=True,
|
|
264
282
|
format=literal_to_protobuf.get(self._metadata_format, "JSON"),
|
|
265
283
|
)
|
|
266
284
|
|
|
267
285
|
def container_args(self, sctx: SerializationContext) -> List[str]:
|
|
268
286
|
return self._cmd + (self._args if self._args else [])
|
|
269
|
-
|
|
270
|
-
def config(self, sctx: SerializationContext) -> Dict[str, str]:
|
|
271
|
-
if self.pod_template is None:
|
|
272
|
-
return {}
|
|
273
|
-
return {_PRIMARY_CONTAINER_NAME_FIELD: self.primary_container_name}
|
flyte/git/__init__.py
ADDED