Skip to content

Commit 06ddbdb

Browse files
authored
Merge pull request #161 from fastlabel/feature/remove-dataset-annotation
fix: remove annotation type from dataset
2 parents 158377d + 5b2f835 commit 06ddbdb

File tree

5 files changed

+110
-91
lines changed

5 files changed

+110
-91
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ repos:
1212
files: '^.*\.py'
1313
types: [file]
1414
- repo: https://github.com/pycqa/isort
15-
rev: 5.10.1
15+
rev: 5.11.5
1616
hooks:
1717
- id: isort
1818
files: '^.*\.py'

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2345,8 +2345,7 @@ Create a new dataset.
23452345
dataset = client.create_dataset(
23462346
name="Japanese Dogs",
23472347
slug="japanese-dogs",
2348-
type="image",
2349-
annotation_type="image_bbox"
2348+
type="image"
23502349
)
23512350
```
23522351

examples/create_dataset.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
client = fastlabel.Client()
66

77
dataset = client.create_dataset(
8-
name="Japanese Dogs",
9-
slug="japanese-dogs",
10-
type="video",
11-
annotation_type="image_bbox",
8+
name="Japanese Dogs", slug="japanese-dogs", type="video"
129
)
1310
pprint(dataset)

fastlabel/__init__.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,11 @@ def create_integrated_image_task(
976976
"Supported extensions are png, jpg, jpeg.", 422
977977
)
978978

979-
payload = {"project": project, "filePath": file_path, "storageType": storage_type}
979+
payload = {
980+
"project": project,
981+
"filePath": file_path,
982+
"storageType": storage_type,
983+
}
980984
if status:
981985
payload["status"] = status
982986
if external_status:
@@ -1607,13 +1611,10 @@ def create_dicom_task(
16071611
"""
16081612
endpoint = "tasks/dicom"
16091613
if not utils.is_dicom_supported_ext(file_path):
1610-
raise FastLabelInvalidException(
1611-
"Supported extensions are zip.", 422
1612-
)
1614+
raise FastLabelInvalidException("Supported extensions are zip.", 422)
16131615
if not utils.is_dicom_supported_size(file_path):
16141616
raise FastLabelInvalidException("Supported image size is under 2 GB.", 422)
16151617

1616-
file = utils.base64_encode(file_path)
16171618
payload = {"project": project}
16181619
if status:
16191620
payload["status"] = status
@@ -1624,8 +1625,12 @@ def create_dicom_task(
16241625

16251626
self.__fill_assign_users(payload, **kwargs)
16261627

1627-
signed_url = self.__get_signed_path(project = project, file_name = os.path.basename(file_path), file_type = "application/zip")
1628-
self.api.upload_zipfile(url = signed_url["url"], file_path = file_path)
1628+
signed_url = self.__get_signed_path(
1629+
project=project,
1630+
file_name=os.path.basename(file_path),
1631+
file_type="application/zip",
1632+
)
1633+
self.api.upload_zipfile(url=signed_url["url"], file_path=file_path)
16291634

16301635
payload["fileKey"] = signed_url["name"]
16311636
return self.api.post_request(endpoint, payload=payload)
@@ -3622,7 +3627,6 @@ def update_dicom_task(
36223627

36233628
return self.api.put_request(endpoint, payload=payload)
36243629

3625-
36263630
def get_projects(
36273631
self,
36283632
slug: str = None,
@@ -3820,22 +3824,19 @@ def create_dataset(
38203824
type: str,
38213825
name: str,
38223826
slug: str,
3823-
annotation_type: str,
38243827
) -> dict:
38253828
"""
38263829
Create a dataset.
38273830
38283831
type can be 'image', 'video', 'audio' (Required).
38293832
name is name of your dataset (Required).
38303833
slug is slug of your dataset (Required).
3831-
annotation_type can be 'none', 'image_bbox' (Required).
38323834
"""
38333835
endpoint = "datasets"
38343836
payload = {
38353837
"type": type,
38363838
"name": name,
38373839
"slug": slug,
3838-
"annotationType": annotation_type,
38393840
}
38403841
return self.api.post_request(endpoint, payload=payload)
38413842

@@ -4188,11 +4189,10 @@ def get_histories(
41884189
"Limit must be less than or equal to 1000.", 422
41894190
)
41904191
endpoint = "tasks/import/histories"
4191-
params = { "project": project }
4192+
params = {"project": project}
41924193
if offset:
41934194
params["offset"] = offset
41944195
if limit:
41954196
params["limit"] = limit
41964197

41974198
return self.api.get_request(endpoint, params=params)
4198-

tests/test_client_dataset.py

Lines changed: 94 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77

88
from fastlabel import Client, FastLabelInvalidException
99

10+
OBJECT_SIGNED_URL_KEY = "objectSignedUrl"
11+
12+
13+
def remove_object_signed_url(d: dict) -> dict:
14+
return {k: v for k, v in d.items() if k != OBJECT_SIGNED_URL_KEY}
15+
1016

1117
@pytest.fixture
1218
def client() -> Client:
@@ -112,7 +118,9 @@ def test_find_dataset_object(self, client: Client, testing_image_dataset: dict):
112118
# Act
113119
result = client.find_dataset_object(dataset_object_id=dataset_object["id"])
114120
# Assert
115-
assert result == dataset_object
121+
assert remove_object_signed_url(result) == remove_object_signed_url(
122+
dataset_object
123+
)
116124

117125
def test_get_dataset_object(self, client: Client, testing_image_dataset: dict):
118126
# Arrange
@@ -132,45 +140,49 @@ def test_get_dataset_object(self, client: Client, testing_image_dataset: dict):
132140
# Assert
133141
assert results is not None
134142
assert len(results) == 2
135-
assert results[0] == dataset_object1
136-
assert results[1] == dataset_object2
143+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
144+
dataset_object1
145+
)
146+
assert remove_object_signed_url(results[1]) == remove_object_signed_url(
147+
dataset_object2
148+
)
137149

138150
def test_delete_dataset_object(self, client: Client, testing_image_dataset: dict):
139151
# Arrange
140152
target_file = Path(sys.path[0]) / "files/test_image.jpg"
141-
dataset_object1 = client.create_image_dataset_object(
142-
dataset_id=testing_image_dataset["id"],
143-
name="test_image1.jpg",
144-
file_path=str(target_file),
145-
)
146-
dataset_object2 = client.create_image_dataset_object(
147-
dataset_id=testing_image_dataset["id"],
148-
name="test_image2.jpg",
149-
file_path=str(target_file),
150-
)
151-
dataset_object3 = client.create_image_dataset_object(
152-
dataset_id=testing_image_dataset["id"],
153-
name="test_image3.jpg",
154-
file_path=str(target_file),
155-
)
153+
dataset_object_names = ["test_image1.jpg", "test_image2.jpg", "test_image3.jpg"]
154+
created = [
155+
client.create_image_dataset_object(
156+
dataset_id=testing_image_dataset["id"],
157+
name=name,
158+
file_path=str(target_file),
159+
)
160+
for name in dataset_object_names
161+
]
156162
dataset_objects = client.get_dataset_objects(
157163
dataset_id=testing_image_dataset["id"]
158164
)
159165
assert dataset_objects is not None
160166
assert len(dataset_objects) == 3
161-
assert dataset_objects[0] == dataset_object1
162-
assert dataset_objects[1] == dataset_object2
163-
assert dataset_objects[2] == dataset_object3
167+
for i, dataset_object in enumerate(dataset_objects):
168+
assert OBJECT_SIGNED_URL_KEY in dataset_object
169+
assert OBJECT_SIGNED_URL_KEY in created[i]
170+
assert remove_object_signed_url(dataset_object) == remove_object_signed_url(
171+
created[i]
172+
)
173+
164174
# Act
165175
client.delete_dataset_objects(
166176
dataset_id=testing_image_dataset["id"],
167-
dataset_object_ids=[dataset_object1["id"], dataset_object3["id"]],
177+
dataset_object_ids=[created[0]["id"], created[2]["id"]],
168178
)
169179
# Assert
170180
results = client.get_dataset_objects(dataset_id=testing_image_dataset["id"])
171181
assert results is not None
172182
assert len(results) == 1
173-
assert results[0] == dataset_object2
183+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
184+
created[1]
185+
)
174186

175187

176188
class TestVideoDataset:
@@ -240,7 +252,9 @@ def test_find_dataset_object(self, client: Client, testing_video_dataset: dict):
240252
# Act
241253
result = client.find_dataset_object(dataset_object_id=dataset_object["id"])
242254
# Assert
243-
assert result == dataset_object
255+
assert remove_object_signed_url(result) == remove_object_signed_url(
256+
dataset_object
257+
)
244258

245259
def test_get_dataset_object(self, client: Client, testing_video_dataset: dict):
246260
# Arrange
@@ -260,45 +274,50 @@ def test_get_dataset_object(self, client: Client, testing_video_dataset: dict):
260274
# Assert
261275
assert results is not None
262276
assert len(results) == 2
263-
assert results[0] == dataset_object1
264-
assert results[1] == dataset_object2
277+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
278+
dataset_object1
279+
)
280+
assert remove_object_signed_url(results[1]) == remove_object_signed_url(
281+
dataset_object2
282+
)
265283

266284
def test_delete_dataset_object(self, client: Client, testing_video_dataset: dict):
267285
# Arrange
268286
target_file = Path(sys.path[0]) / "files/test_video.mp4"
269-
dataset_object1 = client.create_video_dataset_object(
270-
dataset_id=testing_video_dataset["id"],
271-
name="test_video1.mp4",
272-
file_path=str(target_file),
273-
)
274-
dataset_object2 = client.create_video_dataset_object(
275-
dataset_id=testing_video_dataset["id"],
276-
name="test_video2.mp4",
277-
file_path=str(target_file),
278-
)
279-
dataset_object3 = client.create_video_dataset_object(
280-
dataset_id=testing_video_dataset["id"],
281-
name="test_video3.mp4",
282-
file_path=str(target_file),
283-
)
287+
dataset_object_names = ["test_video1.mp4", "test_video2.mp4", "test_video3.mp4"]
288+
created = [
289+
client.create_video_dataset_object(
290+
dataset_id=testing_video_dataset["id"],
291+
name=name,
292+
file_path=str(target_file),
293+
)
294+
for name in dataset_object_names
295+
]
296+
284297
dataset_objects = client.get_dataset_objects(
285298
dataset_id=testing_video_dataset["id"]
286299
)
287300
assert dataset_objects is not None
288301
assert len(dataset_objects) == 3
289-
assert dataset_objects[0] == dataset_object1
290-
assert dataset_objects[1] == dataset_object2
291-
assert dataset_objects[2] == dataset_object3
302+
for i, dataset_object in enumerate(dataset_objects):
303+
assert OBJECT_SIGNED_URL_KEY in dataset_object
304+
assert OBJECT_SIGNED_URL_KEY in created[i]
305+
assert remove_object_signed_url(dataset_object) == remove_object_signed_url(
306+
created[i]
307+
)
308+
292309
# Act
293310
client.delete_dataset_objects(
294311
dataset_id=testing_video_dataset["id"],
295-
dataset_object_ids=[dataset_object1["id"], dataset_object3["id"]],
312+
dataset_object_ids=[created[0]["id"], created[2]["id"]],
296313
)
297314
# Assert
298315
results = client.get_dataset_objects(dataset_id=testing_video_dataset["id"])
299316
assert results is not None
300317
assert len(results) == 1
301-
assert results[0] == dataset_object2
318+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
319+
created[1]
320+
)
302321

303322

304323
class TestAudioDataset:
@@ -370,7 +389,9 @@ def test_find_dataset_object(self, client: Client, testing_audio_dataset: dict):
370389
# Act
371390
result = client.find_dataset_object(dataset_object_id=dataset_object["id"])
372391
# Assert
373-
assert result == dataset_object
392+
assert remove_object_signed_url(result) == remove_object_signed_url(
393+
dataset_object
394+
)
374395

375396
def test_get_dataset_object(self, client: Client, testing_audio_dataset: dict):
376397
# Arrange
@@ -390,45 +411,47 @@ def test_get_dataset_object(self, client: Client, testing_audio_dataset: dict):
390411
# Assert
391412
assert results is not None
392413
assert len(results) == 2
393-
assert results[0] == dataset_object1
394-
assert results[1] == dataset_object2
414+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
415+
dataset_object1
416+
)
417+
assert remove_object_signed_url(results[1]) == remove_object_signed_url(
418+
dataset_object2
419+
)
395420

396421
def test_delete_dataset_object(self, client: Client, testing_audio_dataset: dict):
397422
# Arrange
398423
target_file = Path(sys.path[0]) / "files/test_audio.mp3"
399-
dataset_object1 = client.create_audio_dataset_object(
400-
dataset_id=testing_audio_dataset["id"],
401-
name="test_audio1.mp3",
402-
file_path=str(target_file),
403-
)
404-
dataset_object2 = client.create_audio_dataset_object(
405-
dataset_id=testing_audio_dataset["id"],
406-
name="test_audio2.mp3",
407-
file_path=str(target_file),
408-
)
409-
dataset_object3 = client.create_audio_dataset_object(
410-
dataset_id=testing_audio_dataset["id"],
411-
name="test_audio3.mp3",
412-
file_path=str(target_file),
413-
)
424+
dataset_object_names = ["test_audio1.mp3", "test_audio2.mp3", "test_audio3.mp3"]
425+
created = [
426+
client.create_audio_dataset_object(
427+
dataset_id=testing_audio_dataset["id"],
428+
name=name,
429+
file_path=str(target_file),
430+
)
431+
for name in dataset_object_names
432+
]
414433
dataset_objects = client.get_dataset_objects(
415434
dataset_id=testing_audio_dataset["id"]
416435
)
417-
assert dataset_objects is not None
418-
assert len(dataset_objects) == 3
419-
assert dataset_objects[0] == dataset_object1
420-
assert dataset_objects[1] == dataset_object2
421-
assert dataset_objects[2] == dataset_object3
436+
for i, dataset_object in enumerate(dataset_objects):
437+
assert OBJECT_SIGNED_URL_KEY in dataset_object
438+
assert OBJECT_SIGNED_URL_KEY in created[i]
439+
assert remove_object_signed_url(dataset_object) == remove_object_signed_url(
440+
created[i]
441+
)
442+
422443
# Act
423444
client.delete_dataset_objects(
424445
dataset_id=testing_audio_dataset["id"],
425-
dataset_object_ids=[dataset_object1["id"], dataset_object3["id"]],
446+
dataset_object_ids=[created[0]["id"], created[2]["id"]],
426447
)
427448
# Assert
428449
results = client.get_dataset_objects(dataset_id=testing_audio_dataset["id"])
429450
assert results is not None
430451
assert len(results) == 1
431-
assert results[0] == dataset_object2
452+
assert remove_object_signed_url(results[0]) == remove_object_signed_url(
453+
created[1]
454+
)
432455

433456

434457
class TestDatasetObjectImportHistories:

0 commit comments

Comments
 (0)