darwin-py 3.5.2__tar.gz → 3.5.4__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.
Files changed (234) hide show
  1. {darwin_py-3.5.2 → darwin_py-3.5.4}/PKG-INFO +1 -1
  2. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/cli.py +1 -0
  3. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/cli_functions.py +6 -1
  4. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/client.py +4 -3
  5. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/datatypes.py +60 -18
  6. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/properties.py +87 -6
  7. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/properties/test_get.py +26 -0
  8. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/importer.py +285 -32
  9. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/options.py +7 -0
  10. darwin_py-3.5.4/darwin/version/__init__.py +1 -0
  11. {darwin_py-3.5.2 → darwin_py-3.5.4}/pyproject.toml +1 -1
  12. darwin_py-3.5.2/darwin/version/__init__.py +0 -1
  13. {darwin_py-3.5.2 → darwin_py-3.5.4}/LICENSE +0 -0
  14. {darwin_py-3.5.2 → darwin_py-3.5.4}/README.md +0 -0
  15. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/__init__.py +0 -0
  16. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/backend_v2.py +0 -0
  17. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/config.py +0 -0
  18. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/__init__.py +0 -0
  19. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/download_manager.py +0 -0
  20. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/identifier.py +0 -0
  21. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/local_dataset.py +0 -0
  22. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/release.py +0 -0
  23. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/remote_dataset.py +0 -0
  24. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/remote_dataset_v2.py +0 -0
  25. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/split_manager.py +0 -0
  26. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/storage_uploader.py +0 -0
  27. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/upload_manager.py +0 -0
  28. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/dataset/utils.py +0 -0
  29. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/doc_enum.py +0 -0
  30. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exceptions.py +0 -0
  31. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/__init__.py +0 -0
  32. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/exporter.py +0 -0
  33. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/__init__.py +0 -0
  34. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/coco.py +0 -0
  35. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/cvat.py +0 -0
  36. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/darwin.py +0 -0
  37. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/dataloop.py +0 -0
  38. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/helpers/__init__.py +0 -0
  39. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/helpers/yolo_class_builder.py +0 -0
  40. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/instance_mask.py +0 -0
  41. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/mask.py +0 -0
  42. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/nifti.py +0 -0
  43. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/numpy_encoder.py +0 -0
  44. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/pascalvoc.py +0 -0
  45. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/semantic_mask.py +0 -0
  46. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/semantic_mask_grey.py +0 -0
  47. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/semantic_mask_index.py +0 -0
  48. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/yolo.py +0 -0
  49. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/exporter/formats/yolo_segmented.py +0 -0
  50. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/extractor/__init__.py +0 -0
  51. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/extractor/video.py +0 -0
  52. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/__init__.py +0 -0
  53. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/__init__.py +0 -0
  54. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/client.py +0 -0
  55. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/datasets/__init__.py +0 -0
  56. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/datasets/create_dataset.py +0 -0
  57. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/datasets/get_dataset.py +0 -0
  58. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/datasets/list_datasets.py +0 -0
  59. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/datasets/remove_dataset.py +0 -0
  60. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/__init__.py +0 -0
  61. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/archive_items.py +0 -0
  62. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/assign_items.py +0 -0
  63. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/delete_items.py +0 -0
  64. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/get.py +0 -0
  65. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/move_items.py +0 -0
  66. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/move_items_to_folder.py +0 -0
  67. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/restore_items.py +0 -0
  68. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/set_item_layout.py +0 -0
  69. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/set_item_priority.py +0 -0
  70. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/set_stage_to_items.py +0 -0
  71. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/tag_items.py +0 -0
  72. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/untag_items.py +0 -0
  73. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/items/uploads.py +0 -0
  74. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/properties/__init__.py +0 -0
  75. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/properties/create.py +0 -0
  76. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/properties/get.py +0 -0
  77. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/properties/update.py +0 -0
  78. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/team/__init__.py +0 -0
  79. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/team/get_raw.py +0 -0
  80. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/team/get_team.py +0 -0
  81. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/types/__init__.py +0 -0
  82. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/types/common.py +0 -0
  83. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/types/item.py +0 -0
  84. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/types/query.py +0 -0
  85. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/utils/pathutils.py +0 -0
  86. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/workflows/__init__.py +0 -0
  87. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/workflows/get_workflow.py +0 -0
  88. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/workflows/get_workflows.py +0 -0
  89. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/core/workflows/list_workflows.py +0 -0
  90. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/__init__.py +0 -0
  91. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/advanced_filters.py +0 -0
  92. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/darwinV2.py +0 -0
  93. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/dataset.py +0 -0
  94. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/item.py +0 -0
  95. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/page.py +0 -0
  96. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/pydantic_base.py +0 -0
  97. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/release.py +0 -0
  98. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/sorting.py +0 -0
  99. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/team.py +0 -0
  100. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/team_member_role.py +0 -0
  101. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/typing.py +0 -0
  102. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/validators.py +0 -0
  103. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/data_objects/workflow.py +0 -0
  104. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/exceptions.py +0 -0
  105. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/helpers/__init__.py +0 -0
  106. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/helpers/assertion.py +0 -0
  107. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/helpers/exception_handler.py +0 -0
  108. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/__init__.py +0 -0
  109. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/client.py +0 -0
  110. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/__init__.py +0 -0
  111. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/base.py +0 -0
  112. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/dataset.py +0 -0
  113. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/item.py +0 -0
  114. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/stage.py +0 -0
  115. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/team.py +0 -0
  116. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/team_member.py +0 -0
  117. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/v7_id.py +0 -0
  118. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/objects/workflow.py +0 -0
  119. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/__init__.py +0 -0
  120. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/dataset.py +0 -0
  121. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/item.py +0 -0
  122. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/item_id.py +0 -0
  123. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/stage.py +0 -0
  124. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/team_member.py +0 -0
  125. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/queries/workflow.py +0 -0
  126. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/meta/types/__init__.py +0 -0
  127. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/pydantic_base.py +0 -0
  128. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/__init__.py +0 -0
  129. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/__init__.py +0 -0
  130. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/__init__.py +0 -0
  131. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/fixtures.py +0 -0
  132. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/test_create_dataset.py +0 -0
  133. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/test_delete_dataset.py +0 -0
  134. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/test_get_dataset.py +0 -0
  135. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/datasets/test_list_datasets.py +0 -0
  136. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/fixtures.py +0 -0
  137. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/__init__.py +0 -0
  138. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/fixtures.py +0 -0
  139. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_archive_items.py +0 -0
  140. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_assign_items.py +0 -0
  141. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_delete_items.py +0 -0
  142. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_get_items.py +0 -0
  143. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_item_data_object.py +0 -0
  144. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_move_items.py +0 -0
  145. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_move_items_to_folder.py +0 -0
  146. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_restore_items.py +0 -0
  147. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_set_item_layout.py +0 -0
  148. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_set_priority.py +0 -0
  149. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_set_stage_to_items.py +0 -0
  150. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_tag_items.py +0 -0
  151. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_untag_items.py +0 -0
  152. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/items/test_upload_items.py +0 -0
  153. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/properties/__init__.py +0 -0
  154. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/properties/test_create.py +0 -0
  155. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/properties/test_update.py +0 -0
  156. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/test_client.py +0 -0
  157. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/test_query.py +0 -0
  158. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/types/__init__.py +0 -0
  159. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/types/test_querystring.py +0 -0
  160. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/workflows/__init__.py +0 -0
  161. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/workflows/test_get_workflow.py +0 -0
  162. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/workflows/test_get_workflows.py +0 -0
  163. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/core/workflows/test_list_workflows.py +0 -0
  164. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data/.v7/metadata.json +0 -0
  165. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data/.v7/metadata_no_item_level_properties.json +0 -0
  166. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data/.v7/metadata_with_item_level_properties.json +0 -0
  167. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data/base_annotation.json +0 -0
  168. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/__init__.py +0 -0
  169. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/fixtures.py +0 -0
  170. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_advanced_filters.py +0 -0
  171. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_darwin.py +0 -0
  172. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_general_darwin_objects.py +0 -0
  173. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_page.py +0 -0
  174. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_properties.py +0 -0
  175. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_sorting.py +0 -0
  176. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_team.py +0 -0
  177. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/test_validators.py +0 -0
  178. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/__init__.py +0 -0
  179. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/dataset.json +0 -0
  180. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/edge.json +0 -0
  181. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/stage.json +0 -0
  182. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/stage_config.json +0 -0
  183. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/user.json +0 -0
  184. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/data/workflow.json +0 -0
  185. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/invalidvaluefortest.py +0 -0
  186. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_wfdataset.py +0 -0
  187. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_wfedge.py +0 -0
  188. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_wfstage.py +0 -0
  189. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_wfstage_config.py +0 -0
  190. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_wfuser.py +0 -0
  191. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/data_objects/workflow/test_workflow.py +0 -0
  192. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/fixtures.py +0 -0
  193. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/__init__.py +0 -0
  194. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/fixtures.py +0 -0
  195. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/fixtures.py +0 -0
  196. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_datasetmeta.py +0 -0
  197. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_itemmeta.py +0 -0
  198. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_stagemeta.py +0 -0
  199. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_teammeta.py +0 -0
  200. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_v7_id.py +0 -0
  201. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/objects/test_workflowmeta.py +0 -0
  202. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_dataset.py +0 -0
  203. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_item.py +0 -0
  204. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_item_id.py +0 -0
  205. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_stage.py +0 -0
  206. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_team_member.py +0 -0
  207. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/queries/test_workflow.py +0 -0
  208. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/future/tests/meta/test_client.py +0 -0
  209. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/__init__.py +0 -0
  210. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/__init__.py +0 -0
  211. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/coco.py +0 -0
  212. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/csv_tags.py +0 -0
  213. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/csv_tags_video.py +0 -0
  214. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/darwin.py +0 -0
  215. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/dataloop.py +0 -0
  216. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/labelbox.py +0 -0
  217. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/labelbox_schemas.py +0 -0
  218. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/nifti.py +0 -0
  219. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/nifti_schemas.py +0 -0
  220. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/pascal_voc.py +0 -0
  221. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/superannotate.py +0 -0
  222. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/importer/formats/superannotate_schemas.py +0 -0
  223. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/item.py +0 -0
  224. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/item_sorter.py +0 -0
  225. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/path_utils.py +0 -0
  226. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/torch/__init__.py +0 -0
  227. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/torch/dataset.py +0 -0
  228. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/torch/transforms.py +0 -0
  229. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/torch/utils.py +0 -0
  230. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/utils/__init__.py +0 -0
  231. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/utils/flatten_list.py +0 -0
  232. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/utils/get_item_count.py +0 -0
  233. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/utils/utils.py +0 -0
  234. {darwin_py-3.5.2 → darwin_py-3.5.4}/darwin/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: darwin-py
3
- Version: 3.5.2
3
+ Version: 3.5.4
4
4
  Summary: Library and command line interface for darwin.v7labs.com
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -175,6 +175,7 @@ def _run(args: Namespace, parser: ArgumentParser) -> None:
175
175
  args.retry_timeout,
176
176
  args.retry_interval,
177
177
  args.team,
178
+ multi_processed=not args.no_multi_processed,
178
179
  )
179
180
  elif args.action == "import":
180
181
  f.dataset_import(
@@ -364,6 +364,7 @@ def pull_dataset(
364
364
  retry_timeout: int = 600,
365
365
  retry_interval: int = 10,
366
366
  team: Optional[str] = None,
367
+ multi_processed: bool = True,
367
368
  ) -> None:
368
369
  """
369
370
  Downloads a remote dataset (images and annotations) in the datasets directory.
@@ -392,6 +393,9 @@ def pull_dataset(
392
393
  If retrying, time to wait between retries of checking if the release is ready for download.
393
394
  team: Optional[str]
394
395
  Specify the team to use for the operation.
396
+ multi_processed: bool
397
+ If True (default), uses multiprocessing to download files in parallel.
398
+ If False, the dataset is downloaded on a single process.
395
399
  """
396
400
  identifier: DatasetIdentifier = DatasetIdentifier.parse(dataset_slug)
397
401
  if team:
@@ -427,6 +431,7 @@ def pull_dataset(
427
431
  retry=retry,
428
432
  retry_timeout=retry_timeout,
429
433
  retry_interval=retry_interval,
434
+ multi_processed=multi_processed,
430
435
  )
431
436
  print_new_version_info(client)
432
437
  except NotFound:
@@ -1512,7 +1517,7 @@ def print_new_version_info(client: Optional[Client] = None) -> None:
1512
1517
  if not client or not client.newer_darwin_version:
1513
1518
  return
1514
1519
 
1515
- (a, b, c) = tuple(client.newer_darwin_version)
1520
+ a, b, c = tuple(client.newer_darwin_version)
1516
1521
 
1517
1522
  console = Console(theme=_console_theme(), stderr=True)
1518
1523
  console.print(
@@ -667,13 +667,14 @@ class Client:
667
667
  the_team_slug: str = the_team.slug
668
668
 
669
669
  response_data = self._post(
670
- f"/v3/teams/{the_team_slug}/reports/annotator/jobs",
670
+ f"/v3/teams/{the_team_slug}/reports/jobs",
671
671
  {
672
672
  "start": start.isoformat(timespec="seconds"),
673
673
  "stop": stop.isoformat(timespec="seconds"),
674
674
  "dataset_ids": dataset_ids,
675
675
  "group_by": [option.value for option in group_by],
676
676
  "format": "csv",
677
+ "type": "annotator",
677
678
  "metrics": [
678
679
  "active_time",
679
680
  "total_annotations",
@@ -699,7 +700,7 @@ class Client:
699
700
  retry=retry_if_exception_type(JobPendingException),
700
701
  )
701
702
  def poll_pending_report_job(self, team_slug: str, job_id: str) -> ReportJob:
702
- job_status_url = f"/v3/teams/{team_slug}/reports/annotator/jobs/{job_id}"
703
+ job_status_url = f"/v3/teams/{team_slug}/reports/jobs/{job_id}"
703
704
 
704
705
  response_data = self._get(job_status_url, team_slug)
705
706
  report_job = ReportJob.model_validate(response_data)
@@ -1089,7 +1090,7 @@ class Client:
1089
1090
  if response.status_code == 404:
1090
1091
  raise NotFound(url)
1091
1092
 
1092
- if response.status_code == 413:
1093
+ if response.status_code in (413, 414):
1093
1094
  raise RequestEntitySizeExceeded(url)
1094
1095
 
1095
1096
  if has_json_content_type(response):
@@ -23,7 +23,7 @@ from pydantic import BaseModel
23
23
  try:
24
24
  from numpy.typing import NDArray
25
25
  except ImportError:
26
- NDArray = Any # type:ignore
26
+ NDArray = Any # type: ignore
27
27
 
28
28
  if TYPE_CHECKING:
29
29
  from darwin.client import Client
@@ -33,6 +33,8 @@ from darwin.future.data_objects.properties import (
33
33
  PropertyGranularity,
34
34
  PropertyType,
35
35
  SelectedProperty,
36
+ TriggerCondition,
37
+ property_key,
36
38
  )
37
39
  from darwin.path_utils import construct_full_path, is_properties_enabled, parse_metadata
38
40
 
@@ -42,7 +44,7 @@ NumberLike = Union[
42
44
  int, float
43
45
  ] # Used for functions that can take either an int or a float
44
46
  # Used for functions that _genuinely_ don't know what type they're dealing with, such as those that test if something is of a certain type.
45
- UnknownType = Any # type:ignore
47
+ UnknownType = Any # type: ignore
46
48
 
47
49
  # Specific types
48
50
 
@@ -492,6 +494,37 @@ class Property:
492
494
  # Granularity of the property
493
495
  granularity: PropertyGranularity = PropertyGranularity("section")
494
496
 
497
+ # Name of the parent property as declared in ``.v7/metadata.json``.
498
+ parent_name: Optional[str] = None
499
+
500
+ # Name-based trigger condition (parent value names).
501
+ trigger_condition: Optional[TriggerCondition] = None
502
+
503
+ @classmethod
504
+ def from_metadata_dict(cls, p: dict[str, Any]) -> "Property":
505
+ """
506
+ Build a ``Property`` from a ``.v7/metadata.json`` entry. Raises
507
+ ``ValueError`` when ``parent_name`` and ``trigger_condition`` are
508
+ not both set or both omitted.
509
+ """
510
+ parent_name = p.get("parent_name")
511
+ raw_trigger = p.get("trigger_condition")
512
+ _validate_property_metadata_nesting(parent_name, raw_trigger)
513
+ return cls(
514
+ name=p["name"],
515
+ type=p["type"],
516
+ required=p["required"],
517
+ property_values=p["property_values"],
518
+ description=p.get("description"),
519
+ granularity=PropertyGranularity(p.get("granularity", "section")),
520
+ parent_name=parent_name,
521
+ trigger_condition=(
522
+ TriggerCondition.model_validate(raw_trigger)
523
+ if raw_trigger is not None
524
+ else None
525
+ ),
526
+ )
527
+
495
528
 
496
529
  @dataclass
497
530
  class PropertyClass:
@@ -503,6 +536,22 @@ class PropertyClass:
503
536
  properties: Optional[list[Property]] = None
504
537
 
505
538
 
539
+ def _validate_property_metadata_nesting(
540
+ parent_name: Any, trigger_condition: Any
541
+ ) -> None:
542
+ """
543
+ Enforce the ``parent_name`` ↔ ``trigger_condition`` invariant for a
544
+ ``.v7/metadata.json`` property: the two SDK-local nesting fields must be
545
+ set together or both omitted.
546
+ """
547
+ if (parent_name is None) != (trigger_condition is None):
548
+ raise ValueError(
549
+ "metadata.json property has inconsistent nesting metadata: "
550
+ "'parent_name' and 'trigger_condition' must both be present or "
551
+ "both omitted."
552
+ )
553
+
554
+
506
555
  def parse_property_classes(metadata: dict[str, Any]) -> list[PropertyClass]:
507
556
  """
508
557
  Parses the metadata file and returns a list of PropertyClass objects.
@@ -525,15 +574,7 @@ def parse_property_classes(metadata: dict[str, Any]) -> list[PropertyClass]:
525
574
  "properties" in metadata_cls
526
575
  ), "Metadata class does not contain properties"
527
576
  properties = [
528
- Property(
529
- name=p["name"],
530
- type=p["type"],
531
- required=p["required"],
532
- property_values=p["property_values"],
533
- description=p.get("description"),
534
- granularity=PropertyGranularity(p.get("granularity", "section")),
535
- )
536
- for p in metadata_cls["properties"]
577
+ Property.from_metadata_dict(p) for p in metadata_cls["properties"]
537
578
  ]
538
579
  classes.append(
539
580
  PropertyClass(
@@ -1664,13 +1705,14 @@ class TeamPropertyLookups:
1664
1705
  self.item_properties = {}
1665
1706
 
1666
1707
  for prop in team_properties:
1667
- if (
1668
- prop.granularity.value == "section"
1669
- or prop.granularity.value == "annotation"
1670
- ):
1671
- self.annotation_properties[(prop.name, prop.annotation_class_id)] = prop
1672
- elif prop.granularity.value == "item":
1673
- self.item_properties[prop.name] = prop
1708
+ self.register(prop)
1709
+
1710
+ def register(self, prop: FullProperty) -> None:
1711
+ """Place ``prop`` into the appropriate lookup bucket by granularity."""
1712
+ if prop.granularity.value in ("section", "annotation"):
1713
+ self.annotation_properties[property_key(prop)] = prop
1714
+ elif prop.granularity.value == "item":
1715
+ self.item_properties[prop.name] = prop
1674
1716
 
1675
1717
 
1676
1718
  class ReportJob(BaseModel):
@@ -4,9 +4,9 @@ import json
4
4
  import os
5
5
  from enum import Enum
6
6
  from pathlib import Path
7
- from typing import List, Literal, Optional, Tuple, Union
7
+ from typing import Any, Dict, List, Literal, Optional, Tuple, Union
8
8
 
9
- from pydantic import field_validator
9
+ from pydantic import field_validator, model_validator
10
10
 
11
11
  from darwin.future.data_objects.pydantic_base import DefaultDarwin
12
12
 
@@ -14,12 +14,56 @@ PropertyType = Literal[
14
14
  "multi_select",
15
15
  "single_select",
16
16
  "text",
17
+ "audio",
17
18
  "attributes",
18
19
  "instance_id",
19
20
  "directional_vector",
20
21
  ]
21
22
 
22
23
 
24
+ class TriggerCondition(DefaultDarwin):
25
+ type: Literal["value_match", "any_value"]
26
+ property_value_ids: Optional[List[str]] = None
27
+ values: Optional[List[str]] = None
28
+
29
+ @model_validator(mode="before")
30
+ @classmethod
31
+ def _validate_shape(cls, data: Any) -> Any:
32
+ if not isinstance(data, dict):
33
+ return data
34
+ trigger_type = data.get("type")
35
+ values = data.get("values")
36
+ property_value_ids = data.get("property_value_ids")
37
+ if trigger_type == "any_value":
38
+ if values:
39
+ raise ValueError(
40
+ "trigger_condition.values must be empty/None for 'any_value'"
41
+ )
42
+ if property_value_ids:
43
+ raise ValueError(
44
+ "trigger_condition.property_value_ids must be empty/None for 'any_value'"
45
+ )
46
+ elif trigger_type == "value_match":
47
+ if not values and not property_value_ids:
48
+ raise ValueError(
49
+ "trigger_condition must set either 'values' (names) or "
50
+ "'property_value_ids' (UUIDs) for 'value_match'"
51
+ )
52
+ return data
53
+
54
+ def to_api_payload(self) -> Dict[str, Any]:
55
+ payload: Dict[str, Any] = {"type": self.type}
56
+ if self.type == "value_match":
57
+ if not self.property_value_ids:
58
+ raise ValueError(
59
+ "TriggerCondition.to_api_payload requires non-empty "
60
+ "property_value_ids for 'value_match'. Resolve "
61
+ "'values' (names) to UUIDs first via _resolve_parent_property_for_create."
62
+ )
63
+ payload["property_value_ids"] = list(self.property_value_ids)
64
+ return payload
65
+
66
+
23
67
  class PropertyGranularity(str, Enum):
24
68
  section = "section"
25
69
  annotation = "annotation"
@@ -85,11 +129,34 @@ class FullProperty(DefaultDarwin):
85
129
  dataset_ids: Optional[List[int]] = None
86
130
  options: Optional[List[PropertyValue]] = None
87
131
  granularity: PropertyGranularity = PropertyGranularity("section")
132
+ parent_name: Optional[str] = None
133
+ parent_property_id: Optional[str] = None
134
+ trigger_condition: Optional[TriggerCondition] = None
88
135
 
89
136
  def to_create_endpoint(
90
137
  self,
91
138
  ) -> dict:
92
- include_fields = {
139
+ if (
140
+ self.granularity != PropertyGranularity.item
141
+ and self.annotation_class_id is None
142
+ ):
143
+ raise ValueError("annotation_class_id must be set")
144
+
145
+ # Nesting fields are coherent: all three set, or none set.
146
+ nesting_set = (
147
+ self.parent_name is not None,
148
+ self.parent_property_id is not None,
149
+ self.trigger_condition is not None,
150
+ )
151
+ if any(nesting_set) and not all(nesting_set):
152
+ raise ValueError(
153
+ "parent_name, parent_property_id and trigger_condition must "
154
+ "all be set or all be None. Resolve parent_name to a "
155
+ "parent_property_id (and trigger_condition.values to "
156
+ "property_value_ids) before serialising."
157
+ )
158
+
159
+ include_fields: Dict[str, Any] = {
93
160
  "name": True,
94
161
  "type": True,
95
162
  "required": True,
@@ -99,12 +166,15 @@ class FullProperty(DefaultDarwin):
99
166
  if self.type != "text":
100
167
  include_fields["property_values"] = {"__all__": {"value", "color", "type"}}
101
168
  if self.granularity != PropertyGranularity.item:
102
- if self.annotation_class_id is None:
103
- raise ValueError("annotation_class_id must be set")
104
169
  include_fields["annotation_class_id"] = True
105
170
  if self.dataset_ids is not None:
106
171
  include_fields["dataset_ids"] = True
107
- return self.model_dump(mode="json", include=include_fields)
172
+
173
+ payload = self.model_dump(mode="json", include=include_fields)
174
+ if all(nesting_set):
175
+ payload["parent_property_id"] = self.parent_property_id
176
+ payload["trigger_condition"] = self.trigger_condition.to_api_payload()
177
+ return payload
108
178
 
109
179
  def to_update_endpoint(self) -> Tuple[str, dict]:
110
180
  if self.id is None:
@@ -113,6 +183,10 @@ class FullProperty(DefaultDarwin):
113
183
  updated_base = self.to_create_endpoint()
114
184
  updated_base.pop("annotation_class_id", None) # Can't update this field
115
185
  del updated_base["granularity"] # Can't update this field
186
+ if "parent_property_id" in updated_base:
187
+ del updated_base["parent_property_id"]
188
+ if "trigger_condition" in updated_base:
189
+ del updated_base["trigger_condition"]
116
190
  return self.id, updated_base
117
191
 
118
192
 
@@ -172,3 +246,10 @@ class SelectedProperty(DefaultDarwin):
172
246
  name: str
173
247
  type: Optional[str] = None
174
248
  value: Optional[str] = None
249
+
250
+
251
+ PropertyKey = Tuple[str, Optional[int]]
252
+
253
+
254
+ def property_key(prop: "FullProperty") -> PropertyKey:
255
+ return (prop.name, prop.annotation_class_id)
@@ -36,6 +36,32 @@ def test_get_team_properties(
36
36
  assert properties[0] == base_property_object
37
37
 
38
38
 
39
+ @responses.activate
40
+ def test_get_team_properties_parses_audio_type(
41
+ base_client: ClientCore, base_property_object: FullProperty
42
+ ) -> None:
43
+ # Regression: a team with an `audio` property must not break listing team
44
+ # properties (which every darwin-py annotation import does via
45
+ # TeamPropertyLookups.from_team). Reproduces the ValidationError customers
46
+ # hit once an audio class exists in the workspace.
47
+ audio_property = base_property_object.model_copy(deep=True)
48
+ audio_property.type = "audio"
49
+ audio_property.options = None
50
+ audio_property.property_values = None
51
+ response_data = {"properties": [audio_property.model_dump(mode="json")]}
52
+ responses.add(
53
+ responses.GET,
54
+ f"{base_client.config.base_url}api/v2/teams/{base_client.config.default_team}/properties",
55
+ json=response_data,
56
+ status=200,
57
+ )
58
+
59
+ properties = get_team_properties(base_client)
60
+
61
+ assert len(properties) == 1
62
+ assert properties[0].type == "audio"
63
+
64
+
39
65
  @responses.activate
40
66
  def test_get_team_full_properties(
41
67
  base_client: ClientCore, base_property_object: FullProperty