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.

Files changed (420) hide show
  1. {datachain-0.30.7 → datachain-0.31.0}/PKG-INFO +1 -1
  2. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/remote/studio.py +60 -17
  3. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/studio.py +7 -8
  4. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/PKG-INFO +1 -1
  5. {datachain-0.30.7 → datachain-0.31.0}/tests/test_cli_studio.py +20 -16
  6. {datachain-0.30.7 → datachain-0.31.0}/.cruft.json +0 -0
  7. {datachain-0.30.7 → datachain-0.31.0}/.gitattributes +0 -0
  8. {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/empty_issue.md +0 -0
  10. {datachain-0.30.7 → datachain-0.31.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {datachain-0.30.7 → datachain-0.31.0}/.github/codecov.yaml +0 -0
  12. {datachain-0.30.7 → datachain-0.31.0}/.github/dependabot.yml +0 -0
  13. {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/benchmarks.yml +0 -0
  14. {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/release.yml +0 -0
  15. {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/tests-studio.yml +0 -0
  16. {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/tests.yml +0 -0
  17. {datachain-0.30.7 → datachain-0.31.0}/.github/workflows/update-template.yaml +0 -0
  18. {datachain-0.30.7 → datachain-0.31.0}/.gitignore +0 -0
  19. {datachain-0.30.7 → datachain-0.31.0}/.pre-commit-config.yaml +0 -0
  20. {datachain-0.30.7 → datachain-0.31.0}/CODE_OF_CONDUCT.rst +0 -0
  21. {datachain-0.30.7 → datachain-0.31.0}/LICENSE +0 -0
  22. {datachain-0.30.7 → datachain-0.31.0}/README.rst +0 -0
  23. {datachain-0.30.7 → datachain-0.31.0}/docs/assets/captioned_cartoons.png +0 -0
  24. {datachain-0.30.7 → datachain-0.31.0}/docs/assets/datachain-white.svg +0 -0
  25. {datachain-0.30.7 → datachain-0.31.0}/docs/assets/datachain.svg +0 -0
  26. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/login.md +0 -0
  27. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/logout.md +0 -0
  28. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/team.md +0 -0
  29. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/auth/token.md +0 -0
  30. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/index.md +0 -0
  31. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/cancel.md +0 -0
  32. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/clusters.md +0 -0
  33. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/logs.md +0 -0
  34. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/ls.md +0 -0
  35. {datachain-0.30.7 → datachain-0.31.0}/docs/commands/job/run.md +0 -0
  36. {datachain-0.30.7 → datachain-0.31.0}/docs/contributing.md +0 -0
  37. {datachain-0.30.7 → datachain-0.31.0}/docs/css/github-permalink-style.css +0 -0
  38. {datachain-0.30.7 → datachain-0.31.0}/docs/examples.md +0 -0
  39. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/db_migrations.md +0 -0
  40. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/delta.md +0 -0
  41. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/env.md +0 -0
  42. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/index.md +0 -0
  43. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/namespaces.md +0 -0
  44. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/processing.md +0 -0
  45. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/remotes.md +0 -0
  46. {datachain-0.30.7 → datachain-0.31.0}/docs/guide/retry.md +0 -0
  47. {datachain-0.30.7 → datachain-0.31.0}/docs/index.md +0 -0
  48. {datachain-0.30.7 → datachain-0.31.0}/docs/overrides/main.html +0 -0
  49. {datachain-0.30.7 → datachain-0.31.0}/docs/quick-start.md +0 -0
  50. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/arrowrow.md +0 -0
  51. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/bbox.md +0 -0
  52. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/file.md +0 -0
  53. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/imagefile.md +0 -0
  54. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/index.md +0 -0
  55. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/pose.md +0 -0
  56. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/segment.md +0 -0
  57. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/tarvfile.md +0 -0
  58. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/textfile.md +0 -0
  59. {datachain-0.30.7 → datachain-0.31.0}/docs/references/data-types/videofile.md +0 -0
  60. {datachain-0.30.7 → datachain-0.31.0}/docs/references/datachain.md +0 -0
  61. {datachain-0.30.7 → datachain-0.31.0}/docs/references/func.md +0 -0
  62. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/aggregate.md +0 -0
  63. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/array.md +0 -0
  64. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/conditional.md +0 -0
  65. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/numeric.md +0 -0
  66. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/path.md +0 -0
  67. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/random.md +0 -0
  68. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/string.md +0 -0
  69. {datachain-0.30.7 → datachain-0.31.0}/docs/references/functions/window.md +0 -0
  70. {datachain-0.30.7 → datachain-0.31.0}/docs/references/index.md +0 -0
  71. {datachain-0.30.7 → datachain-0.31.0}/docs/references/toolkit.md +0 -0
  72. {datachain-0.30.7 → datachain-0.31.0}/docs/references/torch.md +0 -0
  73. {datachain-0.30.7 → datachain-0.31.0}/docs/references/udf.md +0 -0
  74. {datachain-0.30.7 → datachain-0.31.0}/docs/tutorials.md +0 -0
  75. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/iptc_exif_xmp_lib.py +0 -0
  76. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/llava2_image_desc_lib.py +0 -0
  77. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/openimage-detect.py +0 -0
  78. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-bbox.py +0 -0
  79. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-pose.py +0 -0
  80. {datachain-0.30.7 → datachain-0.31.0}/examples/computer_vision/ultralytics-segment.py +0 -0
  81. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/common_sql_functions.py +0 -0
  82. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/json-csv-reader.py +0 -0
  83. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/nested_datamodel.py +0 -0
  84. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/torch-loader.py +0 -0
  85. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/parallel.py +0 -0
  86. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/simple.py +0 -0
  87. {datachain-0.30.7 → datachain-0.31.0}/examples/get_started/udfs/stateful.py +0 -0
  88. {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/delta.py +0 -0
  89. {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/retry.py +0 -0
  90. {datachain-0.30.7 → datachain-0.31.0}/examples/incremental_processing/utils.py +0 -0
  91. {datachain-0.30.7 → datachain-0.31.0}/examples/llm_and_nlp/claude-query.py +0 -0
  92. {datachain-0.30.7 → datachain-0.31.0}/examples/llm_and_nlp/hf-dataset-llm-eval.py +0 -0
  93. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/audio-to-text.py +0 -0
  94. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/clip_inference.py +0 -0
  95. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/hf_pipeline.py +0 -0
  96. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/openai_image_desc_lib.py +0 -0
  97. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/wds.py +0 -0
  98. {datachain-0.30.7 → datachain-0.31.0}/examples/multimodal/wds_filtered.py +0 -0
  99. {datachain-0.30.7 → datachain-0.31.0}/mkdocs.yml +0 -0
  100. {datachain-0.30.7 → datachain-0.31.0}/noxfile.py +0 -0
  101. {datachain-0.30.7 → datachain-0.31.0}/pyproject.toml +0 -0
  102. {datachain-0.30.7 → datachain-0.31.0}/setup.cfg +0 -0
  103. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/__init__.py +0 -0
  104. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/__main__.py +0 -0
  105. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/asyn.py +0 -0
  106. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cache.py +0 -0
  107. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/__init__.py +0 -0
  108. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/catalog.py +0 -0
  109. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/datasource.py +0 -0
  110. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/catalog/loader.py +0 -0
  111. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/__init__.py +0 -0
  112. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/__init__.py +0 -0
  113. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/datasets.py +0 -0
  114. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/du.py +0 -0
  115. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/index.py +0 -0
  116. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/ls.py +0 -0
  117. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/misc.py +0 -0
  118. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/query.py +0 -0
  119. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/commands/show.py +0 -0
  120. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/__init__.py +0 -0
  121. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/job.py +0 -0
  122. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/studio.py +0 -0
  123. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/parser/utils.py +0 -0
  124. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/cli/utils.py +0 -0
  125. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/__init__.py +0 -0
  126. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/azure.py +0 -0
  127. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/fileslice.py +0 -0
  128. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/fsspec.py +0 -0
  129. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/gcs.py +0 -0
  130. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/hf.py +0 -0
  131. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/local.py +0 -0
  132. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/client/s3.py +0 -0
  133. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/config.py +0 -0
  134. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/__init__.py +0 -0
  135. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/db_engine.py +0 -0
  136. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/job.py +0 -0
  137. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/metastore.py +0 -0
  138. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/schema.py +0 -0
  139. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/serializer.py +0 -0
  140. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/sqlite.py +0 -0
  141. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/data_storage/warehouse.py +0 -0
  142. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/dataset.py +0 -0
  143. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/delta.py +0 -0
  144. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/diff/__init__.py +0 -0
  145. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/error.py +0 -0
  146. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/__init__.py +0 -0
  147. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/reference.py +0 -0
  148. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/fs/utils.py +0 -0
  149. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/__init__.py +0 -0
  150. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/aggregate.py +0 -0
  151. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/array.py +0 -0
  152. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/base.py +0 -0
  153. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/conditional.py +0 -0
  154. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/func.py +0 -0
  155. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/numeric.py +0 -0
  156. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/path.py +0 -0
  157. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/random.py +0 -0
  158. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/string.py +0 -0
  159. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/func/window.py +0 -0
  160. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/job.py +0 -0
  161. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/__init__.py +0 -0
  162. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/arrow.py +0 -0
  163. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/audio.py +0 -0
  164. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/clip.py +0 -0
  165. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/__init__.py +0 -0
  166. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/flatten.py +0 -0
  167. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/python_to_sql.py +0 -0
  168. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/sql_to_python.py +0 -0
  169. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/unflatten.py +0 -0
  170. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/convert/values_to_tuples.py +0 -0
  171. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/data_model.py +0 -0
  172. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dataset_info.py +0 -0
  173. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/__init__.py +0 -0
  174. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/csv.py +0 -0
  175. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/database.py +0 -0
  176. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/datachain.py +0 -0
  177. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/datasets.py +0 -0
  178. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/hf.py +0 -0
  179. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/json.py +0 -0
  180. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/listings.py +0 -0
  181. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/pandas.py +0 -0
  182. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/parquet.py +0 -0
  183. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/records.py +0 -0
  184. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/storage.py +0 -0
  185. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/utils.py +0 -0
  186. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/dc/values.py +0 -0
  187. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/file.py +0 -0
  188. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/hf.py +0 -0
  189. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/image.py +0 -0
  190. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/listing.py +0 -0
  191. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/listing_info.py +0 -0
  192. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/meta_formats.py +0 -0
  193. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/model_store.py +0 -0
  194. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/namespaces.py +0 -0
  195. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/projects.py +0 -0
  196. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/pytorch.py +0 -0
  197. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/settings.py +0 -0
  198. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/signal_schema.py +0 -0
  199. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/tar.py +0 -0
  200. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/text.py +0 -0
  201. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/udf.py +0 -0
  202. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/udf_signature.py +0 -0
  203. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/utils.py +0 -0
  204. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/video.py +0 -0
  205. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/webdataset.py +0 -0
  206. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/lib/webdataset_laion.py +0 -0
  207. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/listing.py +0 -0
  208. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/__init__.py +0 -0
  209. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/bbox.py +0 -0
  210. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/pose.py +0 -0
  211. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/segment.py +0 -0
  212. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/__init__.py +0 -0
  213. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/bbox.py +0 -0
  214. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/pose.py +0 -0
  215. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/ultralytics/segment.py +0 -0
  216. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/model/utils.py +0 -0
  217. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/namespace.py +0 -0
  218. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/node.py +0 -0
  219. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/nodes_fetcher.py +0 -0
  220. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/nodes_thread_pool.py +0 -0
  221. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/progress.py +0 -0
  222. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/project.py +0 -0
  223. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/py.typed +0 -0
  224. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/__init__.py +0 -0
  225. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/batch.py +0 -0
  226. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/dataset.py +0 -0
  227. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/dispatch.py +0 -0
  228. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/metrics.py +0 -0
  229. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/params.py +0 -0
  230. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/queue.py +0 -0
  231. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/schema.py +0 -0
  232. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/session.py +0 -0
  233. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/udf.py +0 -0
  234. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/query/utils.py +0 -0
  235. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/remote/__init__.py +0 -0
  236. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/script_meta.py +0 -0
  237. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/semver.py +0 -0
  238. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/__init__.py +0 -0
  239. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/default/__init__.py +0 -0
  240. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/default/base.py +0 -0
  241. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/__init__.py +0 -0
  242. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/aggregate.py +0 -0
  243. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/array.py +0 -0
  244. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/conditional.py +0 -0
  245. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/numeric.py +0 -0
  246. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/path.py +0 -0
  247. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/random.py +0 -0
  248. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/functions/string.py +0 -0
  249. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/postgresql_dialect.py +0 -0
  250. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/postgresql_types.py +0 -0
  251. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/selectable.py +0 -0
  252. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/__init__.py +0 -0
  253. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/base.py +0 -0
  254. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/types.py +0 -0
  255. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/sqlite/vector.py +0 -0
  256. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/types.py +0 -0
  257. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/sql/utils.py +0 -0
  258. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/telemetry.py +0 -0
  259. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/toolkit/__init__.py +0 -0
  260. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/toolkit/split.py +0 -0
  261. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/torch/__init__.py +0 -0
  262. {datachain-0.30.7 → datachain-0.31.0}/src/datachain/utils.py +0 -0
  263. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/SOURCES.txt +0 -0
  264. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/dependency_links.txt +0 -0
  265. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/entry_points.txt +0 -0
  266. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/requires.txt +0 -0
  267. {datachain-0.30.7 → datachain-0.31.0}/src/datachain.egg-info/top_level.txt +0 -0
  268. {datachain-0.30.7 → datachain-0.31.0}/tests/__init__.py +0 -0
  269. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/__init__.py +0 -0
  270. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/conftest.py +0 -0
  271. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.dvc/.gitignore +0 -0
  272. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.dvc/config +0 -0
  273. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/.gitignore +0 -0
  274. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/datasets/laion-tiny.npz.dvc +0 -0
  275. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_datachain.py +0 -0
  276. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_ls.py +0 -0
  277. {datachain-0.30.7 → datachain-0.31.0}/tests/benchmarks/test_version.py +0 -0
  278. {datachain-0.30.7 → datachain-0.31.0}/tests/conftest.py +0 -0
  279. {datachain-0.30.7 → datachain-0.31.0}/tests/data.py +0 -0
  280. {datachain-0.30.7 → datachain-0.31.0}/tests/examples/__init__.py +0 -0
  281. {datachain-0.30.7 → datachain-0.31.0}/tests/examples/test_examples.py +0 -0
  282. {datachain-0.30.7 → datachain-0.31.0}/tests/examples/test_wds_e2e.py +0 -0
  283. {datachain-0.30.7 → datachain-0.31.0}/tests/examples/wds_data.py +0 -0
  284. {datachain-0.30.7 → datachain-0.31.0}/tests/func/__init__.py +0 -0
  285. {datachain-0.30.7 → datachain-0.31.0}/tests/func/data/Big_Buck_Bunny_360_10s_1MB.mp4 +0 -0
  286. {datachain-0.30.7 → datachain-0.31.0}/tests/func/data/lena.jpg +0 -0
  287. {datachain-0.30.7 → datachain-0.31.0}/tests/func/fake-service-account-credentials.json +0 -0
  288. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/__init__.py +0 -0
  289. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_aggregate.py +0 -0
  290. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_array.py +0 -0
  291. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_conditional.py +0 -0
  292. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_numeric.py +0 -0
  293. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_path.py +0 -0
  294. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_random.py +0 -0
  295. {datachain-0.30.7 → datachain-0.31.0}/tests/func/functions/test_string.py +0 -0
  296. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/__init__.py +0 -0
  297. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running-mask0.png +0 -0
  298. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running-mask1.png +0 -0
  299. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/running.jpg +0 -0
  300. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/data/ships.jpg +0 -0
  301. {datachain-0.30.7 → datachain-0.31.0}/tests/func/model/test_yolo.py +0 -0
  302. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_audio.py +0 -0
  303. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_batching.py +0 -0
  304. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_catalog.py +0 -0
  305. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_client.py +0 -0
  306. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_cloud_transfer.py +0 -0
  307. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_data_storage.py +0 -0
  308. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datachain.py +0 -0
  309. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datachain_merge.py +0 -0
  310. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_dataset_query.py +0 -0
  311. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_datasets.py +0 -0
  312. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_delta.py +0 -0
  313. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_feature_pickling.py +0 -0
  314. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_file.py +0 -0
  315. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_hf.py +0 -0
  316. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_hidden_field.py +0 -0
  317. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_image.py +0 -0
  318. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_listing.py +0 -0
  319. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_ls.py +0 -0
  320. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_meta_formats.py +0 -0
  321. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_metastore.py +0 -0
  322. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_metrics.py +0 -0
  323. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_mutate.py +0 -0
  324. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_pull.py +0 -0
  325. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_pytorch.py +0 -0
  326. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_query.py +0 -0
  327. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_database.py +0 -0
  328. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_dataset_remote.py +0 -0
  329. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_read_dataset_version_specifiers.py +0 -0
  330. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_retry.py +0 -0
  331. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_session.py +0 -0
  332. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_studio_datetime_parsing.py +0 -0
  333. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_to_database.py +0 -0
  334. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_toolkit.py +0 -0
  335. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_video.py +0 -0
  336. {datachain-0.30.7 → datachain-0.31.0}/tests/func/test_warehouse.py +0 -0
  337. {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class.py +0 -0
  338. {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_exception.py +0 -0
  339. {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_parallel.py +0 -0
  340. {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/feature_class_parallel_data_model.py +0 -0
  341. {datachain-0.30.7 → datachain-0.31.0}/tests/scripts/name_len_slow.py +0 -0
  342. {datachain-0.30.7 → datachain-0.31.0}/tests/test_atomicity.py +0 -0
  343. {datachain-0.30.7 → datachain-0.31.0}/tests/test_cli_e2e.py +0 -0
  344. {datachain-0.30.7 → datachain-0.31.0}/tests/test_import_time.py +0 -0
  345. {datachain-0.30.7 → datachain-0.31.0}/tests/test_query_e2e.py +0 -0
  346. {datachain-0.30.7 → datachain-0.31.0}/tests/test_telemetry.py +0 -0
  347. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/__init__.py +0 -0
  348. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/__init__.py +0 -0
  349. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/conftest.py +0 -0
  350. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_arrow.py +0 -0
  351. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_audio.py +0 -0
  352. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_clip.py +0 -0
  353. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain.py +0 -0
  354. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain_bootstrap.py +0 -0
  355. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_datachain_merge.py +0 -0
  356. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_diff.py +0 -0
  357. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_feature.py +0 -0
  358. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_feature_utils.py +0 -0
  359. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_file.py +0 -0
  360. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_hf.py +0 -0
  361. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_image.py +0 -0
  362. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_listing_info.py +0 -0
  363. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_namespace.py +0 -0
  364. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_partition_by.py +0 -0
  365. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_project.py +0 -0
  366. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_python_to_sql.py +0 -0
  367. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_schema.py +0 -0
  368. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_settings.py +0 -0
  369. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_signal_schema.py +0 -0
  370. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_sql_to_python.py +0 -0
  371. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_text.py +0 -0
  372. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_udf.py +0 -0
  373. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_udf_signature.py +0 -0
  374. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_utils.py +0 -0
  375. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/lib/test_webdataset.py +0 -0
  376. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/__init__.py +0 -0
  377. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_bbox.py +0 -0
  378. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_pose.py +0 -0
  379. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_segment.py +0 -0
  380. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/model/test_utils.py +0 -0
  381. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/__init__.py +0 -0
  382. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/__init__.py +0 -0
  383. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/test_types.py +0 -0
  384. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/sqlite/test_utils.py +0 -0
  385. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_array.py +0 -0
  386. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_conditional.py +0 -0
  387. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_path.py +0 -0
  388. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_random.py +0 -0
  389. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_selectable.py +0 -0
  390. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/sql/test_string.py +0 -0
  391. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_asyn.py +0 -0
  392. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cache.py +0 -0
  393. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_catalog.py +0 -0
  394. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_catalog_loader.py +0 -0
  395. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cli_datasets.py +0 -0
  396. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_cli_parsing.py +0 -0
  397. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client.py +0 -0
  398. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client_gcs.py +0 -0
  399. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_client_s3.py +0 -0
  400. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_config.py +0 -0
  401. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_data_storage.py +0 -0
  402. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_database_engine.py +0 -0
  403. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_dataset.py +0 -0
  404. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_dispatch.py +0 -0
  405. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_fileslice.py +0 -0
  406. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_func.py +0 -0
  407. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_listing.py +0 -0
  408. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_metastore.py +0 -0
  409. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_module_exports.py +0 -0
  410. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_pytorch.py +0 -0
  411. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query.py +0 -0
  412. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query_metrics.py +0 -0
  413. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_query_params.py +0 -0
  414. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_script_meta.py +0 -0
  415. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_semver.py +0 -0
  416. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_serializer.py +0 -0
  417. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_session.py +0 -0
  418. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_utils.py +0 -0
  419. {datachain-0.30.7 → datachain-0.31.0}/tests/unit/test_warehouse.py +0 -0
  420. {datachain-0.30.7 → datachain-0.31.0}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datachain
3
- Version: 0.30.7
3
+ Version: 0.31.0
4
4
  Summary: Wrangle unstructured AI data at scale
5
5
  Author-email: Dmitry Petrov <support@dvc.org>
6
6
  License-Expression: Apache-2.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(self, content: bytes, file_name: str) -> Response[FileUploadData]:
413
- data = {
414
- "file_content": base64.b64encode(content).decode("utf-8"),
415
- "file_name": file_name,
416
- }
417
- return self._send_request("datachain/upload-file", data)
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/job", data)
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
- return self._send_request(
460
- "datachain/jobs",
461
- {"status": status, "limit": limit} if status else {"limit": limit},
462
- method="GET",
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/job/{job_id}/cancel"
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("job", {}).get("id")
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("job", {}).get("url"))
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
- file_content = f.read()
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 = response.data.get("blob", {}).get("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.get("jobs", [])
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.get("clusters", [])
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datachain
3
- Version: 0.30.7
3
+ Version: 0.31.0
4
4
  Summary: Wrangle unstructured AI data at scale
5
5
  Author-email: Dmitry Petrov <support@dvc.org>
6
6
  License-Expression: Apache-2.0
@@ -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/job/{job_id}/cancel", json={})
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/job",
365
- json={"job": {"id": 1, "url": "https://example.com"}},
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 first_request.url == f"{STUDIO_URL}/api/datachain/upload-file"
425
- assert first_request.json() == {
426
- "file_content": "ZmlsZSBjb250ZW50",
427
- "file_name": "file.txt",
428
- "team_name": "team_name",
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/job"
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/job",
460
- json={"job": {"id": 1, "url": "https://example.com"}},
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/job"
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/job",
522
- json={"job": {"id": 1, "url": "https://example.com"}},
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