diff --git a/README.md b/README.md index 1ae3672..7de8ed0 100644 --- a/README.md +++ b/README.md @@ -2426,7 +2426,7 @@ There are type-specific methods. but they can be used in the same way. ```python dataset_object = client.create_image_dataset_object( - dataset_id="YOUR_DATASET_ID", + dataset_version_id="YOUR_DATASET_VERSION_ID", name="brushwood_dog.jpg", file_path="./brushwood_dog.jpg", ) @@ -2466,7 +2466,7 @@ Success response is the same as when created. Get all dataset object in the dataset. (Up to 1000 tasks) ```python -dataset_objects = client.get_dataset_objects(dataset_id="YOUR_DATASET_ID") +dataset_objects = client.get_dataset_objects(dataset_version_id="YOUR_DATASET_VERSION_ID") ``` The success response is the same as when created, but it is an array. @@ -2475,7 +2475,7 @@ You can filter by keywords. ```python dataset_objects = client.get_dataset_objects( - dataset_id="YOUR_DATASET_ID", keyword="dog" + dataset_version_id="YOUR_DATASET_VERSION_ID", keyword="dog" ) ``` @@ -2503,7 +2503,7 @@ Get all import histories in the dataset. (Up to 1000 tasks) ```python datasets = client.get_dataset_object_import_histories( - dataset_id="YOUR_DATASET_ID" + dataset_version_id="YOUR_DATASET_VERSION_ID" ) ``` diff --git a/examples/create_dataset.py b/examples/create_dataset.py index 4e1fd3e..8a22132 100644 --- a/examples/create_dataset.py +++ b/examples/create_dataset.py @@ -5,6 +5,6 @@ client = fastlabel.Client() dataset = client.create_dataset( - name="Japanese Dogs", slug="japanese-dogs", type="video" + name="Japanese Dogs", slug="japanese-dogs", type="image" ) pprint(dataset) diff --git a/examples/create_image_dataset_object.py b/examples/create_image_dataset_object.py new file mode 100644 index 0000000..fa7c955 --- /dev/null +++ b/examples/create_image_dataset_object.py @@ -0,0 +1,12 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset_object = client.create_image_dataset_object( + dataset_version_id="YOUR_DATASET_VERSION_ID", + name="NAME", + file_path="FILE_PATH", +) +pprint(dataset_object) diff --git a/examples/delete_dataset.py b/examples/delete_dataset.py new file mode 100644 index 0000000..0f2a7b3 --- /dev/null +++ b/examples/delete_dataset.py @@ -0,0 +1,5 @@ +import fastlabel + +client = fastlabel.Client() + +client.delete_dataset(dataset_id="YOUR_DATASET_ID") diff --git a/examples/delete_dataset_objects.py b/examples/delete_dataset_objects.py new file mode 100644 index 0000000..7247872 --- /dev/null +++ b/examples/delete_dataset_objects.py @@ -0,0 +1,11 @@ +import fastlabel + +client = fastlabel.Client() + +client.delete_dataset_objects( + dataset_id="YOUR_DATASET_ID", + dataset_object_ids=[ + "YOUR_DATASET_OBJECT_ID_1", + "YOUR_DATASET_OBJECT_ID_2", + ], +) diff --git a/examples/find_dataset.py b/examples/find_dataset.py new file mode 100644 index 0000000..9ff320f --- /dev/null +++ b/examples/find_dataset.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset = client.find_dataset(dataset_id="YOUR_DATASET_ID") +pprint(dataset) diff --git a/examples/find_dataset_object.py b/examples/find_dataset_object.py new file mode 100644 index 0000000..198a83a --- /dev/null +++ b/examples/find_dataset_object.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset_object = client.find_dataset_object(dataset_object_id="YOUR_DATASET_OBJECT_ID") +pprint(dataset_object) diff --git a/examples/get_dataset_object_import_histories.py b/examples/get_dataset_object_import_histories.py new file mode 100644 index 0000000..3047400 --- /dev/null +++ b/examples/get_dataset_object_import_histories.py @@ -0,0 +1,10 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset_object_import_histories = client.get_dataset_object_import_histories( + dataset_version_id="YOUR_DATASET_VERSION_ID" +) +pprint(dataset_object_import_histories) diff --git a/examples/get_dataset_objects.py b/examples/get_dataset_objects.py new file mode 100644 index 0000000..1207d18 --- /dev/null +++ b/examples/get_dataset_objects.py @@ -0,0 +1,10 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset_objects = client.get_dataset_objects( + dataset_version_id="YOUR_DATASET_VERSION_ID" +) +pprint(dataset_objects) diff --git a/examples/get_datasets.py b/examples/get_datasets.py new file mode 100644 index 0000000..6c75f32 --- /dev/null +++ b/examples/get_datasets.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +datasets = client.get_datasets() +pprint(datasets) diff --git a/examples/update_dataset.py b/examples/update_dataset.py new file mode 100644 index 0000000..875c542 --- /dev/null +++ b/examples/update_dataset.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +dataset = client.update_dataset(dataset_id="YOUR_DATASET_ID", name="New Name") +pprint(dataset) diff --git a/fastlabel/__init__.py b/fastlabel/__init__.py index 0ea2610..ff0670a 100644 --- a/fastlabel/__init__.py +++ b/fastlabel/__init__.py @@ -1096,7 +1096,11 @@ def create_integrated_image_classification_task( external_approver is slug of external approve user (Optional). """ endpoint = "tasks/integrated-image/classification" - payload = {"project": project, "filePath": file_path, "storageType": storage_type} + payload = { + "project": project, + "filePath": file_path, + "storageType": storage_type, + } attributes = attributes or [] tags = tags or [] if status: @@ -3780,7 +3784,7 @@ def copy_project(self, project_id: str) -> None: def find_dataset(self, dataset_id: str) -> dict: """ - Find a dataset. + Find a dataset with latest version. """ endpoint = "datasets/" + dataset_id return self.api.get_request(endpoint) @@ -3793,7 +3797,7 @@ def get_datasets( limit: int = 100, ) -> list: """ - Returns a list of datasets. + Returns a list of datasets with latest version. Returns up to 1000 at a time, to get more, set offset as the starting position to fetch. @@ -3873,7 +3877,7 @@ def find_dataset_object(self, dataset_object_id: str) -> dict: def get_dataset_objects( self, - dataset_id: str = None, + dataset_version_id: str, keyword: str = None, offset: int = None, limit: int = 100, @@ -3884,7 +3888,7 @@ def get_dataset_objects( Returns up to 1000 at a time, to get more, set offset as the starting position to fetch. - dataset_id is dataset object in dataset (Required). + dataset_version_id is dataset object in dataset version (Required). keyword are search terms in the dataset object name (Optional). offset is the starting position number to fetch (Optional). limit is the max number to fetch (Optional). @@ -3894,7 +3898,7 @@ def get_dataset_objects( "Limit must be less than or equal to 1000.", 422 ) endpoint = "dataset-objects" - params = {"datasetId": dataset_id} + params = {"datasetVersionId": dataset_version_id} if keyword: params["keyword"] = keyword if offset: @@ -3905,14 +3909,14 @@ def get_dataset_objects( def create_image_dataset_object( self, - dataset_id: str, + dataset_version_id: str, name: str, file_path: str, ) -> dict: """ Create a image dataset object. - dataset_id is dataset object in dataset (Required). + dataset_version_id is dataset object in dataset version (Required). name is an unique identifier of dataset object in your dataset (Required). file_path is a path to data. Supported extensions are png, jpg, jpeg (Required). """ @@ -3926,7 +3930,7 @@ def create_image_dataset_object( raise FastLabelInvalidException("Supported image size is under 20 MB.", 422) payload = { - "datasetId": dataset_id, + "datasetVersionId": dataset_version_id, "name": name, "file": utils.base64_encode(file_path), "type": "image", @@ -3935,14 +3939,14 @@ def create_image_dataset_object( def create_video_dataset_object( self, - dataset_id: str, + dataset_version_id: str, name: str, file_path: str, ) -> dict: """ Create a video dataset object. - dataset_id is dataset object in dataset (Required). + dataset_version_id is dataset object in dataset version (Required). name is an unique identifier of dataset object in your dataset (Required). file_path is a path to data. Supported extensions are mp4 (Required). """ @@ -3956,7 +3960,7 @@ def create_video_dataset_object( ) payload = { - "datasetId": dataset_id, + "datasetVersionId": dataset_version_id, "name": name, "file": utils.base64_encode(file_path), "type": "video", @@ -3965,14 +3969,14 @@ def create_video_dataset_object( def create_audio_dataset_object( self, - dataset_id: str, + dataset_version_id: str, name: str, file_path: str, ) -> dict: """ Create a audio dataset object. - dataset_id is dataset object in dataset (Required). + dataset_version_id is dataset object in dataset version (Required). name is an unique identifier of dataset object in your dataset (Required). file_path is a path to data. Supported extensions are mp3, wav, w4a (Required). """ @@ -3988,7 +3992,7 @@ def create_audio_dataset_object( ) payload = { - "datasetId": dataset_id, + "datasetVersionId": dataset_version_id, "name": name, "file": utils.base64_encode(file_path), "type": "audio", @@ -4007,17 +4011,17 @@ def delete_dataset_objects( def get_dataset_object_import_histories( self, - dataset_id: str = None, + dataset_version_id: str, offset: int = None, limit: int = 5, ) -> list: """ - Returns a list of dataset objects. + Returns a list of dataset object import histories. Returns up to 1000 at a time, to get more, set offset as the starting position to fetch. - dataset_id is import histories in dataset (Required). + dataset_version_id is import histories in dataset version (Required). offset is the starting position number to fetch (Optional). limit is the max number to fetch (Optional). """ @@ -4026,7 +4030,7 @@ def get_dataset_object_import_histories( "Limit must be less than or equal to 1000.", 422 ) endpoint = "dataset-objects/imports/histories" - params = {"datasetId": dataset_id} + params = {"datasetVersionId": dataset_version_id} if offset: params["offset"] = offset if limit: diff --git a/tests/test_client_dataset.py b/tests/test_client_dataset.py index 8528eae..e7b6037 100644 --- a/tests/test_client_dataset.py +++ b/tests/test_client_dataset.py @@ -67,7 +67,8 @@ def test_get_dataset(self, client: Client, testing_image_dataset: dict): def test_update_dataset(self, client: Client, testing_image_dataset: dict): # Act dataset = client.update_dataset( - dataset_id=testing_image_dataset["id"], name="update name" + dataset_id=testing_image_dataset["id"], + name="update name", ) # Assert assert dataset["name"] == "update name" @@ -77,7 +78,7 @@ def test_create_dataset_object(self, client: Client, testing_image_dataset: dict target_file = Path(sys.path[0]) / "files/test_image.jpg" # Act dataset_object = client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image.jpg", file_path=str(target_file), ) @@ -102,7 +103,7 @@ def test_create_dataset_object_file_type_violation( ), ) as _: client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_video.mp4", file_path=str(target_file), ) @@ -111,32 +112,32 @@ def test_find_dataset_object(self, client: Client, testing_image_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_image.jpg" dataset_object = client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image.jpg", file_path=str(target_file), ) # Act result = client.find_dataset_object(dataset_object_id=dataset_object["id"]) # Assert - assert remove_object_signed_url(result) == remove_object_signed_url( - dataset_object - ) + assert result["name"] == dataset_object["name"] def test_get_dataset_object(self, client: Client, testing_image_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_image.jpg" dataset_object1 = client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image1.jpg", file_path=str(target_file), ) dataset_object2 = client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image2.jpg", file_path=str(target_file), ) # Act - results = client.get_dataset_objects(dataset_id=testing_image_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_image_dataset["version"]["id"] + ) # Assert assert results is not None assert len(results) == 2 @@ -153,14 +154,14 @@ def test_delete_dataset_object(self, client: Client, testing_image_dataset: dict dataset_object_names = ["test_image1.jpg", "test_image2.jpg", "test_image3.jpg"] created = [ client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name=name, file_path=str(target_file), ) for name in dataset_object_names ] dataset_objects = client.get_dataset_objects( - dataset_id=testing_image_dataset["id"] + dataset_version_id=testing_image_dataset["version"]["id"] ) assert dataset_objects is not None assert len(dataset_objects) == 3 @@ -177,7 +178,9 @@ def test_delete_dataset_object(self, client: Client, testing_image_dataset: dict dataset_object_ids=[created[0]["id"], created[2]["id"]], ) # Assert - results = client.get_dataset_objects(dataset_id=testing_image_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_image_dataset["version"]["id"] + ) assert results is not None assert len(results) == 1 assert remove_object_signed_url(results[0]) == remove_object_signed_url( @@ -213,7 +216,7 @@ def test_create_dataset_object(self, client: Client, testing_video_dataset: dict target_file = Path(sys.path[0]) / "files/test_video.mp4" # Act dataset_object = client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name="test_video.mp4", file_path=str(target_file), ) @@ -236,7 +239,7 @@ def test_create_dataset_object_file_type_violation( match=re.escape(" Supported extensions are mp4."), ) as _: client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name="test_image.jpg", file_path=str(target_file), ) @@ -245,32 +248,32 @@ def test_find_dataset_object(self, client: Client, testing_video_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_video.mp4" dataset_object = client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name="test_video.mp4", file_path=str(target_file), ) # Act result = client.find_dataset_object(dataset_object_id=dataset_object["id"]) # Assert - assert remove_object_signed_url(result) == remove_object_signed_url( - dataset_object - ) + assert result["name"] == dataset_object["name"] def test_get_dataset_object(self, client: Client, testing_video_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_video.mp4" dataset_object1 = client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name="test_video1.mp4", file_path=str(target_file), ) dataset_object2 = client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name="test_video2.mp4", file_path=str(target_file), ) # Act - results = client.get_dataset_objects(dataset_id=testing_video_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_video_dataset["version"]["id"] + ) # Assert assert results is not None assert len(results) == 2 @@ -287,7 +290,7 @@ def test_delete_dataset_object(self, client: Client, testing_video_dataset: dict dataset_object_names = ["test_video1.mp4", "test_video2.mp4", "test_video3.mp4"] created = [ client.create_video_dataset_object( - dataset_id=testing_video_dataset["id"], + dataset_version_id=testing_video_dataset["version"]["id"], name=name, file_path=str(target_file), ) @@ -295,7 +298,7 @@ def test_delete_dataset_object(self, client: Client, testing_video_dataset: dict ] dataset_objects = client.get_dataset_objects( - dataset_id=testing_video_dataset["id"] + dataset_version_id=testing_video_dataset["version"]["id"] ) assert dataset_objects is not None assert len(dataset_objects) == 3 @@ -312,7 +315,9 @@ def test_delete_dataset_object(self, client: Client, testing_video_dataset: dict dataset_object_ids=[created[0]["id"], created[2]["id"]], ) # Assert - results = client.get_dataset_objects(dataset_id=testing_video_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_video_dataset["version"]["id"] + ) assert results is not None assert len(results) == 1 assert remove_object_signed_url(results[0]) == remove_object_signed_url( @@ -338,7 +343,8 @@ def test_get_dataset(self, client: Client, testing_audio_dataset: dict): def test_update_dataset(self, client: Client, testing_audio_dataset: dict): # Act dataset = client.update_dataset( - dataset_id=testing_audio_dataset["id"], name="update name" + dataset_id=testing_audio_dataset["id"], + name="update name", ) # Assert assert dataset["name"] == "update name" @@ -348,7 +354,7 @@ def test_create_dataset_object(self, client: Client, testing_audio_dataset: dict target_file = Path(sys.path[0]) / "files/test_audio.mp3" # Act dataset_object = client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name="test_audio.mp3", file_path=str(target_file), ) @@ -373,7 +379,7 @@ def test_create_dataset_object_file_type_violation( ), ) as _: client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name="test_image.jpg", file_path=str(target_file), ) @@ -382,32 +388,32 @@ def test_find_dataset_object(self, client: Client, testing_audio_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_audio.mp3" dataset_object = client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name="test_audio.mp3", file_path=str(target_file), ) # Act result = client.find_dataset_object(dataset_object_id=dataset_object["id"]) # Assert - assert remove_object_signed_url(result) == remove_object_signed_url( - dataset_object - ) + assert result["name"] == dataset_object["name"] def test_get_dataset_object(self, client: Client, testing_audio_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_audio.mp3" dataset_object1 = client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name="test_audio1.mp3", file_path=str(target_file), ) dataset_object2 = client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name="test_audio2.mp3", file_path=str(target_file), ) # Act - results = client.get_dataset_objects(dataset_id=testing_audio_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_audio_dataset["version"]["id"] + ) # Assert assert results is not None assert len(results) == 2 @@ -424,14 +430,14 @@ def test_delete_dataset_object(self, client: Client, testing_audio_dataset: dict dataset_object_names = ["test_audio1.mp3", "test_audio2.mp3", "test_audio3.mp3"] created = [ client.create_audio_dataset_object( - dataset_id=testing_audio_dataset["id"], + dataset_version_id=testing_audio_dataset["version"]["id"], name=name, file_path=str(target_file), ) for name in dataset_object_names ] dataset_objects = client.get_dataset_objects( - dataset_id=testing_audio_dataset["id"] + dataset_version_id=testing_audio_dataset["version"]["id"] ) for i, dataset_object in enumerate(dataset_objects): assert OBJECT_SIGNED_URL_KEY in dataset_object @@ -446,7 +452,9 @@ def test_delete_dataset_object(self, client: Client, testing_audio_dataset: dict dataset_object_ids=[created[0]["id"], created[2]["id"]], ) # Assert - results = client.get_dataset_objects(dataset_id=testing_audio_dataset["id"]) + results = client.get_dataset_objects( + dataset_version_id=testing_audio_dataset["version"]["id"] + ) assert results is not None assert len(results) == 1 assert remove_object_signed_url(results[0]) == remove_object_signed_url( @@ -459,31 +467,31 @@ def test_get(self, client: Client, testing_image_dataset: dict): # Arrange target_file = Path(sys.path[0]) / "files/test_image.jpg" client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image1.jpg", file_path=str(target_file), ) client.create_image_dataset_object( - dataset_id=testing_image_dataset["id"], + dataset_version_id=testing_image_dataset["version"]["id"], name="test_image2.jpg", file_path=str(target_file), ) # Act - import_histoies = client.get_dataset_object_import_histories( - dataset_id=testing_image_dataset["id"] + import_histories = client.get_dataset_object_import_histories( + dataset_version_id=testing_image_dataset["version"]["id"] ) # Assert - assert import_histoies is not None - assert len(import_histoies) == 2 - assert import_histoies[0]["type"] == "local" - assert import_histoies[0]["status"] == "completed" - assert import_histoies[0]["msgCode"] == "none" - assert import_histoies[0]["msgLevel"] == "none" - assert import_histoies[0]["userName"] is not None - assert import_histoies[0]["count"] == 1 - assert import_histoies[0]["type"] == "local" - assert import_histoies[0]["status"] == "completed" - assert import_histoies[0]["msgCode"] == "none" - assert import_histoies[0]["msgLevel"] == "none" - assert import_histoies[0]["userName"] is not None - assert import_histoies[0]["count"] == 1 + assert import_histories is not None + assert len(import_histories) == 2 + assert import_histories[0]["type"] == "local" + assert import_histories[0]["status"] == "completed" + assert import_histories[0]["msgCode"] == "none" + assert import_histories[0]["msgLevel"] == "none" + assert import_histories[0]["userName"] is not None + assert import_histories[0]["count"] == 1 + assert import_histories[0]["type"] == "local" + assert import_histories[0]["status"] == "completed" + assert import_histories[0]["msgCode"] == "none" + assert import_histories[0]["msgLevel"] == "none" + assert import_histories[0]["userName"] is not None + assert import_histories[0]["count"] == 1