truefoundry 0.4.4rc8__tar.gz → 0.4.4rc10__tar.gz
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.
Potentially problematic release.
This version of truefoundry might be problematic. Click here for more details.
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/PKG-INFO +1 -1
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/pyproject.toml +2 -1
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/constants.py +7 -12
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/tfy_signed_url_client.py +84 -86
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/tfy_signed_url_fs.py +13 -7
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +433 -415
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/__init__.py +24 -3
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/experiments_api.py +0 -137
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/mlfoundry_artifacts_api.py +2 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/__init__.py +24 -3
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_dto.py +9 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_version_dto.py +26 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/artifact_version_serialization_format.py +34 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_artifact_version_response_dto.py +8 -2
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_run_request_dto.py +1 -10
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/dataset_dto.py +9 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/experiment_dto.py +14 -3
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/external_model_source.py +79 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/finalize_artifact_version_request_dto.py +11 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/framework.py +154 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/library_name.py +35 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_dto.py +9 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_version_dto.py +26 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/model_version_manifest.py +119 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_info_dto.py +10 -1
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/source.py +177 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/subject.py +79 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/subject_type.py +34 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/tensorflow_framework.py +74 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/transformers_framework.py +90 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/truefoundry_model_source.py +79 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_model_version_request_dto.py +11 -0
- truefoundry-0.4.4rc10/truefoundry/ml/autogen/client/models/upload_model_source.py +74 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client_README.md +12 -2
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/entities/artifacts.py +236 -4
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/artifact.py +10 -6
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/dataset.py +13 -5
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/general_artifact.py +3 -1
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/model.py +18 -30
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/utils.py +42 -25
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/image/image.py +2 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/plot.py +2 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/mlfoundry_api.py +0 -1
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/__init__.py +8 -3
- truefoundry-0.4.4rc8/truefoundry/ml/autogen/client/models/list_seed_experiments_response_dto.py +0 -81
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/README.md +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/agents/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/agents/base.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/agents/developer.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/agents/tester.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/cli.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/constants.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/exception.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/logger.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/ask.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/base.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/commit.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/docker_build.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/docker_run.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/list_files.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/read_file.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/send_request.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/tools/write_file.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/utils/client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/utils/diff.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/cli/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/cli/__main__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/auth_service_client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/credential_file_manager.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/credential_provider.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/entities.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/exceptions.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/request_utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/servicefoundry_client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/common/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/auto_gen/models.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/constants.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/docker_service.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/builder/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/cli.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/build_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/build_logs_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/create_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/delete_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/deploy_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/get_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/list_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/login_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/redeploy_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/config.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/console.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/const.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/display_util.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/cli/util.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/core/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/core/login.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/core/logout.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/__main__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/app.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/build.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/remote/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/remote/context.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/remote/method.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/remote/remote.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/route.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/service.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/function_service/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/io/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/io/output_callback.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/io/rich_output_callback.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/json_util.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/auth/servicefoundry_session.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/clients/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/const.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/dao/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/dao/application.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/dao/apply.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/dao/version.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/dao/workspace.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/exceptions.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/logs_utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/messages.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/model/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/model/entity.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/session.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/util.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/lib/win32.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/python_deploy_codegen.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/deploy.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/models.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/patched_models.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/deploy/v2/lib/source.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/deprecated.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/truefoundry_chat.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/truefoundry_embeddings.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/truefoundry_llm.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/langchain/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/logger.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/artifact/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/auth_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/deprecated_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/health_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/metrics_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/python_deployment_config_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/run_artifacts_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api/runs_api.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api_client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/api_response.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/configuration.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/exceptions.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/add_custom_metrics_to_model_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/add_features_to_model_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/agent.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/agent_app.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/agent_open_api_tool.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/agent_with_fqn.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_type.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_version_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/artifact_version_status.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/assistant_message.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/blob_storage_reference.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/body_get_search_runs_get.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/chat_prompt.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/chat_prompt_messages_inner.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/columns_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/content.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/content1.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/content2.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/content2_any_of_inner.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_artifact_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_artifact_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_experiment_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_experiment_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_model_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/create_run_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/dataset_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_model_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_run_request.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/delete_tag_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/experiment_id_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/experiment_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/experiment_tag_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/feature_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/feature_value_type.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/file_info_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_experiment_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_latest_run_log_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_metric_history_response.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/get_tenant_id_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/http_validation_error.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/image_content_part.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/image_url.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/internal_metadata.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/latest_run_log_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_artifacts_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_artifacts_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_colums_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_datasets_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_datasets_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_experiments_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_metric_history_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_metric_history_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_model_version_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_model_versions_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_models_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_models_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_run_artifacts_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/list_run_logs_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/log_batch_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/log_metric_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/log_param_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/method.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/metric_collection_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/metric_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/mime_type.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_configuration.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_schema_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/model_version_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/multi_part_upload_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/multi_part_upload_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/multi_part_upload_storage_provider.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/openapi_spec.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/param_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/parameters.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/prediction_type.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/resolve_agent_app_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/restore_run_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_data_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_log_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_log_input_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/run_tag_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/search_runs_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/search_runs_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/set_experiment_tag_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/set_tag_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/signed_url_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/stop.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/store_run_logs_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/system_message.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/text.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/text_content_part.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_dataset_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_experiment_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_run_request_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/update_run_response_dto.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/url.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/user_message.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/validation_error.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/models/validation_error_loc_inner.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/autogen/client/rest.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/cli/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/cli/cli.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/cli/commands/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/cli/commands/download.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/clients/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/clients/entities.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/clients/servicefoundry_client.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/clients/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/constants.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/entities.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/enums.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/exceptions.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/git_info.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/internal_namespace.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/artifacts/model_extras.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/image/__init__.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/image/constants.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/image/types.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/pydantic_base.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/log_types/utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/logger.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/mlfoundry_run.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/run_utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/session.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/ml/validation_utils.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/pydantic_v1.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/version.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/container_task.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/example/deploy.sh +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/example/hello_world_package/workflow.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/example/package/test_workflow.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/example/truefoundry.yaml +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/example/workflow.yaml +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/map_task.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/python_task.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/task.py +0 -0
- {truefoundry-0.4.4rc8 → truefoundry-0.4.4rc10}/truefoundry/workflow/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "truefoundry"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.4rc10"
|
|
4
4
|
description = "Truefoundry CLI"
|
|
5
5
|
authors = ["Abhishek Choudhary <abhishek@truefoundry.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -55,6 +55,7 @@ pandas = [
|
|
|
55
55
|
{ version = ">=1.4.0,<3.0.0", python = ">=3.10" },
|
|
56
56
|
]
|
|
57
57
|
|
|
58
|
+
|
|
58
59
|
[tool.poetry.extras]
|
|
59
60
|
workflow = ["flytekit"]
|
|
60
61
|
|
|
@@ -13,12 +13,6 @@ TFY_API_KEY_ENV_KEY = "TFY_API_KEY"
|
|
|
13
13
|
|
|
14
14
|
TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_HOST"
|
|
15
15
|
TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN"
|
|
16
|
-
TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL_ENV_KEY = (
|
|
17
|
-
"TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL"
|
|
18
|
-
)
|
|
19
|
-
TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT_ENV_KEY = (
|
|
20
|
-
"TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT"
|
|
21
|
-
)
|
|
22
16
|
|
|
23
17
|
|
|
24
18
|
class TrueFoundrySdkEnv(BaseSettings):
|
|
@@ -26,18 +20,19 @@ class TrueFoundrySdkEnv(BaseSettings):
|
|
|
26
20
|
# Never expect the user to set these values
|
|
27
21
|
TFY_HOST: Optional[str] = Field(default=None, env=TFY_HOST_ENV_KEY)
|
|
28
22
|
TFY_API_KEY: Optional[SecretStr] = Field(default=None, env=TFY_API_KEY_ENV_KEY)
|
|
23
|
+
|
|
24
|
+
# Internal Signed URL Server
|
|
29
25
|
TFY_INTERNAL_SIGNED_URL_SERVER_HOST: Optional[str] = Field(
|
|
30
26
|
default=None, env=TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY
|
|
31
27
|
)
|
|
32
28
|
TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN: Optional[str] = Field(
|
|
33
29
|
default=None, env=TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY
|
|
34
30
|
)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
) # 5 seconds
|
|
31
|
+
TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT: int = 5 # default: 5 seconds
|
|
32
|
+
TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL: int = 3600 # default: 1 hour
|
|
33
|
+
TFY_INTERNAL_SIGNED_URL_REQUEST_TIMEOUT: int = 3600 # default: 1 hour
|
|
34
|
+
|
|
35
|
+
# Artifacts
|
|
41
36
|
TFY_ARTIFACTS_DOWNLOAD_CHUNK_SIZE_BYTES: int = 100 * 1000 * 1000
|
|
42
37
|
TFY_ARTIFACTS_DOWNLOAD_MAX_WORKERS: int = max(min(32, (os.cpu_count() or 2) * 2), 4)
|
|
43
38
|
TFY_ARTIFACTS_UPLOAD_MAX_WORKERS: int = max(min(32, (os.cpu_count() or 2) * 2), 4)
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
# file: client.py
|
|
2
2
|
from enum import Enum
|
|
3
|
-
from typing import Any, Dict, List, Optional
|
|
3
|
+
from typing import Any, Dict, List, Optional, Union
|
|
4
4
|
from urllib.parse import urlencode, urljoin
|
|
5
5
|
|
|
6
6
|
from requests.exceptions import RequestException
|
|
7
7
|
|
|
8
|
-
from truefoundry.common.constants import
|
|
8
|
+
from truefoundry.common.constants import (
|
|
9
|
+
ENV_VARS,
|
|
10
|
+
TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY,
|
|
11
|
+
TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY,
|
|
12
|
+
)
|
|
9
13
|
from truefoundry.common.request_utils import requests_retry_session
|
|
10
14
|
from truefoundry.common.utils import log_time
|
|
15
|
+
from truefoundry.logger import logger
|
|
11
16
|
from truefoundry.pydantic_v1 import BaseModel, Field
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
# TODO: Move these constants to the constants module
|
|
15
|
-
REQUEST_TIMEOUT = 3600
|
|
16
|
-
|
|
18
|
+
LOG_PREFIX = "[tfy][fs]"
|
|
17
19
|
DEFAULT_TTL = ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL
|
|
18
20
|
MAX_TIMEOUT = ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT
|
|
21
|
+
REQUEST_TIMEOUT = ENV_VARS.TFY_INTERNAL_SIGNED_URL_REQUEST_TIMEOUT
|
|
19
22
|
|
|
20
23
|
|
|
21
24
|
class SignedURLAPIResponseDto(BaseModel):
|
|
@@ -34,9 +37,9 @@ class SignedURLExistsAPIResponseDto(BaseModel):
|
|
|
34
37
|
|
|
35
38
|
class FileInfo(BaseModel):
|
|
36
39
|
path: str
|
|
37
|
-
|
|
40
|
+
is_directory: bool = Field(..., alias="isDirectory")
|
|
38
41
|
bytes: Optional[int] = None
|
|
39
|
-
|
|
42
|
+
signed_url: Optional[str] = None
|
|
40
43
|
|
|
41
44
|
|
|
42
45
|
class PagedList(BaseModel):
|
|
@@ -62,51 +65,46 @@ class SignedURLClient:
|
|
|
62
65
|
base_url: Optional[str] = None,
|
|
63
66
|
token: Optional[str] = None,
|
|
64
67
|
ttl: int = DEFAULT_TTL,
|
|
68
|
+
max_retries: int = 3,
|
|
69
|
+
retry_backoff_factor: float = 0.3,
|
|
65
70
|
):
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
Args:
|
|
70
|
-
base_url (str): Base URL of the signed URL server (optional).
|
|
71
|
-
token (str): Token for authentication (optional).
|
|
72
|
-
ttl (int): Default time-to-live for signed URLs in seconds.
|
|
73
|
-
"""
|
|
71
|
+
"""Initialize the SignedURLClient."""
|
|
72
|
+
# Set the base URL and token from the environment variables
|
|
74
73
|
self.base_url = base_url or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_HOST
|
|
75
74
|
self.token = token or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN
|
|
75
|
+
self.signed_url_server_headers = {
|
|
76
|
+
"Authorization": f"Bearer {self.token}",
|
|
77
|
+
"Content-Type": "application/json",
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if not self.base_url or not self.token:
|
|
81
|
+
raise ValueError(
|
|
82
|
+
f"Set `base_url` and `token` or define env vars "
|
|
83
|
+
f"{TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY} and "
|
|
84
|
+
f"{TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY}"
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Set the TTL, max retries, and backoff factor
|
|
76
88
|
self.ttl = ttl
|
|
77
|
-
self.max_retries: int =
|
|
78
|
-
self.retry_backoff_factor: float =
|
|
89
|
+
self.max_retries: int = max_retries
|
|
90
|
+
self.retry_backoff_factor: float = retry_backoff_factor
|
|
79
91
|
self.session = requests_retry_session(
|
|
80
92
|
retries=self.max_retries, backoff_factor=self.retry_backoff_factor
|
|
81
93
|
)
|
|
82
94
|
|
|
83
|
-
self.headers = {
|
|
84
|
-
"Authorization": f"Bearer {self.token}",
|
|
85
|
-
"Content-Type": "application/json",
|
|
86
|
-
}
|
|
87
|
-
|
|
88
95
|
@log_time
|
|
89
96
|
def _make_request(
|
|
90
|
-
self,
|
|
97
|
+
self,
|
|
98
|
+
endpoint: str,
|
|
99
|
+
method: str = "GET",
|
|
100
|
+
payload: Optional[Dict] = None,
|
|
101
|
+
headers: Optional[Dict] = None,
|
|
91
102
|
) -> Dict:
|
|
92
|
-
"""
|
|
93
|
-
Internal method to handle requests to the signed URL server.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
endpoint (str): The endpoint for the request.
|
|
97
|
-
method (str): HTTP method (GET, POST, etc.).
|
|
98
|
-
payload (Dict, optional): JSON payload for the request.
|
|
99
|
-
|
|
100
|
-
Returns:
|
|
101
|
-
Dict: JSON response from the server.
|
|
102
|
-
|
|
103
|
-
Raises:
|
|
104
|
-
RuntimeError: For network errors or invalid responses.
|
|
105
|
-
"""
|
|
103
|
+
"""Internal method to handle requests to the signed URL server."""
|
|
106
104
|
url = urljoin(self.base_url, endpoint)
|
|
107
105
|
try:
|
|
108
106
|
response = self.session.request(
|
|
109
|
-
method, url, headers=
|
|
107
|
+
method, url, headers=headers, json=payload, timeout=MAX_TIMEOUT
|
|
110
108
|
)
|
|
111
109
|
response.raise_for_status()
|
|
112
110
|
return response.json()
|
|
@@ -114,19 +112,30 @@ class SignedURLClient:
|
|
|
114
112
|
raise RuntimeError(f"Error during request to {url}: {e}") from e
|
|
115
113
|
|
|
116
114
|
def _make_server_api_call(
|
|
117
|
-
self,
|
|
115
|
+
self,
|
|
116
|
+
endpoint: SignedURLServerEndpoint,
|
|
117
|
+
params: Optional[Dict] = None,
|
|
118
|
+
headers: Optional[Dict] = None,
|
|
118
119
|
) -> Dict:
|
|
119
120
|
"""Get a signed URL for the specified operation and URI."""
|
|
120
121
|
query_string = urlencode(params or {})
|
|
121
122
|
endpoint_with_params = f"{endpoint.value}?{query_string}"
|
|
122
|
-
return self._make_request(
|
|
123
|
+
return self._make_request(
|
|
124
|
+
endpoint=endpoint_with_params, method="GET", payload=None, headers=headers
|
|
125
|
+
)
|
|
123
126
|
|
|
124
127
|
@log_time
|
|
125
128
|
def _upload_data(self, signed_url: str, data: Any) -> None:
|
|
126
|
-
"""
|
|
129
|
+
"""
|
|
130
|
+
Upload data to the specified storage path using a signed URL.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
signed_url: str: The signed URL to upload the data to.
|
|
134
|
+
data: Bytes or IO: The data to upload.
|
|
135
|
+
"""
|
|
127
136
|
try:
|
|
128
137
|
response = self.session.put(
|
|
129
|
-
signed_url,
|
|
138
|
+
url=signed_url,
|
|
130
139
|
headers={"Content-Type": "application/octet-stream"},
|
|
131
140
|
data=data,
|
|
132
141
|
timeout=REQUEST_TIMEOUT,
|
|
@@ -140,6 +149,7 @@ class SignedURLClient:
|
|
|
140
149
|
signed_object = self._make_server_api_call(
|
|
141
150
|
endpoint=SignedURLServerEndpoint.WRITE,
|
|
142
151
|
params={"uri": storage_uri, "expiryInSeconds": self.ttl},
|
|
152
|
+
headers=self.signed_url_server_headers,
|
|
143
153
|
)
|
|
144
154
|
pre_signed_object_dto = SignedURLAPIResponseDto.parse_obj(signed_object)
|
|
145
155
|
self._upload_data(pre_signed_object_dto.signed_url, data)
|
|
@@ -148,10 +158,11 @@ class SignedURLClient:
|
|
|
148
158
|
@log_time
|
|
149
159
|
def upload(self, file_path: str, storage_uri: str) -> str:
|
|
150
160
|
"""Upload a file to the specified storage path using a signed URL."""
|
|
151
|
-
|
|
161
|
+
logger.info(f"{LOG_PREFIX} Uploading {file_path} to {storage_uri}")
|
|
152
162
|
response = self._make_server_api_call(
|
|
153
163
|
endpoint=SignedURLServerEndpoint.WRITE,
|
|
154
164
|
params={"uri": storage_uri, "expiryInSeconds": self.ttl},
|
|
165
|
+
headers=self.signed_url_server_headers,
|
|
155
166
|
)
|
|
156
167
|
pre_signed_object_dto = SignedURLAPIResponseDto.parse_obj(response)
|
|
157
168
|
with open(file_path, "rb") as file:
|
|
@@ -162,62 +173,43 @@ class SignedURLClient:
|
|
|
162
173
|
def _download_file(
|
|
163
174
|
self, signed_url: str, local_path: Optional[str] = None
|
|
164
175
|
) -> Optional[bytes]:
|
|
165
|
-
"""Common method to download a file using a signed URL.
|
|
166
|
-
|
|
167
|
-
Args:
|
|
168
|
-
signed_url (str): The signed URL to download from.
|
|
169
|
-
local_path (Optional[str]): The local path to save the file. If None, the file will not be saved.
|
|
170
|
-
|
|
171
|
-
Returns:
|
|
172
|
-
Optional[bytes]: The content of the downloaded file if local_path is None; otherwise, None.
|
|
173
|
-
"""
|
|
176
|
+
"""Common method to download a file using a signed URL."""
|
|
174
177
|
try:
|
|
175
178
|
response = self.session.get(
|
|
176
|
-
signed_url,
|
|
179
|
+
signed_url,
|
|
180
|
+
stream=True,
|
|
181
|
+
headers={"Content-Type": "application/octet-stream"},
|
|
182
|
+
timeout=REQUEST_TIMEOUT,
|
|
177
183
|
)
|
|
178
184
|
response.raise_for_status()
|
|
179
185
|
if local_path:
|
|
180
186
|
with open(local_path, "wb") as file:
|
|
181
187
|
for chunk in response.iter_content(chunk_size=8192):
|
|
182
188
|
file.write(chunk)
|
|
183
|
-
return None
|
|
184
|
-
return response.content
|
|
185
|
-
|
|
189
|
+
return None
|
|
190
|
+
return response.content
|
|
186
191
|
except RequestException as e:
|
|
187
192
|
raise RuntimeError(f"Failed to download file from {signed_url}: {e}") from e
|
|
188
193
|
|
|
189
194
|
@log_time
|
|
190
195
|
def download(self, storage_uri: str, local_path: str) -> Optional[str]:
|
|
191
|
-
"""Download a file from the specified storage path to a local path using a signed URL.
|
|
192
|
-
|
|
193
|
-
Args:
|
|
194
|
-
storage_uri (str): The storage URI to download the file from.
|
|
195
|
-
local_path (str): The local path to save the downloaded file.
|
|
196
|
-
|
|
197
|
-
Returns:
|
|
198
|
-
Optional[str]: The local path if successful; None if the file is saved.
|
|
199
|
-
"""
|
|
200
|
-
print(f"Dowloading {storage_uri} to {local_path}")
|
|
196
|
+
"""Download a file from the specified storage path to a local path using a signed URL."""
|
|
197
|
+
logger.info(f"{LOG_PREFIX} Downloading {storage_uri} to {local_path}")
|
|
201
198
|
response = self._make_server_api_call(
|
|
202
199
|
endpoint=SignedURLServerEndpoint.READ,
|
|
203
200
|
params={"uri": storage_uri, "expiryInSeconds": self.ttl},
|
|
201
|
+
headers=self.signed_url_server_headers,
|
|
204
202
|
)
|
|
205
203
|
presigned_object = SignedURLAPIResponseDto.parse_obj(response)
|
|
206
204
|
self._download_file(presigned_object.signed_url, local_path)
|
|
207
205
|
return local_path
|
|
208
206
|
|
|
209
207
|
def download_to_bytes(self, storage_uri: str) -> bytes:
|
|
210
|
-
"""Download a file from the specified storage path and return it as bytes.
|
|
211
|
-
|
|
212
|
-
Args:
|
|
213
|
-
storage_uri (str): The storage URI to download the file from.
|
|
214
|
-
|
|
215
|
-
Returns:
|
|
216
|
-
bytes: The content of the downloaded file.
|
|
217
|
-
"""
|
|
208
|
+
"""Download a file from the specified storage path and return it as bytes."""
|
|
218
209
|
response = self._make_server_api_call(
|
|
219
210
|
endpoint=SignedURLServerEndpoint.READ,
|
|
220
211
|
params={"uri": storage_uri, "expiryInSeconds": self.ttl},
|
|
212
|
+
headers=self.signed_url_server_headers,
|
|
221
213
|
)
|
|
222
214
|
presigned_object = SignedURLAPIResponseDto.parse_obj(response)
|
|
223
215
|
return self._download_file(presigned_object.signed_url)
|
|
@@ -225,22 +217,29 @@ class SignedURLClient:
|
|
|
225
217
|
def exists(self, uri: str) -> bool:
|
|
226
218
|
"""Check if a file exists at the specified path."""
|
|
227
219
|
response = self._make_server_api_call(
|
|
228
|
-
endpoint=SignedURLServerEndpoint.EXISTS,
|
|
220
|
+
endpoint=SignedURLServerEndpoint.EXISTS,
|
|
221
|
+
params={"uri": uri},
|
|
222
|
+
headers=self.signed_url_server_headers,
|
|
229
223
|
)
|
|
230
|
-
|
|
231
|
-
return response_obj.exists
|
|
224
|
+
return SignedURLExistsAPIResponseDto.parse_obj(response).exists
|
|
232
225
|
|
|
233
226
|
def is_directory(self, uri: str) -> bool:
|
|
234
227
|
"""Check if the specified URI is a directory."""
|
|
235
228
|
response = self._make_server_api_call(
|
|
236
|
-
endpoint=SignedURLServerEndpoint.IS_DIRECTORY,
|
|
229
|
+
endpoint=SignedURLServerEndpoint.IS_DIRECTORY,
|
|
230
|
+
params={"path": uri},
|
|
231
|
+
headers=self.signed_url_server_headers,
|
|
237
232
|
)
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
233
|
+
is_directory = SignedURLIsDirectoryAPIResponseDto.parse_obj(
|
|
234
|
+
response
|
|
235
|
+
).is_directory
|
|
236
|
+
logger.info(f"{LOG_PREFIX} Path {uri} is a directory: {is_directory}")
|
|
237
|
+
return is_directory
|
|
241
238
|
|
|
242
239
|
@log_time
|
|
243
|
-
def list_files(
|
|
240
|
+
def list_files(
|
|
241
|
+
self, path: str, detail: bool = False, max_results: int = 1000
|
|
242
|
+
) -> Union[List[FileInfo], List[str]]:
|
|
244
243
|
"""List files in the specified directory."""
|
|
245
244
|
token = ""
|
|
246
245
|
items: List[FileInfo] = []
|
|
@@ -249,6 +248,7 @@ class SignedURLClient:
|
|
|
249
248
|
response = self._make_server_api_call(
|
|
250
249
|
endpoint=SignedURLServerEndpoint.LIST_FILES,
|
|
251
250
|
params={"path": path, "maxResults": max_results, "pageToken": token},
|
|
251
|
+
headers=self.signed_url_server_headers,
|
|
252
252
|
)
|
|
253
253
|
response_obj = PagedList.parse_obj(response)
|
|
254
254
|
items.extend(response_obj.items)
|
|
@@ -257,6 +257,4 @@ class SignedURLClient:
|
|
|
257
257
|
break
|
|
258
258
|
|
|
259
259
|
# Return the items or paths based on the detail flag
|
|
260
|
-
if detail
|
|
261
|
-
return items
|
|
262
|
-
return [item.path for item in items]
|
|
260
|
+
return items if detail else [item.path for item in items]
|
|
@@ -23,7 +23,7 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
23
23
|
|
|
24
24
|
@log_time
|
|
25
25
|
def exists(self, path, **kwargs):
|
|
26
|
-
"""
|
|
26
|
+
"""Check if a file exists at the given path."""
|
|
27
27
|
return self.client.exists(path)
|
|
28
28
|
|
|
29
29
|
@log_time
|
|
@@ -38,8 +38,8 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
38
38
|
):
|
|
39
39
|
"""Get file(s) to local"""
|
|
40
40
|
# TODO: Add support for ThreadPoolExecutor here
|
|
41
|
-
# TODO: Do a proper error handling here
|
|
42
41
|
# TODO: Add support for async download
|
|
42
|
+
# TODO: Do a proper error handling here
|
|
43
43
|
if self.isdir(rpath):
|
|
44
44
|
if not recursive:
|
|
45
45
|
raise ValueError(
|
|
@@ -52,7 +52,7 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
52
52
|
for file_info in files:
|
|
53
53
|
file_path = file_info.path.rstrip("/").rsplit("/")[-1]
|
|
54
54
|
|
|
55
|
-
is_directory = file_info.
|
|
55
|
+
is_directory = file_info.is_directory
|
|
56
56
|
# Construct the relative path for local download
|
|
57
57
|
relative_path = rpath.rstrip("/") + "/" + file_path
|
|
58
58
|
target_local_path = lpath.rstrip("/") + "/" + file_path
|
|
@@ -71,16 +71,20 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
71
71
|
**kwargs,
|
|
72
72
|
)
|
|
73
73
|
else:
|
|
74
|
-
# Download the file
|
|
75
74
|
self.client.download(
|
|
76
75
|
storage_uri=relative_path, local_path=target_local_path
|
|
77
76
|
)
|
|
78
77
|
|
|
79
78
|
else:
|
|
79
|
+
# Ensure the directory exists first
|
|
80
80
|
target_local_path = lpath
|
|
81
81
|
if target_local_path.endswith("/"):
|
|
82
|
-
|
|
83
|
-
target_local_path =
|
|
82
|
+
# If it ends with "/", it's a directory, so create the directory first
|
|
83
|
+
target_local_path = os.path.join(
|
|
84
|
+
target_local_path, rpath.rsplit("/", 1)[-1]
|
|
85
|
+
)
|
|
86
|
+
# Create the directory for the target file path (common for both cases)
|
|
87
|
+
Path(os.path.dirname(target_local_path)).mkdir(parents=True, exist_ok=True)
|
|
84
88
|
self.client.download(storage_uri=rpath, local_path=target_local_path)
|
|
85
89
|
|
|
86
90
|
@log_time
|
|
@@ -126,7 +130,8 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
126
130
|
)
|
|
127
131
|
return None
|
|
128
132
|
else:
|
|
129
|
-
|
|
133
|
+
if rpath.endswith("/"):
|
|
134
|
+
rpath = os.path.join(rpath, local_path.name)
|
|
130
135
|
return self.client.upload(file_path=lpath, storage_uri=rpath)
|
|
131
136
|
|
|
132
137
|
@log_time
|
|
@@ -189,6 +194,7 @@ class SignedURLFileSystem(AbstractFileSystem):
|
|
|
189
194
|
class SignedURLBufferedFile(AbstractBufferedFile):
|
|
190
195
|
"""
|
|
191
196
|
Buffered file implementation for Signed URL-based file system.
|
|
197
|
+
# TODO: Need to test this implementation
|
|
192
198
|
"""
|
|
193
199
|
|
|
194
200
|
def __init__(
|