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/_task.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
import weakref
|
|
4
5
|
from dataclasses import dataclass, field, replace
|
|
5
|
-
from
|
|
6
|
+
from inspect import iscoroutinefunction
|
|
6
7
|
from typing import (
|
|
7
8
|
TYPE_CHECKING,
|
|
8
9
|
Any,
|
|
9
|
-
Awaitable,
|
|
10
10
|
Callable,
|
|
11
11
|
Coroutine,
|
|
12
12
|
Dict,
|
|
@@ -15,36 +15,46 @@ from typing import (
|
|
|
15
15
|
Literal,
|
|
16
16
|
Optional,
|
|
17
17
|
ParamSpec,
|
|
18
|
+
Tuple,
|
|
19
|
+
TypeAlias,
|
|
18
20
|
TypeVar,
|
|
19
21
|
Union,
|
|
22
|
+
cast,
|
|
23
|
+
overload,
|
|
20
24
|
)
|
|
21
25
|
|
|
22
|
-
from
|
|
23
|
-
|
|
26
|
+
from flyte._pod import PodTemplate
|
|
24
27
|
from flyte.errors import RuntimeSystemError, RuntimeUserError
|
|
25
28
|
|
|
26
29
|
from ._cache import Cache, CacheRequest
|
|
27
30
|
from ._context import internal_ctx
|
|
28
|
-
from ._datastructures import NativeInterface, SerializationContext
|
|
29
31
|
from ._doc import Documentation
|
|
30
32
|
from ._image import Image
|
|
33
|
+
from ._link import Link
|
|
31
34
|
from ._resources import Resources
|
|
32
35
|
from ._retry import RetryStrategy
|
|
33
36
|
from ._reusable_environment import ReusePolicy
|
|
34
37
|
from ._secret import SecretRequest
|
|
35
38
|
from ._timeout import TimeoutType
|
|
39
|
+
from ._trigger import Trigger
|
|
40
|
+
from .models import MAX_INLINE_IO_BYTES, NativeInterface, SerializationContext
|
|
36
41
|
|
|
37
42
|
if TYPE_CHECKING:
|
|
38
|
-
from
|
|
43
|
+
from flyteidl2.core.tasks_pb2 import DataLoadingConfig
|
|
39
44
|
|
|
40
45
|
from ._task_environment import TaskEnvironment
|
|
41
46
|
|
|
42
47
|
P = ParamSpec("P") # capture the function's parameters
|
|
43
48
|
R = TypeVar("R") # return type
|
|
44
49
|
|
|
50
|
+
AsyncFunctionType: TypeAlias = Callable[P, Coroutine[Any, Any, R]]
|
|
51
|
+
SyncFunctionType: TypeAlias = Callable[P, R]
|
|
52
|
+
FunctionTypes: TypeAlias = AsyncFunctionType | SyncFunctionType
|
|
53
|
+
F = TypeVar("F", bound=FunctionTypes)
|
|
54
|
+
|
|
45
55
|
|
|
46
56
|
@dataclass(kw_only=True)
|
|
47
|
-
class TaskTemplate(Generic[P, R]):
|
|
57
|
+
class TaskTemplate(Generic[P, R, F]):
|
|
48
58
|
"""
|
|
49
59
|
Task template is a template for a task that can be executed. It defines various parameters for the task, which
|
|
50
60
|
can be defined statically at the time of task definition or dynamically at the time of task invocation using
|
|
@@ -64,55 +74,60 @@ class TaskTemplate(Generic[P, R]):
|
|
|
64
74
|
version with flyte installed
|
|
65
75
|
:param resources: Optional The resources to use for the task
|
|
66
76
|
:param cache: Optional The cache policy for the task, defaults to auto, which will cache the results of the task.
|
|
67
|
-
:param
|
|
68
|
-
will not be scheduled on
|
|
77
|
+
:param interruptible: Optional The interruptible policy for the task, defaults to False, which means the task
|
|
78
|
+
will not be scheduled on interruptible nodes. If set to True, the task will be scheduled on interruptible nodes,
|
|
69
79
|
and the code should handle interruptions and resumptions.
|
|
70
80
|
:param retries: Optional The number of retries for the task, defaults to 0, which means no retries.
|
|
71
81
|
:param reusable: Optional The reusability policy for the task, defaults to None, which means the task environment
|
|
72
82
|
will not be reused across task invocations.
|
|
73
83
|
:param docs: Optional The documentation for the task, if not provided the function docstring will be used.
|
|
74
|
-
:param
|
|
84
|
+
:param env_vars: Optional The environment variables to set for the task.
|
|
75
85
|
:param secrets: Optional The secrets that will be injected into the task at runtime.
|
|
76
86
|
:param timeout: Optional The timeout for the task.
|
|
87
|
+
:param max_inline_io_bytes: Maximum allowed size (in bytes) for all inputs and outputs passed directly to the task
|
|
88
|
+
(e.g., primitives, strings, dicts). Does not apply to files, directories, or dataframes.
|
|
89
|
+
:param pod_template: Optional The pod template to use for the task.
|
|
90
|
+
:param report: Optional Whether to report the task execution to the Flyte console, defaults to False.
|
|
91
|
+
:param queue: Optional The queue to use for the task. If not provided, the default queue will be used.
|
|
92
|
+
:param debuggable: Optional Whether the task supports debugging capabilities, defaults to False.
|
|
77
93
|
"""
|
|
78
94
|
|
|
79
95
|
name: str
|
|
80
96
|
interface: NativeInterface
|
|
97
|
+
short_name: str = ""
|
|
81
98
|
task_type: str = "python"
|
|
82
99
|
task_type_version: int = 0
|
|
83
100
|
image: Union[str, Image, Literal["auto"]] = "auto"
|
|
84
101
|
resources: Optional[Resources] = None
|
|
85
|
-
cache: CacheRequest = "
|
|
86
|
-
|
|
102
|
+
cache: CacheRequest = "disable"
|
|
103
|
+
interruptible: bool = False
|
|
87
104
|
retries: Union[int, RetryStrategy] = 0
|
|
88
|
-
reusable: Union[ReusePolicy,
|
|
105
|
+
reusable: Union[ReusePolicy, None] = None
|
|
89
106
|
docs: Optional[Documentation] = None
|
|
90
|
-
|
|
107
|
+
env_vars: Optional[Dict[str, str]] = None
|
|
91
108
|
secrets: Optional[SecretRequest] = None
|
|
92
109
|
timeout: Optional[TimeoutType] = None
|
|
93
|
-
|
|
94
|
-
pod_template: Optional[Union[str, V1PodTemplate]] = None
|
|
110
|
+
pod_template: Optional[Union[str, PodTemplate]] = None
|
|
95
111
|
report: bool = False
|
|
112
|
+
queue: Optional[str] = None
|
|
113
|
+
debuggable: bool = False
|
|
96
114
|
|
|
97
115
|
parent_env: Optional[weakref.ReferenceType[TaskEnvironment]] = None
|
|
98
|
-
|
|
116
|
+
parent_env_name: Optional[str] = None
|
|
99
117
|
ref: bool = field(default=False, init=False, repr=False, compare=False)
|
|
118
|
+
max_inline_io_bytes: int = MAX_INLINE_IO_BYTES
|
|
119
|
+
triggers: Tuple[Trigger, ...] = field(default_factory=tuple)
|
|
120
|
+
links: Tuple[Link, ...] = field(default_factory=tuple)
|
|
100
121
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if self.pod_template is not None and not isinstance(self.pod_template, str):
|
|
104
|
-
try:
|
|
105
|
-
from kubernetes.client import V1PodTemplate # noqa: F401
|
|
106
|
-
except ImportError as e:
|
|
107
|
-
raise ImportError(
|
|
108
|
-
"kubernetes is not installed, please install kubernetes package to use pod_template"
|
|
109
|
-
) from e
|
|
122
|
+
# Only used in python 3.10 and 3.11, where we cannot use markcoroutinefunction
|
|
123
|
+
_call_as_synchronous: bool = False
|
|
110
124
|
|
|
125
|
+
def __post_init__(self):
|
|
111
126
|
# Auto set the image based on the image request
|
|
112
127
|
if self.image == "auto":
|
|
113
|
-
self.image = Image.
|
|
128
|
+
self.image = Image.from_debian_base()
|
|
114
129
|
elif isinstance(self.image, str):
|
|
115
|
-
self.image = Image.
|
|
130
|
+
self.image = Image.from_base(str(self.image))
|
|
116
131
|
|
|
117
132
|
# Auto set cache based on the cache request
|
|
118
133
|
if isinstance(self.cache, str):
|
|
@@ -128,6 +143,10 @@ class TaskTemplate(Generic[P, R]):
|
|
|
128
143
|
if isinstance(self.retries, int):
|
|
129
144
|
self.retries = RetryStrategy(count=self.retries)
|
|
130
145
|
|
|
146
|
+
if self.short_name == "":
|
|
147
|
+
# If short_name is not set, use the name of the task
|
|
148
|
+
self.short_name = self.name
|
|
149
|
+
|
|
131
150
|
def __getstate__(self):
|
|
132
151
|
"""
|
|
133
152
|
This method is called when the object is pickled. We need to remove the parent_env reference
|
|
@@ -145,6 +164,10 @@ class TaskTemplate(Generic[P, R]):
|
|
|
145
164
|
self.__dict__.update(state)
|
|
146
165
|
self.parent_env = None
|
|
147
166
|
|
|
167
|
+
@property
|
|
168
|
+
def source_file(self) -> Optional[str]:
|
|
169
|
+
return None
|
|
170
|
+
|
|
148
171
|
async def pre(self, *args, **kwargs) -> Dict[str, Any]:
|
|
149
172
|
"""
|
|
150
173
|
This is the preexecute function that will be
|
|
@@ -208,13 +231,78 @@ class TaskTemplate(Generic[P, R]):
|
|
|
208
231
|
def native_interface(self) -> NativeInterface:
|
|
209
232
|
return self.interface
|
|
210
233
|
|
|
211
|
-
|
|
234
|
+
@overload
|
|
235
|
+
async def aio(self: TaskTemplate[P, R, SyncFunctionType], *args: P.args, **kwargs: P.kwargs) -> R: ...
|
|
236
|
+
|
|
237
|
+
@overload
|
|
238
|
+
async def aio(
|
|
239
|
+
self: TaskTemplate[P, R, AsyncFunctionType], *args: P.args, **kwargs: P.kwargs
|
|
240
|
+
) -> Coroutine[Any, Any, R]: ...
|
|
241
|
+
|
|
242
|
+
async def aio(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
|
|
243
|
+
"""
|
|
244
|
+
The aio function allows executing "sync" tasks, in an async context. This helps with migrating v1 defined sync
|
|
245
|
+
tasks to be used within an asyncio parent task.
|
|
246
|
+
This function will also re-raise exceptions from the underlying task.
|
|
247
|
+
|
|
248
|
+
Example:
|
|
249
|
+
```python
|
|
250
|
+
@env.task
|
|
251
|
+
def my_legacy_task(x: int) -> int:
|
|
252
|
+
return x
|
|
253
|
+
|
|
254
|
+
@env.task
|
|
255
|
+
async def my_new_parent_task(n: int) -> List[int]:
|
|
256
|
+
collect = []
|
|
257
|
+
for x in range(n):
|
|
258
|
+
collect.append(my_legacy_task.aio(x))
|
|
259
|
+
return asyncio.gather(*collect)
|
|
260
|
+
```
|
|
261
|
+
:param args:
|
|
262
|
+
:param kwargs:
|
|
263
|
+
:return:
|
|
264
|
+
"""
|
|
265
|
+
ctx = internal_ctx()
|
|
266
|
+
if ctx.is_task_context():
|
|
267
|
+
from ._internal.controllers import get_controller
|
|
268
|
+
|
|
269
|
+
# If we are in a task context, that implies we are executing a Run.
|
|
270
|
+
# In this scenario, we should submit the task to the controller.
|
|
271
|
+
controller = get_controller()
|
|
272
|
+
if controller:
|
|
273
|
+
if self._call_as_synchronous:
|
|
274
|
+
fut = controller.submit_sync(self, *args, **kwargs)
|
|
275
|
+
asyncio_future = asyncio.wrap_future(fut) # Wrap the future to make it awaitable
|
|
276
|
+
return await asyncio_future
|
|
277
|
+
else:
|
|
278
|
+
return await controller.submit(self, *args, **kwargs)
|
|
279
|
+
else:
|
|
280
|
+
raise RuntimeSystemError("BadContext", "Controller is not initialized.")
|
|
281
|
+
else:
|
|
282
|
+
from flyte._logging import logger
|
|
283
|
+
|
|
284
|
+
logger.warning(f"Task {self.name} running aio outside of a task context.")
|
|
285
|
+
# Local execute, just stay out of the way, but because .aio is used, we want to return an awaitable,
|
|
286
|
+
# even for synchronous tasks. This is to support migration.
|
|
287
|
+
return self.forward(*args, **kwargs)
|
|
288
|
+
|
|
289
|
+
@overload
|
|
290
|
+
def __call__(self: TaskTemplate[P, R, SyncFunctionType], *args: P.args, **kwargs: P.kwargs) -> R: ...
|
|
291
|
+
|
|
292
|
+
@overload
|
|
293
|
+
def __call__(
|
|
294
|
+
self: TaskTemplate[P, R, AsyncFunctionType], *args: P.args, **kwargs: P.kwargs
|
|
295
|
+
) -> Coroutine[Any, Any, R]: ...
|
|
296
|
+
|
|
297
|
+
def __call__(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
|
|
212
298
|
"""
|
|
213
299
|
This is the entrypoint for an async function task at runtime. It will be called during an execution.
|
|
214
300
|
Please do not override this method, if you simply want to modify the execution behavior, override the
|
|
215
301
|
execute method.
|
|
216
302
|
|
|
217
|
-
|
|
303
|
+
This needs to be overridable to maybe be async.
|
|
304
|
+
The returned thing from here needs to be an awaitable if the underlying task is async, and a regular object
|
|
305
|
+
if the task is not.
|
|
218
306
|
"""
|
|
219
307
|
try:
|
|
220
308
|
ctx = internal_ctx()
|
|
@@ -224,10 +312,19 @@ class TaskTemplate(Generic[P, R]):
|
|
|
224
312
|
# We will also check if we are not initialized, It is not expected to be not initialized
|
|
225
313
|
from ._internal.controllers import get_controller
|
|
226
314
|
|
|
227
|
-
controller =
|
|
228
|
-
if controller:
|
|
229
|
-
|
|
230
|
-
|
|
315
|
+
controller = get_controller()
|
|
316
|
+
if not controller:
|
|
317
|
+
raise RuntimeSystemError("BadContext", "Controller is not initialized.")
|
|
318
|
+
|
|
319
|
+
if self._call_as_synchronous:
|
|
320
|
+
fut = controller.submit_sync(self, *args, **kwargs)
|
|
321
|
+
x = fut.result(None)
|
|
322
|
+
return x
|
|
323
|
+
else:
|
|
324
|
+
return controller.submit(self, *args, **kwargs)
|
|
325
|
+
else:
|
|
326
|
+
# If not in task context, purely function run, stay out of the way
|
|
327
|
+
return self.forward(*args, **kwargs)
|
|
231
328
|
except RuntimeSystemError:
|
|
232
329
|
raise
|
|
233
330
|
except RuntimeUserError:
|
|
@@ -235,33 +332,93 @@ class TaskTemplate(Generic[P, R]):
|
|
|
235
332
|
except Exception as e:
|
|
236
333
|
raise RuntimeUserError(type(e).__name__, str(e)) from e
|
|
237
334
|
|
|
335
|
+
def forward(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
|
|
336
|
+
"""
|
|
337
|
+
Think of this as a local execute method for your task. This function will be invoked by the __call__ method
|
|
338
|
+
when not in a Flyte task execution context. See the implementation below for an example.
|
|
339
|
+
|
|
340
|
+
:param args:
|
|
341
|
+
:param kwargs:
|
|
342
|
+
:return:
|
|
343
|
+
"""
|
|
344
|
+
raise NotImplementedError
|
|
345
|
+
|
|
238
346
|
def override(
|
|
239
347
|
self,
|
|
240
348
|
*,
|
|
241
|
-
|
|
242
|
-
ref: Optional[bool] = None,
|
|
349
|
+
short_name: Optional[str] = None,
|
|
243
350
|
resources: Optional[Resources] = None,
|
|
244
|
-
cache: CacheRequest =
|
|
351
|
+
cache: Optional[CacheRequest] = None,
|
|
245
352
|
retries: Union[int, RetryStrategy] = 0,
|
|
246
353
|
timeout: Optional[TimeoutType] = None,
|
|
247
|
-
reusable: Union[ReusePolicy, Literal["
|
|
248
|
-
|
|
354
|
+
reusable: Union[ReusePolicy, Literal["off"], None] = None,
|
|
355
|
+
env_vars: Optional[Dict[str, str]] = None,
|
|
249
356
|
secrets: Optional[SecretRequest] = None,
|
|
357
|
+
max_inline_io_bytes: int | None = None,
|
|
358
|
+
pod_template: Optional[Union[str, PodTemplate]] = None,
|
|
359
|
+
queue: Optional[str] = None,
|
|
360
|
+
interruptible: Optional[bool] = None,
|
|
361
|
+
links: Tuple[Link, ...] = (),
|
|
250
362
|
**kwargs: Any,
|
|
251
363
|
) -> TaskTemplate:
|
|
252
364
|
"""
|
|
253
365
|
Override various parameters of the task template. This allows for dynamic configuration of the task
|
|
254
366
|
when it is called, such as changing the image, resources, cache policy, etc.
|
|
367
|
+
|
|
368
|
+
:param short_name: Optional override for the short name of the task.
|
|
369
|
+
:param resources: Optional override for the resources to use for the task.
|
|
370
|
+
:param cache: Optional override for the cache policy for the task.
|
|
371
|
+
:param retries: Optional override for the number of retries for the task.
|
|
372
|
+
:param timeout: Optional override for the timeout for the task.
|
|
373
|
+
:param reusable: Optional override for the reusability policy for the task.
|
|
374
|
+
:param env_vars: Optional override for the environment variables to set for the task.
|
|
375
|
+
:param secrets: Optional override for the secrets that will be injected into the task at runtime.
|
|
376
|
+
:param max_inline_io_bytes: Optional override for the maximum allowed size (in bytes) for all inputs and outputs
|
|
377
|
+
passed directly to the task.
|
|
378
|
+
:param pod_template: Optional override for the pod template to use for the task.
|
|
379
|
+
:param queue: Optional override for the queue to use for the task.
|
|
380
|
+
:param interruptible: Optional override for the interruptible policy for the task.
|
|
381
|
+
:param links: Optional override for the Links associated with the task.
|
|
382
|
+
:param kwargs: Additional keyword arguments for further overrides. Some fields like name, image, docs,
|
|
383
|
+
and interface cannot be overridden.
|
|
384
|
+
|
|
385
|
+
:return: A new TaskTemplate instance with the overridden parameters.
|
|
255
386
|
"""
|
|
256
|
-
resources = resources or self.resources
|
|
257
387
|
cache = cache or self.cache
|
|
258
388
|
retries = retries or self.retries
|
|
259
389
|
timeout = timeout or self.timeout
|
|
390
|
+
max_inline_io_bytes = max_inline_io_bytes or self.max_inline_io_bytes
|
|
391
|
+
|
|
260
392
|
reusable = reusable or self.reusable
|
|
261
|
-
|
|
393
|
+
if reusable == "off":
|
|
394
|
+
reusable = None
|
|
395
|
+
|
|
396
|
+
if reusable is not None:
|
|
397
|
+
if resources is not None:
|
|
398
|
+
raise ValueError(
|
|
399
|
+
"Cannot override resources when reusable is set."
|
|
400
|
+
" Reusable tasks will use the parent env's resources. You can disable reusability and"
|
|
401
|
+
" override resources if needed. (set reusable='off')"
|
|
402
|
+
)
|
|
403
|
+
if env_vars is not None:
|
|
404
|
+
raise ValueError(
|
|
405
|
+
"Cannot override env when reusable is set."
|
|
406
|
+
" Reusable tasks will use the parent env's env. You can disable reusability and "
|
|
407
|
+
"override env if needed. (set reusable='off')"
|
|
408
|
+
)
|
|
409
|
+
if secrets is not None:
|
|
410
|
+
raise ValueError(
|
|
411
|
+
"Cannot override secrets when reusable is set."
|
|
412
|
+
" Reusable tasks will use the parent env's secrets. You can disable reusability and "
|
|
413
|
+
"override secrets if needed. (set reusable='off')"
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
resources = resources or self.resources
|
|
417
|
+
env_vars = env_vars or self.env_vars
|
|
262
418
|
secrets = secrets or self.secrets
|
|
263
|
-
|
|
264
|
-
|
|
419
|
+
|
|
420
|
+
interruptible = interruptible if interruptible is not None else self.interruptible
|
|
421
|
+
|
|
265
422
|
for k, v in kwargs.items():
|
|
266
423
|
if k == "name":
|
|
267
424
|
raise ValueError("Name cannot be overridden")
|
|
@@ -271,45 +428,72 @@ class TaskTemplate(Generic[P, R]):
|
|
|
271
428
|
raise ValueError("Docs cannot be overridden")
|
|
272
429
|
if k == "interface":
|
|
273
430
|
raise ValueError("Interface cannot be overridden")
|
|
431
|
+
|
|
274
432
|
return replace(
|
|
275
433
|
self,
|
|
434
|
+
short_name=short_name or self.short_name,
|
|
276
435
|
resources=resources,
|
|
277
436
|
cache=cache,
|
|
278
437
|
retries=retries,
|
|
279
438
|
timeout=timeout,
|
|
280
|
-
reusable=reusable,
|
|
281
|
-
|
|
439
|
+
reusable=cast(Optional[ReusePolicy], reusable),
|
|
440
|
+
env_vars=env_vars,
|
|
282
441
|
secrets=secrets,
|
|
442
|
+
max_inline_io_bytes=max_inline_io_bytes,
|
|
443
|
+
pod_template=pod_template,
|
|
444
|
+
interruptible=interruptible,
|
|
445
|
+
queue=queue or self.queue,
|
|
446
|
+
links=links or self.links,
|
|
447
|
+
**kwargs,
|
|
283
448
|
)
|
|
284
449
|
|
|
285
450
|
|
|
286
451
|
@dataclass(kw_only=True)
|
|
287
|
-
class AsyncFunctionTaskTemplate(TaskTemplate[P, R]):
|
|
452
|
+
class AsyncFunctionTaskTemplate(TaskTemplate[P, R, F]):
|
|
288
453
|
"""
|
|
289
454
|
A task template that wraps an asynchronous functions. This is automatically created when an asynchronous function
|
|
290
455
|
is decorated with the task decorator.
|
|
291
456
|
"""
|
|
292
457
|
|
|
293
|
-
func:
|
|
458
|
+
func: F
|
|
459
|
+
plugin_config: Optional[Any] = None # This is used to pass plugin specific configuration
|
|
460
|
+
debuggable: bool = True
|
|
294
461
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
462
|
+
def __post_init__(self):
|
|
463
|
+
super().__post_init__()
|
|
464
|
+
if not iscoroutinefunction(self.func):
|
|
465
|
+
self._call_as_synchronous = True
|
|
466
|
+
|
|
467
|
+
@property
|
|
468
|
+
def source_file(self) -> Optional[str]:
|
|
469
|
+
"""
|
|
470
|
+
Returns the source file of the function, if available. This is useful for debugging and tracing.
|
|
471
|
+
"""
|
|
472
|
+
if hasattr(self.func, "__code__") and self.func.__code__:
|
|
473
|
+
return self.func.__code__.co_filename
|
|
474
|
+
return None
|
|
475
|
+
|
|
476
|
+
def forward(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
|
|
477
|
+
# In local execution, we want to just call the function. Note we're not awaiting anything here.
|
|
478
|
+
# If the function was a coroutine function, the coroutine is returned and the await that the caller has
|
|
479
|
+
# in front of the task invocation will handle the awaiting.
|
|
480
|
+
return self.func(*args, **kwargs)
|
|
298
481
|
|
|
299
482
|
async def execute(self, *args: P.args, **kwargs: P.kwargs) -> R:
|
|
300
483
|
"""
|
|
301
484
|
This is the execute method that will be called when the task is invoked. It will call the actual function.
|
|
302
485
|
# TODO We may need to keep this as the bare func execute, and need a pre and post execute some other func.
|
|
303
486
|
"""
|
|
487
|
+
|
|
304
488
|
ctx = internal_ctx()
|
|
489
|
+
assert ctx.data.task_context is not None, "Function should have already returned if not in a task context"
|
|
305
490
|
ctx_data = await self.pre(*args, **kwargs)
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
491
|
+
tctx = ctx.data.task_context.replace(data=ctx_data)
|
|
492
|
+
with ctx.replace_task_context(tctx):
|
|
493
|
+
if iscoroutinefunction(self.func):
|
|
309
494
|
v = await self.func(*args, **kwargs)
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
v = await self.func(*args, **kwargs)
|
|
495
|
+
else:
|
|
496
|
+
v = self.func(*args, **kwargs)
|
|
313
497
|
await self.post(v)
|
|
314
498
|
return v
|
|
315
499
|
|
|
@@ -352,6 +536,11 @@ class AsyncFunctionTaskTemplate(TaskTemplate[P, R]):
|
|
|
352
536
|
|
|
353
537
|
from flyte._internal.resolvers.default import DefaultTaskResolver
|
|
354
538
|
|
|
539
|
+
if not serialize_context.root_dir:
|
|
540
|
+
raise RuntimeSystemError(
|
|
541
|
+
"SerializationError",
|
|
542
|
+
"Root dir is required for default task resolver when no code bundle is provided.",
|
|
543
|
+
)
|
|
355
544
|
_task_resolver = DefaultTaskResolver()
|
|
356
545
|
args = [
|
|
357
546
|
*args,
|