Skip to content
Snippets Groups Projects

Retrieve dataset element neighbors with ListElementDatasets

Merged ml bonhomme requested to merge dataset-nav into master
All threads resolved!
3 files
+ 229
3
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -1705,6 +1705,8 @@ class TestDatasetsAPI(FixtureAPITestCase):
]
)
# ListElementDatasets
def test_element_datasets_requires_read_access(self):
self.client.force_login(self.user)
private_elt = self.private_corpus.elements.create(type=self.private_corpus.types.create(slug="t"), name="elt")
@@ -1749,6 +1751,8 @@ class TestDatasetsAPI(FixtureAPITestCase):
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": None,
"next": None
}]
})
@@ -1780,6 +1784,82 @@ class TestDatasetsAPI(FixtureAPITestCase):
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": None,
"next": None
}, {
"dataset": {
"id": str(self.dataset.id),
"name": "First Dataset",
"description": "dataset number one",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "validation",
"previous": None,
"next": None
}, {
"dataset": {
"id": str(self.dataset2.id),
"name": "Second Dataset",
"description": "dataset number two",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset2.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset2.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": None,
"next": None
}]
})
def test_element_datasets_with_neighbors_not_boolean(self):
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(reverse("api:element-datasets", kwargs={"pk": str(self.page1.id)}), {"with_neighbors": 12})
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertDictEqual(response.json(), {"with_neighbors": "Value must be a boolean."})
def test_element_datasets_with_neighbors_false(self):
self.client.force_login(self.user)
self.dataset.dataset_elements.create(element=self.page1, set="train")
self.dataset.dataset_elements.create(element=self.page1, set="validation")
self.dataset2.dataset_elements.create(element=self.page1, set="train")
with self.assertNumQueries(7):
response = self.client.get(reverse("api:element-datasets", kwargs={"pk": str(self.page1.id)}), {"with_neighbors": False})
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertDictEqual(response.json(), {
"count": 3,
"next": None,
"number": 1,
"previous": None,
"results": [{
"dataset": {
"id": str(self.dataset.id),
"name": "First Dataset",
"description": "dataset number one",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": None,
"next": None
}, {
"dataset": {
"id": str(self.dataset.id),
@@ -1795,6 +1875,8 @@ class TestDatasetsAPI(FixtureAPITestCase):
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "validation",
"previous": None,
"next": None
}, {
"dataset": {
"id": str(self.dataset2.id),
@@ -1810,6 +1892,101 @@ class TestDatasetsAPI(FixtureAPITestCase):
"updated": self.dataset2.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": None,
"next": None
}]
})
def test_element_datasets_with_neighbors(self):
self.client.force_login(self.user)
self.dataset.dataset_elements.create(element=self.page1, set="train")
self.dataset.dataset_elements.create(element=self.page2, set="train")
self.dataset.dataset_elements.create(element=self.page3, set="train")
self.dataset.dataset_elements.create(element=self.page1, set="validation")
self.dataset2.dataset_elements.create(element=self.page1, set="train")
self.dataset2.dataset_elements.create(element=self.page3, set="train")
# Results are alphabetically ordered and must not depend on the random page UUIDs
sorted_dataset_elements = sorted([str(self.page1.id), str(self.page2.id), str(self.page3.id)])
page1_index_1 = sorted_dataset_elements.index(str(self.page1.id))
sorted_dataset2_elements = sorted([str(self.page1.id), str(self.page3.id)])
page1_index_2 = sorted_dataset2_elements.index(str(self.page1.id))
with self.assertNumQueries(8):
response = self.client.get(reverse("api:element-datasets", kwargs={"pk": str(self.page1.id)}), {"with_neighbors": True})
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertDictEqual(response.json(), {
"count": 3,
"next": None,
"number": 1,
"previous": None,
"results": [{
"dataset": {
"id": str(self.dataset.id),
"name": "First Dataset",
"description": "dataset number one",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": (
sorted_dataset_elements[page1_index_1 - 1]
if page1_index_1 - 1 >= 0
else None
),
"next": (
sorted_dataset_elements[page1_index_1 + 1]
if page1_index_1 + 1 <= 2
else None
)
}, {
"dataset": {
"id": str(self.dataset.id),
"name": "First Dataset",
"description": "dataset number one",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset.updated.isoformat().replace("+00:00", "Z"),
},
"set": "validation",
"previous": None,
"next": None
}, {
"dataset": {
"id": str(self.dataset2.id),
"name": "Second Dataset",
"description": "dataset number two",
"sets": ["training", "test", "validation"],
"set_elements": None,
"state": "open",
"corpus_id": str(self.corpus.id),
"creator": "Test user",
"task_id": None,
"created": self.dataset2.created.isoformat().replace("+00:00", "Z"),
"updated": self.dataset2.updated.isoformat().replace("+00:00", "Z"),
},
"set": "train",
"previous": (
sorted_dataset2_elements[page1_index_2 - 1]
if page1_index_1 - 1 >= 0
else None
),
"next": (
sorted_dataset2_elements[page1_index_2 + 1]
if page1_index_1 + 1 <= 1
else None
)
}]
})
Loading