datachain 0.35.1__tar.gz → 0.35.2__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.35.1 → datachain-0.35.2}/PKG-INFO +1 -1
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/catalog/catalog.py +58 -22
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/PKG-INFO +1 -1
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_query.py +22 -3
- {datachain-0.35.1 → datachain-0.35.2}/.cruft.json +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.gitattributes +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/ISSUE_TEMPLATE/empty_issue.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/codecov.yaml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/dependabot.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/workflows/benchmarks.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/workflows/release.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/workflows/tests-studio.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/workflows/tests.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.github/workflows/update-template.yaml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.gitignore +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/.pre-commit-config.yaml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/CODE_OF_CONDUCT.rst +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/LICENSE +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/README.rst +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/api_hooks.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/assets/captioned_cartoons.png +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/assets/datachain-white.svg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/assets/datachain.svg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/assets/webhook_dialog.png +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/assets/webhook_list.png +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/auth/login.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/auth/logout.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/auth/team.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/auth/token.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/index.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/job/cancel.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/job/clusters.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/job/logs.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/job/ls.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/commands/job/run.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/contributing.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/css/github-permalink-style.css +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/examples.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/db_migrations.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/delta.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/env.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/index.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/namespaces.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/processing.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/remotes.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/guide/retry.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/index.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/overrides/main.html +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/quick-start.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/arrowrow.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/bbox.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/file.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/imagefile.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/index.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/pose.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/segment.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/tarvfile.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/textfile.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/data-types/videofile.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/datachain.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/func.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/aggregate.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/array.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/conditional.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/numeric.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/path.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/random.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/string.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/functions/window.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/index.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/toolkit.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/torch.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/references/udf.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/studio/api/.gitkeep +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/studio/webhooks.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/templates/main.dot +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/templates/operation.dot +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/templates/responses.def +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/docs/tutorials.md +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/iptc_exif_xmp_lib.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/llava2_image_desc_lib.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/openimage-detect.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/ultralytics-bbox.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/ultralytics-pose.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/computer_vision/ultralytics-segment.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/common_sql_functions.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/json-csv-reader.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/nested_datamodel.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/torch-loader.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/udfs/parallel.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/udfs/simple.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/get_started/udfs/stateful.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/incremental_processing/delta.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/incremental_processing/retry.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/incremental_processing/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/llm_and_nlp/claude-query.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/llm_and_nlp/hf-dataset-llm-eval.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/audio-to-text.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/clip_inference.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/hf_pipeline.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/openai_image_desc_lib.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/wds.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/examples/multimodal/wds_filtered.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/mkdocs.yml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/noxfile.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/pyproject.toml +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/setup.cfg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/__main__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/asyn.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cache.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/catalog/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/catalog/datasource.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/catalog/loader.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/checkpoint.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/datasets.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/du.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/index.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/ls.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/misc.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/query.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/commands/show.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/parser/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/parser/job.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/parser/studio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/parser/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/cli/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/azure.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/fileslice.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/fsspec.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/gcs.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/hf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/http.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/local.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/client/s3.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/config.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/db_engine.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/job.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/metastore.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/schema.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/serializer.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/sqlite.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/data_storage/warehouse.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/dataset.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/delta.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/diff/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/error.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/fs/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/fs/reference.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/fs/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/aggregate.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/array.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/base.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/conditional.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/func.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/numeric.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/path.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/random.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/string.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/func/window.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/hash_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/job.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/arrow.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/audio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/clip.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/flatten.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/python_to_sql.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/sql_to_python.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/unflatten.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/convert/values_to_tuples.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/data_model.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dataset_info.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/csv.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/database.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/datachain.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/datasets.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/hf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/json.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/listings.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/pandas.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/parquet.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/records.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/storage.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/storage_pattern.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/dc/values.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/file.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/hf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/image.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/listing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/listing_info.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/meta_formats.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/model_store.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/namespaces.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/projects.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/pytorch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/settings.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/signal_schema.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/tar.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/text.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/udf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/udf_signature.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/video.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/webdataset.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/lib/webdataset_laion.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/listing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/bbox.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/pose.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/segment.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/ultralytics/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/ultralytics/bbox.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/ultralytics/pose.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/ultralytics/segment.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/model/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/namespace.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/node.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/nodes_fetcher.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/nodes_thread_pool.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/plugins.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/progress.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/project.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/py.typed +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/batch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/dataset.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/dispatch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/metrics.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/params.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/queue.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/schema.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/session.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/query/udf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/remote/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/remote/studio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/script_meta.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/semver.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/default/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/default/base.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/aggregate.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/array.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/conditional.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/numeric.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/path.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/random.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/functions/string.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/postgresql_dialect.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/postgresql_types.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/selectable.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/sqlite/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/sqlite/base.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/sqlite/types.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/sqlite/vector.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/types.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/sql/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/studio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/telemetry.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/toolkit/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/toolkit/split.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/torch/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain/utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/SOURCES.txt +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/dependency_links.txt +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/entry_points.txt +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/requires.txt +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/src/datachain.egg-info/top_level.txt +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/conftest.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/datasets/.dvc/.gitignore +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/datasets/.dvc/config +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/datasets/.gitignore +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/datasets/laion-tiny.npz.dvc +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/test_datachain.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/test_ls.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/benchmarks/test_version.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/conftest.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/data.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/examples/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/examples/test_examples.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/examples/test_wds_e2e.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/examples/wds_data.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/data/Big_Buck_Bunny_360_10s_1MB.mp4 +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/data/lena.jpg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/fake-service-account-credentials.json +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_aggregate.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_array.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_conditional.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_numeric.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_path.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_random.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/functions/test_string.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/data/running-mask0.png +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/data/running-mask1.png +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/data/running.jpg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/data/ships.jpg +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/model/test_yolo.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_audio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_catalog.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_client.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_cloud_transfer.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_data_storage.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_datachain.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_datachain_merge.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_dataset_query.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_datasets.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_delta.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_feature_pickling.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_file.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_hf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_hidden_field.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_image.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_listing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_ls.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_meta_formats.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_metastore.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_metrics.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_mutate.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_pull.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_pytorch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_query.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_read_database.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_read_dataset_remote.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_read_dataset_version_specifiers.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_retry.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_session.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_storage_pattern.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_studio_datetime_parsing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_to_database.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_toolkit.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_udf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_union.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_video.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/func/test_warehouse.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/scripts/feature_class.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/scripts/feature_class_exception.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/scripts/feature_class_parallel.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/scripts/feature_class_parallel_data_model.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/scripts/name_len_slow.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_atomicity.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_cli_e2e.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_cli_studio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_import_time.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_query_e2e.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/test_telemetry.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/conftest.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_arrow.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_audio.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_checkpoints.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_clip.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_datachain.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_datachain_bootstrap.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_datachain_merge.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_diff.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_feature.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_feature_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_file.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_hf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_image.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_listing_info.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_namespace.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_partition_by.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_project.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_python_to_sql.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_schema.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_settings.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_signal_schema.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_sql_to_python.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_storage_pattern.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_text.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_udf.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_udf_signature.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/lib/test_webdataset.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/model/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/model/test_bbox.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/model/test_pose.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/model/test_segment.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/model/test_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/sqlite/__init__.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/sqlite/test_types.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/sqlite/test_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_array.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_conditional.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_path.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_random.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_selectable.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/sql/test_string.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_asyn.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_batching.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_cache.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_catalog.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_catalog_loader.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_cli_datasets.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_cli_parsing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_client.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_client_gcs.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_client_http.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_client_s3.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_config.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_data_storage.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_database_engine.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_datachain_hash.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_dataset.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_dispatch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_fileslice.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_func.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_hash_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_listing.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_metastore.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_module_exports.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_pytorch.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_query_metrics.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_query_params.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_query_steps_hash.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_script_meta.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_semver.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_serializer.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_session.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_utils.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/unit/test_warehouse.py +0 -0
- {datachain-0.35.1 → datachain-0.35.2}/tests/utils.py +0 -0
|
@@ -133,19 +133,26 @@ def shutdown_process(
|
|
|
133
133
|
return proc.wait()
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
def
|
|
136
|
+
def process_output(stream: IO[bytes], callback: Callable[[str], None]) -> None:
|
|
137
137
|
buffer = b""
|
|
138
|
-
while byt := stream.read(1): # Read one byte at a time
|
|
139
|
-
buffer += byt
|
|
140
138
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
buffer = b"" # Clear buffer for next line
|
|
139
|
+
try:
|
|
140
|
+
while byt := stream.read(1): # Read one byte at a time
|
|
141
|
+
buffer += byt
|
|
145
142
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
143
|
+
if byt in (b"\n", b"\r"): # Check for newline or carriage return
|
|
144
|
+
line = buffer.decode("utf-8", errors="replace")
|
|
145
|
+
callback(line)
|
|
146
|
+
buffer = b"" # Clear buffer for the next line
|
|
147
|
+
|
|
148
|
+
if buffer: # Handle any remaining data in the buffer
|
|
149
|
+
line = buffer.decode("utf-8", errors="replace")
|
|
150
|
+
callback(line)
|
|
151
|
+
finally:
|
|
152
|
+
try:
|
|
153
|
+
stream.close() # Ensure output is closed
|
|
154
|
+
except Exception: # noqa: BLE001, S110
|
|
155
|
+
pass
|
|
149
156
|
|
|
150
157
|
|
|
151
158
|
class DatasetRowsFetcher(NodesThreadPool):
|
|
@@ -1747,13 +1754,13 @@ class Catalog:
|
|
|
1747
1754
|
recursive=recursive,
|
|
1748
1755
|
)
|
|
1749
1756
|
|
|
1757
|
+
@staticmethod
|
|
1750
1758
|
def query(
|
|
1751
|
-
self,
|
|
1752
1759
|
query_script: str,
|
|
1753
1760
|
env: Mapping[str, str] | None = None,
|
|
1754
1761
|
python_executable: str = sys.executable,
|
|
1755
|
-
|
|
1756
|
-
|
|
1762
|
+
stdout_callback: Callable[[str], None] | None = None,
|
|
1763
|
+
stderr_callback: Callable[[str], None] | None = None,
|
|
1757
1764
|
params: dict[str, str] | None = None,
|
|
1758
1765
|
job_id: str | None = None,
|
|
1759
1766
|
reset: bool = False,
|
|
@@ -1773,13 +1780,18 @@ class Catalog:
|
|
|
1773
1780
|
},
|
|
1774
1781
|
)
|
|
1775
1782
|
popen_kwargs: dict[str, Any] = {}
|
|
1776
|
-
|
|
1777
|
-
|
|
1783
|
+
|
|
1784
|
+
if stdout_callback is not None:
|
|
1785
|
+
popen_kwargs = {"stdout": subprocess.PIPE}
|
|
1786
|
+
if stderr_callback is not None:
|
|
1787
|
+
popen_kwargs["stderr"] = subprocess.PIPE
|
|
1778
1788
|
|
|
1779
1789
|
def raise_termination_signal(sig: int, _: Any) -> NoReturn:
|
|
1780
1790
|
raise TerminationSignal(sig)
|
|
1781
1791
|
|
|
1782
|
-
|
|
1792
|
+
stdout_thread: Thread | None = None
|
|
1793
|
+
stderr_thread: Thread | None = None
|
|
1794
|
+
|
|
1783
1795
|
with subprocess.Popen(cmd, env=env, **popen_kwargs) as proc: # noqa: S603
|
|
1784
1796
|
logger.info("Starting process %s", proc.pid)
|
|
1785
1797
|
|
|
@@ -1793,10 +1805,20 @@ class Catalog:
|
|
|
1793
1805
|
orig_sigterm_handler = signal.getsignal(signal.SIGTERM)
|
|
1794
1806
|
signal.signal(signal.SIGTERM, raise_termination_signal)
|
|
1795
1807
|
try:
|
|
1796
|
-
if
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1808
|
+
if stdout_callback is not None:
|
|
1809
|
+
stdout_thread = Thread(
|
|
1810
|
+
target=process_output,
|
|
1811
|
+
args=(proc.stdout, stdout_callback),
|
|
1812
|
+
daemon=True,
|
|
1813
|
+
)
|
|
1814
|
+
stdout_thread.start()
|
|
1815
|
+
if stderr_callback is not None:
|
|
1816
|
+
stderr_thread = Thread(
|
|
1817
|
+
target=process_output,
|
|
1818
|
+
args=(proc.stderr, stderr_callback),
|
|
1819
|
+
daemon=True,
|
|
1820
|
+
)
|
|
1821
|
+
stderr_thread.start()
|
|
1800
1822
|
|
|
1801
1823
|
proc.wait()
|
|
1802
1824
|
except TerminationSignal as exc:
|
|
@@ -1814,8 +1836,22 @@ class Catalog:
|
|
|
1814
1836
|
finally:
|
|
1815
1837
|
signal.signal(signal.SIGTERM, orig_sigterm_handler)
|
|
1816
1838
|
signal.signal(signal.SIGINT, orig_sigint_handler)
|
|
1817
|
-
|
|
1818
|
-
|
|
1839
|
+
# wait for the reader thread
|
|
1840
|
+
thread_join_timeout_seconds = 30
|
|
1841
|
+
if stdout_thread is not None:
|
|
1842
|
+
stdout_thread.join(timeout=thread_join_timeout_seconds)
|
|
1843
|
+
if stdout_thread.is_alive():
|
|
1844
|
+
logger.warning(
|
|
1845
|
+
"stdout thread is still alive after %s seconds",
|
|
1846
|
+
thread_join_timeout_seconds,
|
|
1847
|
+
)
|
|
1848
|
+
if stderr_thread is not None:
|
|
1849
|
+
stderr_thread.join(timeout=thread_join_timeout_seconds)
|
|
1850
|
+
if stderr_thread.is_alive():
|
|
1851
|
+
logger.warning(
|
|
1852
|
+
"stderr thread is still alive after %s seconds",
|
|
1853
|
+
thread_join_timeout_seconds,
|
|
1854
|
+
)
|
|
1819
1855
|
|
|
1820
1856
|
logger.info("Process %s exited with return code %s", proc.pid, proc.returncode)
|
|
1821
1857
|
if proc.returncode in (
|
|
@@ -53,12 +53,31 @@ def test_args(catalog, mock_popen, reset):
|
|
|
53
53
|
mock_popen.assert_called_once_with(["mypython", "-c", "pass"], env=expected_env)
|
|
54
54
|
|
|
55
55
|
|
|
56
|
+
def test_capture_stdout(catalog, mock_popen):
|
|
57
|
+
mock_popen.stdout = io.BytesIO(b"Hello, World!\rLorem Ipsum\nDolor Sit Amet\nconse")
|
|
58
|
+
stdout = []
|
|
59
|
+
|
|
60
|
+
catalog.query("pass", stdout_callback=stdout.append)
|
|
61
|
+
assert stdout == ["Hello, World!\r", "Lorem Ipsum\n", "Dolor Sit Amet\n", "conse"]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_capture_stderr(catalog, mock_popen):
|
|
65
|
+
mock_popen.stderr = io.BytesIO(b"Hello, World!\rLorem Ipsum\nDolor Sit Amet\nconse")
|
|
66
|
+
stderr = []
|
|
67
|
+
|
|
68
|
+
catalog.query("pass", stderr_callback=stderr.append)
|
|
69
|
+
assert stderr == ["Hello, World!\r", "Lorem Ipsum\n", "Dolor Sit Amet\n", "conse"]
|
|
70
|
+
|
|
71
|
+
|
|
56
72
|
def test_capture_output(catalog, mock_popen):
|
|
57
73
|
mock_popen.stdout = io.BytesIO(b"Hello, World!\rLorem Ipsum\nDolor Sit Amet\nconse")
|
|
58
|
-
|
|
74
|
+
mock_popen.stderr = io.BytesIO(b"foo\nbar")
|
|
75
|
+
stdout = []
|
|
76
|
+
stderr = []
|
|
59
77
|
|
|
60
|
-
catalog.query("pass",
|
|
61
|
-
assert
|
|
78
|
+
catalog.query("pass", stdout_callback=stdout.append, stderr_callback=stderr.append)
|
|
79
|
+
assert stdout == ["Hello, World!\r", "Lorem Ipsum\n", "Dolor Sit Amet\n", "conse"]
|
|
80
|
+
assert stderr == ["foo\n", "bar"]
|
|
62
81
|
|
|
63
82
|
|
|
64
83
|
def test_canceled_by_user(catalog, mock_popen):
|
|
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
|
|
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
|