darwin-py 3.5.2__tar.gz → 3.5.3__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.
- {darwin_py-3.5.2 → darwin_py-3.5.3}/PKG-INFO +1 -1
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/cli.py +1 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/cli_functions.py +6 -1
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/datatypes.py +60 -18
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/properties.py +86 -6
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/importer.py +285 -32
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/options.py +7 -0
- darwin_py-3.5.3/darwin/version/__init__.py +1 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/pyproject.toml +1 -1
- darwin_py-3.5.2/darwin/version/__init__.py +0 -1
- {darwin_py-3.5.2 → darwin_py-3.5.3}/LICENSE +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/README.md +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/backend_v2.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/client.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/config.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/download_manager.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/identifier.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/local_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/release.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/remote_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/remote_dataset_v2.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/split_manager.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/storage_uploader.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/upload_manager.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/dataset/utils.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/doc_enum.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exceptions.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/exporter.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/coco.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/cvat.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/darwin.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/dataloop.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/helpers/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/helpers/yolo_class_builder.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/instance_mask.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/mask.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/nifti.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/numpy_encoder.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/pascalvoc.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/semantic_mask.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/semantic_mask_grey.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/semantic_mask_index.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/yolo.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/exporter/formats/yolo_segmented.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/extractor/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/extractor/video.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/client.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/datasets/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/datasets/create_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/datasets/get_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/datasets/list_datasets.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/datasets/remove_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/archive_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/assign_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/delete_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/get.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/move_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/move_items_to_folder.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/restore_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/set_item_layout.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/set_item_priority.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/set_stage_to_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/tag_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/untag_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/items/uploads.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/properties/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/properties/create.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/properties/get.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/properties/update.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/team/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/team/get_raw.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/team/get_team.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/types/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/types/common.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/types/item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/types/query.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/utils/pathutils.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/workflows/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/workflows/get_workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/workflows/get_workflows.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/core/workflows/list_workflows.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/advanced_filters.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/darwinV2.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/page.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/pydantic_base.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/release.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/sorting.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/team.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/team_member_role.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/typing.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/validators.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/data_objects/workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/exceptions.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/helpers/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/helpers/assertion.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/helpers/exception_handler.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/client.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/base.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/stage.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/team.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/team_member.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/v7_id.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/objects/workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/item_id.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/stage.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/team_member.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/queries/workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/meta/types/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/pydantic_base.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/test_create_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/test_delete_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/test_get_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/datasets/test_list_datasets.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_archive_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_assign_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_delete_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_get_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_item_data_object.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_move_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_move_items_to_folder.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_restore_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_set_item_layout.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_set_priority.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_set_stage_to_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_tag_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_untag_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/items/test_upload_items.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/properties/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/properties/test_create.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/properties/test_get.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/properties/test_update.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/test_client.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/test_query.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/types/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/types/test_querystring.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/workflows/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/workflows/test_get_workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/workflows/test_get_workflows.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/core/workflows/test_list_workflows.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data/.v7/metadata.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data/.v7/metadata_no_item_level_properties.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data/.v7/metadata_with_item_level_properties.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data/base_annotation.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_advanced_filters.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_darwin.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_general_darwin_objects.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_page.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_properties.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_sorting.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_team.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/test_validators.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/dataset.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/edge.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/stage.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/stage_config.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/user.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/data/workflow.json +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/invalidvaluefortest.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_wfdataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_wfedge.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_wfstage.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_wfstage_config.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_wfuser.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/data_objects/workflow/test_workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/fixtures.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_datasetmeta.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_itemmeta.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_stagemeta.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_teammeta.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_v7_id.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/objects/test_workflowmeta.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_item_id.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_stage.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_team_member.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/queries/test_workflow.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/future/tests/meta/test_client.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/coco.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/csv_tags.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/csv_tags_video.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/darwin.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/dataloop.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/labelbox.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/labelbox_schemas.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/nifti.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/nifti_schemas.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/pascal_voc.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/superannotate.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/importer/formats/superannotate_schemas.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/item.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/item_sorter.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/path_utils.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/torch/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/torch/dataset.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/torch/transforms.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/torch/utils.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/utils/__init__.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/utils/flatten_list.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/utils/get_item_count.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/utils/utils.py +0 -0
- {darwin_py-3.5.2 → darwin_py-3.5.3}/darwin/validators.py +0 -0
|
@@ -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
|
-
|
|
1520
|
+
a, b, c = tuple(client.newer_darwin_version)
|
|
1516
1521
|
|
|
1517
1522
|
console = Console(theme=_console_theme(), stderr=True)
|
|
1518
1523
|
console.print(
|
|
@@ -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
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
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
|
|
|
@@ -20,6 +20,49 @@ PropertyType = Literal[
|
|
|
20
20
|
]
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
class TriggerCondition(DefaultDarwin):
|
|
24
|
+
type: Literal["value_match", "any_value"]
|
|
25
|
+
property_value_ids: Optional[List[str]] = None
|
|
26
|
+
values: Optional[List[str]] = None
|
|
27
|
+
|
|
28
|
+
@model_validator(mode="before")
|
|
29
|
+
@classmethod
|
|
30
|
+
def _validate_shape(cls, data: Any) -> Any:
|
|
31
|
+
if not isinstance(data, dict):
|
|
32
|
+
return data
|
|
33
|
+
trigger_type = data.get("type")
|
|
34
|
+
values = data.get("values")
|
|
35
|
+
property_value_ids = data.get("property_value_ids")
|
|
36
|
+
if trigger_type == "any_value":
|
|
37
|
+
if values:
|
|
38
|
+
raise ValueError(
|
|
39
|
+
"trigger_condition.values must be empty/None for 'any_value'"
|
|
40
|
+
)
|
|
41
|
+
if property_value_ids:
|
|
42
|
+
raise ValueError(
|
|
43
|
+
"trigger_condition.property_value_ids must be empty/None for 'any_value'"
|
|
44
|
+
)
|
|
45
|
+
elif trigger_type == "value_match":
|
|
46
|
+
if not values and not property_value_ids:
|
|
47
|
+
raise ValueError(
|
|
48
|
+
"trigger_condition must set either 'values' (names) or "
|
|
49
|
+
"'property_value_ids' (UUIDs) for 'value_match'"
|
|
50
|
+
)
|
|
51
|
+
return data
|
|
52
|
+
|
|
53
|
+
def to_api_payload(self) -> Dict[str, Any]:
|
|
54
|
+
payload: Dict[str, Any] = {"type": self.type}
|
|
55
|
+
if self.type == "value_match":
|
|
56
|
+
if not self.property_value_ids:
|
|
57
|
+
raise ValueError(
|
|
58
|
+
"TriggerCondition.to_api_payload requires non-empty "
|
|
59
|
+
"property_value_ids for 'value_match'. Resolve "
|
|
60
|
+
"'values' (names) to UUIDs first via _resolve_parent_property_for_create."
|
|
61
|
+
)
|
|
62
|
+
payload["property_value_ids"] = list(self.property_value_ids)
|
|
63
|
+
return payload
|
|
64
|
+
|
|
65
|
+
|
|
23
66
|
class PropertyGranularity(str, Enum):
|
|
24
67
|
section = "section"
|
|
25
68
|
annotation = "annotation"
|
|
@@ -85,11 +128,34 @@ class FullProperty(DefaultDarwin):
|
|
|
85
128
|
dataset_ids: Optional[List[int]] = None
|
|
86
129
|
options: Optional[List[PropertyValue]] = None
|
|
87
130
|
granularity: PropertyGranularity = PropertyGranularity("section")
|
|
131
|
+
parent_name: Optional[str] = None
|
|
132
|
+
parent_property_id: Optional[str] = None
|
|
133
|
+
trigger_condition: Optional[TriggerCondition] = None
|
|
88
134
|
|
|
89
135
|
def to_create_endpoint(
|
|
90
136
|
self,
|
|
91
137
|
) -> dict:
|
|
92
|
-
|
|
138
|
+
if (
|
|
139
|
+
self.granularity != PropertyGranularity.item
|
|
140
|
+
and self.annotation_class_id is None
|
|
141
|
+
):
|
|
142
|
+
raise ValueError("annotation_class_id must be set")
|
|
143
|
+
|
|
144
|
+
# Nesting fields are coherent: all three set, or none set.
|
|
145
|
+
nesting_set = (
|
|
146
|
+
self.parent_name is not None,
|
|
147
|
+
self.parent_property_id is not None,
|
|
148
|
+
self.trigger_condition is not None,
|
|
149
|
+
)
|
|
150
|
+
if any(nesting_set) and not all(nesting_set):
|
|
151
|
+
raise ValueError(
|
|
152
|
+
"parent_name, parent_property_id and trigger_condition must "
|
|
153
|
+
"all be set or all be None. Resolve parent_name to a "
|
|
154
|
+
"parent_property_id (and trigger_condition.values to "
|
|
155
|
+
"property_value_ids) before serialising."
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
include_fields: Dict[str, Any] = {
|
|
93
159
|
"name": True,
|
|
94
160
|
"type": True,
|
|
95
161
|
"required": True,
|
|
@@ -99,12 +165,15 @@ class FullProperty(DefaultDarwin):
|
|
|
99
165
|
if self.type != "text":
|
|
100
166
|
include_fields["property_values"] = {"__all__": {"value", "color", "type"}}
|
|
101
167
|
if self.granularity != PropertyGranularity.item:
|
|
102
|
-
if self.annotation_class_id is None:
|
|
103
|
-
raise ValueError("annotation_class_id must be set")
|
|
104
168
|
include_fields["annotation_class_id"] = True
|
|
105
169
|
if self.dataset_ids is not None:
|
|
106
170
|
include_fields["dataset_ids"] = True
|
|
107
|
-
|
|
171
|
+
|
|
172
|
+
payload = self.model_dump(mode="json", include=include_fields)
|
|
173
|
+
if all(nesting_set):
|
|
174
|
+
payload["parent_property_id"] = self.parent_property_id
|
|
175
|
+
payload["trigger_condition"] = self.trigger_condition.to_api_payload()
|
|
176
|
+
return payload
|
|
108
177
|
|
|
109
178
|
def to_update_endpoint(self) -> Tuple[str, dict]:
|
|
110
179
|
if self.id is None:
|
|
@@ -113,6 +182,10 @@ class FullProperty(DefaultDarwin):
|
|
|
113
182
|
updated_base = self.to_create_endpoint()
|
|
114
183
|
updated_base.pop("annotation_class_id", None) # Can't update this field
|
|
115
184
|
del updated_base["granularity"] # Can't update this field
|
|
185
|
+
if "parent_property_id" in updated_base:
|
|
186
|
+
del updated_base["parent_property_id"]
|
|
187
|
+
if "trigger_condition" in updated_base:
|
|
188
|
+
del updated_base["trigger_condition"]
|
|
116
189
|
return self.id, updated_base
|
|
117
190
|
|
|
118
191
|
|
|
@@ -172,3 +245,10 @@ class SelectedProperty(DefaultDarwin):
|
|
|
172
245
|
name: str
|
|
173
246
|
type: Optional[str] = None
|
|
174
247
|
value: Optional[str] = None
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
PropertyKey = Tuple[str, Optional[int]]
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def property_key(prop: "FullProperty") -> PropertyKey:
|
|
254
|
+
return (prop.name, prop.annotation_class_id)
|