datachain 0.30.7__tar.gz → 0.31.0__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 datachain might be problematic. Click here for more details.
- {datachain-0.30.7 → datachain-0.31.0}/PKG-INFO +1 -1
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/remote/studio.py +60 -17
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/studio.py +7 -8
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/PKG-INFO +1 -1
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_cli_studio.py +20 -16
- {datachain-0.30.7 → datachain-0.31.0}/.cruft.json +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.gitattributes +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/empty_issue.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/codecov.yaml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/dependabot.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/benchmarks.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/release.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/tests-studio.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/tests.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/update-template.yaml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.gitignore +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/.pre-commit-config.yaml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/CODE_OF_CONDUCT.rst +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/LICENSE +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/README.rst +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/assets/captioned_cartoons.png +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/assets/datachain-white.svg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/assets/datachain.svg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/login.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/logout.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/team.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/token.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/index.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/cancel.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/clusters.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/logs.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/ls.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/run.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/contributing.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/css/github-permalink-style.css +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/examples.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/db_migrations.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/delta.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/env.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/index.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/namespaces.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/processing.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/remotes.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/guide/retry.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/index.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/overrides/main.html +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/quick-start.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/arrowrow.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/bbox.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/file.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/imagefile.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/index.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/pose.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/segment.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/tarvfile.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/textfile.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/videofile.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/datachain.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/func.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/aggregate.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/array.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/conditional.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/numeric.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/path.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/random.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/string.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/window.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/index.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/toolkit.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/torch.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/references/udf.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/docs/tutorials.md +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/iptc_exif_xmp_lib.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/llava2_image_desc_lib.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/openimage-detect.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-bbox.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-pose.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-segment.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/common_sql_functions.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/json-csv-reader.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/nested_datamodel.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/torch-loader.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/parallel.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/simple.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/stateful.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/delta.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/retry.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/llm_and_nlp/claude-query.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/llm_and_nlp/hf-dataset-llm-eval.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/audio-to-text.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/clip_inference.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/hf_pipeline.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/openai_image_desc_lib.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/wds.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/wds_filtered.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/mkdocs.yml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/noxfile.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/pyproject.toml +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/setup.cfg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/__main__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/asyn.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cache.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/catalog.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/datasource.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/loader.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/datasets.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/du.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/index.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/ls.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/misc.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/query.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/show.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/job.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/studio.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/azure.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/fileslice.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/fsspec.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/gcs.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/hf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/local.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/s3.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/config.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/db_engine.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/job.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/metastore.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/schema.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/serializer.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/sqlite.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/warehouse.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/dataset.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/delta.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/diff/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/error.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/reference.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/aggregate.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/array.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/base.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/conditional.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/func.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/numeric.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/path.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/random.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/string.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/window.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/job.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/arrow.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/audio.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/clip.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/flatten.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/python_to_sql.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/sql_to_python.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/unflatten.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/values_to_tuples.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/data_model.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dataset_info.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/csv.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/database.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/datachain.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/datasets.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/hf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/json.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/listings.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/pandas.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/parquet.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/records.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/storage.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/values.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/file.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/hf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/image.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/listing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/listing_info.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/meta_formats.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/model_store.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/namespaces.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/projects.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/pytorch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/settings.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/signal_schema.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/tar.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/text.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/udf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/udf_signature.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/video.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/webdataset.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/webdataset_laion.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/listing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/bbox.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/pose.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/segment.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/bbox.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/pose.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/segment.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/namespace.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/node.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/nodes_fetcher.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/nodes_thread_pool.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/progress.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/project.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/py.typed +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/batch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/dataset.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/dispatch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/metrics.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/params.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/queue.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/schema.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/session.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/udf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/remote/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/script_meta.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/semver.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/default/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/default/base.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/aggregate.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/array.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/conditional.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/numeric.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/path.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/random.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/string.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/postgresql_dialect.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/postgresql_types.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/selectable.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/base.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/types.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/vector.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/types.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/telemetry.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/toolkit/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/toolkit/split.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/torch/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain/utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/SOURCES.txt +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/dependency_links.txt +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/entry_points.txt +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/requires.txt +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/top_level.txt +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/conftest.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.dvc/.gitignore +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.dvc/config +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.gitignore +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/laion-tiny.npz.dvc +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_datachain.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_ls.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_version.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/conftest.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/data.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/examples/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/examples/test_examples.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/examples/test_wds_e2e.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/examples/wds_data.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/data/Big_Buck_Bunny_360_10s_1MB.mp4 +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/data/lena.jpg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/fake-service-account-credentials.json +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_aggregate.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_array.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_conditional.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_numeric.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_path.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_random.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_string.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running-mask0.png +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running-mask1.png +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running.jpg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/ships.jpg +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/test_yolo.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_audio.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_batching.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_catalog.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_client.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_cloud_transfer.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_data_storage.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datachain.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datachain_merge.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_dataset_query.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datasets.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_delta.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_feature_pickling.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_file.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_hf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_hidden_field.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_image.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_listing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_ls.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_meta_formats.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_metastore.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_metrics.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_mutate.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_pull.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_pytorch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_query.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_database.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_dataset_remote.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_dataset_version_specifiers.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_retry.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_session.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_studio_datetime_parsing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_to_database.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_toolkit.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_video.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_warehouse.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_exception.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_parallel.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_parallel_data_model.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/name_len_slow.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_atomicity.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_cli_e2e.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_import_time.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_query_e2e.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/test_telemetry.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/conftest.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_arrow.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_audio.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_clip.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain_bootstrap.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain_merge.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_diff.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_feature.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_feature_utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_file.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_hf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_image.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_listing_info.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_namespace.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_partition_by.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_project.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_python_to_sql.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_schema.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_settings.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_signal_schema.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_sql_to_python.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_text.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_udf.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_udf_signature.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_webdataset.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_bbox.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_pose.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_segment.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/__init__.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/test_types.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/test_utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_array.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_conditional.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_path.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_random.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_selectable.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_string.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_asyn.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cache.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_catalog.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_catalog_loader.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cli_datasets.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cli_parsing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client_gcs.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client_s3.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_config.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_data_storage.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_database_engine.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_dataset.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_dispatch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_fileslice.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_func.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_listing.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_metastore.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_module_exports.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_pytorch.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query_metrics.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query_params.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_script_meta.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_semver.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_serializer.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_session.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_utils.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_warehouse.py +0 -0
- {datachain-0.30.7 → datachain-0.31.0}/tests/utils.py +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import base64
|
|
2
1
|
import json
|
|
3
2
|
import logging
|
|
4
3
|
import os
|
|
@@ -7,6 +6,7 @@ from datetime import datetime, timedelta, timezone
|
|
|
7
6
|
from struct import unpack
|
|
8
7
|
from typing import (
|
|
9
8
|
Any,
|
|
9
|
+
BinaryIO,
|
|
10
10
|
Generic,
|
|
11
11
|
Optional,
|
|
12
12
|
TypeVar,
|
|
@@ -30,8 +30,9 @@ DatasetExportStatus = Optional[dict[str, Any]]
|
|
|
30
30
|
DatasetExportSignedUrls = Optional[list[str]]
|
|
31
31
|
FileUploadData = Optional[dict[str, Any]]
|
|
32
32
|
JobData = Optional[dict[str, Any]]
|
|
33
|
-
JobListData = dict[str, Any]
|
|
34
|
-
ClusterListData = dict[str, Any]
|
|
33
|
+
JobListData = list[dict[str, Any]]
|
|
34
|
+
ClusterListData = list[dict[str, Any]]
|
|
35
|
+
|
|
35
36
|
logger = logging.getLogger("datachain")
|
|
36
37
|
|
|
37
38
|
DATASET_ROWS_CHUNK_SIZE = 8192
|
|
@@ -239,6 +240,45 @@ class StudioClient:
|
|
|
239
240
|
|
|
240
241
|
return Response(data, ok, message, response.status_code)
|
|
241
242
|
|
|
243
|
+
def _send_multipart_request(
|
|
244
|
+
self, route: str, files: dict[str, Any], params: Optional[dict[str, Any]] = None
|
|
245
|
+
) -> Response[Any]:
|
|
246
|
+
"""
|
|
247
|
+
Function that communicates with Studio API using multipart/form-data.
|
|
248
|
+
It will raise an exception, and try to retry, if 5xx status code is
|
|
249
|
+
returned, or if Timeout exceptions is thrown from the requests lib
|
|
250
|
+
"""
|
|
251
|
+
import requests
|
|
252
|
+
|
|
253
|
+
# Add team_name to params
|
|
254
|
+
request_params = {**(params or {}), "team_name": self.team}
|
|
255
|
+
|
|
256
|
+
response = requests.post(
|
|
257
|
+
url=f"{self.url}/{route}",
|
|
258
|
+
files=files,
|
|
259
|
+
params=request_params,
|
|
260
|
+
headers={
|
|
261
|
+
"Authorization": f"token {self.token}",
|
|
262
|
+
},
|
|
263
|
+
timeout=self.timeout,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
ok = response.ok
|
|
267
|
+
try:
|
|
268
|
+
data = json.loads(response.content.decode("utf-8"))
|
|
269
|
+
except json.decoder.JSONDecodeError:
|
|
270
|
+
data = {}
|
|
271
|
+
|
|
272
|
+
if not ok:
|
|
273
|
+
if response.status_code == 403:
|
|
274
|
+
message = f"Not authorized for the team {self.team}"
|
|
275
|
+
else:
|
|
276
|
+
message = data.get("message", "")
|
|
277
|
+
else:
|
|
278
|
+
message = ""
|
|
279
|
+
|
|
280
|
+
return Response(data, ok, message, response.status_code)
|
|
281
|
+
|
|
242
282
|
@staticmethod
|
|
243
283
|
def _unpacker_hook(code, data):
|
|
244
284
|
import msgpack
|
|
@@ -409,12 +449,13 @@ class StudioClient:
|
|
|
409
449
|
method="GET",
|
|
410
450
|
)
|
|
411
451
|
|
|
412
|
-
def upload_file(
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
452
|
+
def upload_file(
|
|
453
|
+
self, file_obj: BinaryIO, file_name: str
|
|
454
|
+
) -> Response[FileUploadData]:
|
|
455
|
+
# Prepare multipart form data
|
|
456
|
+
files = {"file": (file_name, file_obj, "application/octet-stream")}
|
|
457
|
+
|
|
458
|
+
return self._send_multipart_request("datachain/jobs/files", files)
|
|
418
459
|
|
|
419
460
|
def create_job(
|
|
420
461
|
self,
|
|
@@ -449,25 +490,27 @@ class StudioClient:
|
|
|
449
490
|
"cron_expression": cron,
|
|
450
491
|
"credentials_name": credentials_name,
|
|
451
492
|
}
|
|
452
|
-
return self._send_request("datachain/
|
|
493
|
+
return self._send_request("datachain/jobs/", data)
|
|
453
494
|
|
|
454
495
|
def get_jobs(
|
|
455
496
|
self,
|
|
456
497
|
status: Optional[str] = None,
|
|
457
498
|
limit: int = 20,
|
|
499
|
+
job_id: Optional[str] = None,
|
|
458
500
|
) -> Response[JobListData]:
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
501
|
+
params: dict[str, Any] = {"limit": limit}
|
|
502
|
+
if status is not None:
|
|
503
|
+
params["status"] = status
|
|
504
|
+
if job_id is not None:
|
|
505
|
+
params["job_id"] = job_id
|
|
506
|
+
return self._send_request("datachain/jobs/", params, method="GET")
|
|
464
507
|
|
|
465
508
|
def cancel_job(
|
|
466
509
|
self,
|
|
467
510
|
job_id: str,
|
|
468
511
|
) -> Response[JobData]:
|
|
469
|
-
url = f"datachain/
|
|
512
|
+
url = f"datachain/jobs/{job_id}/cancel"
|
|
470
513
|
return self._send_request(url, data={}, method="POST")
|
|
471
514
|
|
|
472
515
|
def get_clusters(self) -> Response[ClusterListData]:
|
|
473
|
-
return self._send_request("datachain/clusters", {}, method="GET")
|
|
516
|
+
return self._send_request("datachain/clusters/", {}, method="GET")
|
|
@@ -403,14 +403,14 @@ def create_job(
|
|
|
403
403
|
if not response.data:
|
|
404
404
|
raise DataChainError("Failed to create job")
|
|
405
405
|
|
|
406
|
-
job_id = response.data.get("
|
|
406
|
+
job_id = response.data.get("id")
|
|
407
407
|
|
|
408
408
|
if parsed_start_time or cron:
|
|
409
409
|
print(f"Job {job_id} is scheduled as a task in Studio.")
|
|
410
410
|
return 0
|
|
411
411
|
|
|
412
412
|
print(f"Job {job_id} created")
|
|
413
|
-
print("Open the job in Studio at", response.data.get("
|
|
413
|
+
print("Open the job in Studio at", response.data.get("url"))
|
|
414
414
|
print("=" * 40)
|
|
415
415
|
|
|
416
416
|
return 0 if no_wait else show_logs_from_client(client, job_id)
|
|
@@ -421,16 +421,14 @@ def upload_files(client: StudioClient, files: list[str]) -> list[str]:
|
|
|
421
421
|
for file in files:
|
|
422
422
|
file_name = os.path.basename(file)
|
|
423
423
|
with open(file, "rb") as f:
|
|
424
|
-
|
|
425
|
-
response = client.upload_file(file_content, file_name)
|
|
424
|
+
response = client.upload_file(f, file_name)
|
|
426
425
|
if not response.ok:
|
|
427
426
|
raise DataChainError(response.message)
|
|
428
427
|
|
|
429
428
|
if not response.data:
|
|
430
429
|
raise DataChainError(f"Failed to upload file {file_name}")
|
|
431
430
|
|
|
432
|
-
file_id
|
|
433
|
-
if file_id:
|
|
431
|
+
if file_id := response.data.get("id"):
|
|
434
432
|
file_ids.append(str(file_id))
|
|
435
433
|
return file_ids
|
|
436
434
|
|
|
@@ -456,7 +454,7 @@ def list_jobs(status: Optional[str], team_name: Optional[str], limit: int):
|
|
|
456
454
|
if not response.ok:
|
|
457
455
|
raise DataChainError(response.message)
|
|
458
456
|
|
|
459
|
-
jobs = response.data
|
|
457
|
+
jobs = response.data or []
|
|
460
458
|
if not jobs:
|
|
461
459
|
print("No jobs found")
|
|
462
460
|
return
|
|
@@ -492,7 +490,7 @@ def list_clusters(team_name: Optional[str]):
|
|
|
492
490
|
if not response.ok:
|
|
493
491
|
raise DataChainError(response.message)
|
|
494
492
|
|
|
495
|
-
clusters = response.data
|
|
493
|
+
clusters = response.data or []
|
|
496
494
|
if not clusters:
|
|
497
495
|
print("No clusters found")
|
|
498
496
|
return
|
|
@@ -505,6 +503,7 @@ def list_clusters(team_name: Optional[str]):
|
|
|
505
503
|
"Cloud Provider": cluster.get("cloud_provider"),
|
|
506
504
|
"Cloud Credentials": cluster.get("cloud_credentials"),
|
|
507
505
|
"Is Active": cluster.get("is_active"),
|
|
506
|
+
"Is Default": cluster.get("default"),
|
|
508
507
|
"Max Workers": cluster.get("max_workers"),
|
|
509
508
|
}
|
|
510
509
|
for cluster in clusters
|
|
@@ -336,7 +336,7 @@ def test_studio_rm_dataset(capsys, mocker):
|
|
|
336
336
|
def test_studio_cancel_job(capsys, mocker):
|
|
337
337
|
job_id = "8bddde6c-c3ca-41b0-9d87-ee945bfdce70"
|
|
338
338
|
with requests_mock.mock() as m:
|
|
339
|
-
m.post(f"{STUDIO_URL}/api/datachain/
|
|
339
|
+
m.post(f"{STUDIO_URL}/api/datachain/jobs/{job_id}/cancel", json={})
|
|
340
340
|
|
|
341
341
|
# Studio token is required
|
|
342
342
|
assert main(["job", "cancel", job_id]) == 1
|
|
@@ -359,10 +359,12 @@ def test_studio_run(capsys, mocker, tmp_dir):
|
|
|
359
359
|
conf["studio"] = {"token": "isat_access_token", "team": "team_name"}
|
|
360
360
|
|
|
361
361
|
with requests_mock.mock() as m:
|
|
362
|
-
m.post(f"{STUDIO_URL}/api/datachain/upload-file", json={"blob": {"id": 1}})
|
|
363
362
|
m.post(
|
|
364
|
-
f"{STUDIO_URL}/api/datachain/
|
|
365
|
-
|
|
363
|
+
f"{STUDIO_URL}/api/datachain/jobs/files?team_name=team_name", json={"id": 1}
|
|
364
|
+
)
|
|
365
|
+
m.post(
|
|
366
|
+
f"{STUDIO_URL}/api/datachain/jobs/",
|
|
367
|
+
json={"id": 1, "url": "https://example.com"},
|
|
366
368
|
)
|
|
367
369
|
m.get(
|
|
368
370
|
f"{STUDIO_URL}/api/datachain/datasets/dataset_job_versions?job_id=1&team_name=team_name",
|
|
@@ -421,15 +423,17 @@ def test_studio_run(capsys, mocker, tmp_dir):
|
|
|
421
423
|
second_request = m.request_history[1]
|
|
422
424
|
|
|
423
425
|
assert first_request.method == "POST"
|
|
424
|
-
assert
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
426
|
+
assert (
|
|
427
|
+
first_request.url
|
|
428
|
+
== f"{STUDIO_URL}/api/datachain/jobs/files?team_name=team_name"
|
|
429
|
+
)
|
|
430
|
+
# Check that it's multipart/form-data request
|
|
431
|
+
assert "multipart/form-data" in first_request.headers.get("Content-Type", "")
|
|
432
|
+
# Check query parameters
|
|
433
|
+
assert first_request.qs["team_name"] == ["team_name"]
|
|
430
434
|
|
|
431
435
|
assert second_request.method == "POST"
|
|
432
|
-
assert second_request.url == f"{STUDIO_URL}/api/datachain/
|
|
436
|
+
assert second_request.url == f"{STUDIO_URL}/api/datachain/jobs/"
|
|
433
437
|
assert second_request.json() == {
|
|
434
438
|
"query": "print(1)",
|
|
435
439
|
"query_type": "PYTHON",
|
|
@@ -456,8 +460,8 @@ def test_studio_run_task(capsys, mocker, tmp_dir, studio_token):
|
|
|
456
460
|
|
|
457
461
|
with requests_mock.mock() as m:
|
|
458
462
|
m.post(
|
|
459
|
-
f"{STUDIO_URL}/api/datachain/
|
|
460
|
-
json={"
|
|
463
|
+
f"{STUDIO_URL}/api/datachain/jobs/",
|
|
464
|
+
json={"id": 1, "url": "https://example.com"},
|
|
461
465
|
)
|
|
462
466
|
m.get(
|
|
463
467
|
f"{STUDIO_URL}/api/datachain/datasets/dataset_job_versions?job_id=1&team_name=team_name",
|
|
@@ -485,7 +489,7 @@ def test_studio_run_task(capsys, mocker, tmp_dir, studio_token):
|
|
|
485
489
|
)
|
|
486
490
|
first_request = m.request_history[0]
|
|
487
491
|
assert first_request.method == "POST"
|
|
488
|
-
assert first_request.url == f"{STUDIO_URL}/api/datachain/
|
|
492
|
+
assert first_request.url == f"{STUDIO_URL}/api/datachain/jobs/"
|
|
489
493
|
request_json = first_request.json()
|
|
490
494
|
assert request_json["start_after"] is not None
|
|
491
495
|
assert request_json["cron_expression"] is not None
|
|
@@ -518,8 +522,8 @@ def test_studio_run_non_zero_exit_code(
|
|
|
518
522
|
|
|
519
523
|
with requests_mock.mock() as m:
|
|
520
524
|
m.post(
|
|
521
|
-
f"{STUDIO_URL}/api/datachain/
|
|
522
|
-
json={"
|
|
525
|
+
f"{STUDIO_URL}/api/datachain/jobs/",
|
|
526
|
+
json={"id": 1, "url": "https://example.com"},
|
|
523
527
|
)
|
|
524
528
|
m.get(
|
|
525
529
|
f"{STUDIO_URL}/api/datachain/datasets/dataset_job_versions?job_id=1&team_name=team_name",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|