From 7912af40239f6bbc6c2d10966d0ac140031af99e Mon Sep 17 00:00:00 2001 From: mlbonhomme <bonhomme@teklia.com> Date: Wed, 6 Mar 2024 18:39:57 +0100 Subject: [PATCH] wip API endpoints --- arkindex/documents/fixtures/data.json | 1196 +++++++++-------- .../management/commands/build_fixtures.py | 12 +- .../migrations/0029_processdataset_sets.py | 4 +- arkindex/process/models.py | 8 +- arkindex/project/serializer_fields.py | 9 +- arkindex/training/admin.py | 18 +- arkindex/training/api.py | 1 + arkindex/training/migrations/0001_initial.py | 8 +- .../migrations/0007_datasetset_model.py | 2 +- arkindex/training/models.py | 12 +- arkindex/training/serializers.py | 114 +- arkindex/training/tests/test_datasets_api.py | 270 +--- 12 files changed, 762 insertions(+), 892 deletions(-) diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json index 9e60c75219..ac55bc4e72 100644 --- a/arkindex/documents/fixtures/data.json +++ b/arkindex/documents/fixtures/data.json @@ -1,19 +1,19 @@ [ { "model": "process.process", - "pk": "26050593-712f-4f7a-b15a-4d2132241514", + "pk": "432278f2-a60e-4865-b474-de83833d0497", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "name": "Process fixture", - "creator": 2, - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "mode": "workers", + "name": null, + "creator": 1, + "corpus": null, + "mode": "local", "revision": null, "activity_state": "disabled", "started": null, "finished": null, - "farm": "94055f35-9ac9-44a0-ac5d-386e132bea2c", + "farm": null, "element": null, "folder_type": null, "element_type": null, @@ -32,19 +32,19 @@ }, { "model": "process.process", - "pk": "3421ba72-b14c-4df0-a504-1e7e90abe4b4", + "pk": "c914b228-86a6-434b-81d8-f78751f02cf1", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "name": null, - "creator": 1, - "corpus": null, - "mode": "repository", + "name": "Process fixture", + "creator": 2, + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "mode": "workers", "revision": null, "activity_state": "disabled", "started": null, "finished": null, - "farm": "94055f35-9ac9-44a0-ac5d-386e132bea2c", + "farm": "ff732a3f-c9ac-43fe-8b22-c03cf82d2a4e", "element": null, "folder_type": null, "element_type": null, @@ -63,7 +63,7 @@ }, { "model": "process.process", - "pk": "4a3c1857-7fe7-47ba-9e47-7ce96eefc96f", + "pk": "c992f023-baea-4c6d-92ba-e5bac0c2c0b4", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", @@ -94,19 +94,19 @@ }, { "model": "process.process", - "pk": "be97d04e-0af4-4043-9874-d20f28b30431", + "pk": "d6b43bc9-d87c-4c80-9211-f0c807506ad7", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "name": null, "creator": 1, "corpus": null, - "mode": "local", + "mode": "repository", "revision": null, "activity_state": "disabled", "started": null, "finished": null, - "farm": null, + "farm": "ff732a3f-c9ac-43fe-8b22-c03cf82d2a4e", "element": null, "folder_type": null, "element_type": null, @@ -125,25 +125,25 @@ }, { "model": "process.repository", - "pk": "0e1654c4-20e5-4d4a-99ab-7142040b6e88", + "pk": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "fields": { - "url": "http://gitlab/repo" + "url": "http://my_repo.fake/workers/worker" } }, { "model": "process.repository", - "pk": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "pk": "deea5468-0e94-4215-bef3-efb8d18f0065", "fields": { - "url": "http://my_repo.fake/workers/worker" + "url": "http://gitlab/repo" } }, { "model": "process.revision", - "pk": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", + "pk": "174a7683-f6bb-402b-8ff5-3b22785f35a2", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "repo": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repo": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "hash": "1337", "message": "My w0rk3r", "author": "Test user" @@ -151,11 +151,11 @@ }, { "model": "process.revision", - "pk": "d2d52ec9-2d56-4df1-9118-ed884f26cb83", + "pk": "6b139a49-ae71-4b64-8e69-e67a389e9cfa", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "repo": "0e1654c4-20e5-4d4a-99ab-7142040b6e88", + "repo": "deea5468-0e94-4215-bef3-efb8d18f0065", "hash": "42", "message": "Salve", "author": "Some user" @@ -163,85 +163,85 @@ }, { "model": "process.worker", - "pk": "5a6c0c92-b9b1-4a69-a8d0-b75841cd0193", + "pk": "049370f4-2328-40de-84a0-48e5bb45fcda", "fields": { - "name": "File import", - "slug": "file_import", - "type": "2c4d9006-9c1f-4a62-944d-a8862aa022b1", + "name": "Generic worker with a Model", + "slug": "generic", + "type": "3c93cbb2-97a1-4b0c-8ddf-98ee99760805", "description": "", - "repository": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repository": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "public": false, "archived": null } }, { "model": "process.worker", - "pk": "7458bec4-665b-4e2d-862f-7d87bc833481", + "pk": "04ebb7e9-b8f8-4358-82cb-52bca4f2564b", "fields": { - "name": "Custom worker", - "slug": "custom", - "type": "9785b33d-d517-4a91-a4d9-b192e6b042b6", + "name": "Document layout analyser", + "slug": "dla", + "type": "c2db222a-f974-4c20-979e-9e95e1a80ee7", "description": "", - "repository": null, + "repository": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "public": false, "archived": null } }, { "model": "process.worker", - "pk": "89964ea9-97a3-4edf-8568-545ea810342e", + "pk": "232e3930-353b-4840-b570-7057166ab8a7", "fields": { - "name": "Document layout analyser", - "slug": "dla", - "type": "3b3adc81-73f1-4e92-8093-d1dd9431c53f", + "name": "Recognizer", + "slug": "reco", + "type": "3c93cbb2-97a1-4b0c-8ddf-98ee99760805", "description": "", - "repository": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repository": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "public": false, "archived": null } }, { "model": "process.worker", - "pk": "c7439e52-9b09-489b-8dc5-13994801e8ac", + "pk": "58c7ea56-3de0-4d49-bdc1-13d2d770202d", "fields": { "name": "Worker requiring a GPU", "slug": "worker-gpu", - "type": "4696efe7-e3dd-4a8c-8346-c99d479c1756", + "type": "ea560a33-b00e-4fcb-a7fe-5d92827da405", "description": "", - "repository": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repository": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "public": false, "archived": null } }, { "model": "process.worker", - "pk": "c88cf97b-25a1-4074-a88c-8d2b7a82db8c", + "pk": "8cf9ad2e-20da-42b1-8486-1b9b76d094f6", "fields": { - "name": "Recognizer", - "slug": "reco", - "type": "999707eb-4c53-469d-8fb6-ec6a80010248", + "name": "Custom worker", + "slug": "custom", + "type": "8f8a02cd-e97f-479c-96d1-8d019f31e25b", "description": "", - "repository": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repository": null, "public": false, "archived": null } }, { "model": "process.worker", - "pk": "f62b2ea5-7bff-4c38-9bd1-7237543cad36", + "pk": "de19f976-30a1-49bb-9dfb-a17300db9ccb", "fields": { - "name": "Generic worker with a Model", - "slug": "generic", - "type": "999707eb-4c53-469d-8fb6-ec6a80010248", + "name": "File import", + "slug": "file_import", + "type": "1adb460c-149c-4b77-9d56-9a306ab49993", "description": "", - "repository": "a091592f-0ea9-4147-be4e-4f580751ac9f", + "repository": "565a09bb-0f64-49b5-acbf-8e5fde104cbb", "public": false, "archived": null } }, { "model": "process.workertype", - "pk": "2c4d9006-9c1f-4a62-944d-a8862aa022b1", + "pk": "1adb460c-149c-4b77-9d56-9a306ab49993", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", @@ -251,50 +251,50 @@ }, { "model": "process.workertype", - "pk": "3b3adc81-73f1-4e92-8093-d1dd9431c53f", + "pk": "3c93cbb2-97a1-4b0c-8ddf-98ee99760805", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "slug": "dla", - "display_name": "Document Layout Analysis" + "slug": "recognizer", + "display_name": "Recognizer" } }, { "model": "process.workertype", - "pk": "4696efe7-e3dd-4a8c-8346-c99d479c1756", + "pk": "8f8a02cd-e97f-479c-96d1-8d019f31e25b", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "slug": "worker", - "display_name": "Worker requiring a GPU" + "slug": "custom", + "display_name": "Custom" } }, { "model": "process.workertype", - "pk": "9785b33d-d517-4a91-a4d9-b192e6b042b6", + "pk": "c2db222a-f974-4c20-979e-9e95e1a80ee7", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "slug": "custom", - "display_name": "Custom" + "slug": "dla", + "display_name": "Document Layout Analysis" } }, { "model": "process.workertype", - "pk": "999707eb-4c53-469d-8fb6-ec6a80010248", + "pk": "ea560a33-b00e-4fcb-a7fe-5d92827da405", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "slug": "recognizer", - "display_name": "Recognizer" + "slug": "worker", + "display_name": "Worker requiring a GPU" } }, { "model": "process.workerversion", - "pk": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "pk": "0b84a002-efce-4fd6-b4a6-999376df80fa", "fields": { - "worker": "c88cf97b-25a1-4074-a88c-8d2b7a82db8c", - "revision": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", + "worker": "04ebb7e9-b8f8-4358-82cb-52bca4f2564b", + "revision": "174a7683-f6bb-402b-8ff5-3b22785f35a2", "version": null, "configuration": { "test": 42 @@ -302,7 +302,7 @@ "state": "available", "gpu_usage": "disabled", "model_usage": "disabled", - "docker_image": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "docker_image": "481b42e2-645c-47fe-937f-5b4431f10563", "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -310,18 +310,18 @@ }, { "model": "process.workerversion", - "pk": "23473bff-4362-466e-ba5f-b6843df1fdf3", + "pk": "110fd472-59f4-43fa-a954-0a8dd776c86d", "fields": { - "worker": "7458bec4-665b-4e2d-862f-7d87bc833481", - "revision": null, - "version": 1, + "worker": "232e3930-353b-4840-b570-7057166ab8a7", + "revision": "174a7683-f6bb-402b-8ff5-3b22785f35a2", + "version": null, "configuration": { - "custom": "value" + "test": 42 }, - "state": "created", + "state": "available", "gpu_usage": "disabled", "model_usage": "disabled", - "docker_image": null, + "docker_image": "481b42e2-645c-47fe-937f-5b4431f10563", "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -329,18 +329,18 @@ }, { "model": "process.workerversion", - "pk": "2aa45507-c5f2-4e1f-bc38-edf50dbf5aae", + "pk": "2800edff-4e74-4fd0-8f31-a01cddfa4c09", "fields": { - "worker": "f62b2ea5-7bff-4c38-9bd1-7237543cad36", - "revision": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", + "worker": "58c7ea56-3de0-4d49-bdc1-13d2d770202d", + "revision": "174a7683-f6bb-402b-8ff5-3b22785f35a2", "version": null, "configuration": { "test": 42 }, "state": "available", - "gpu_usage": "disabled", - "model_usage": "required", - "docker_image": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "gpu_usage": "required", + "model_usage": "disabled", + "docker_image": "481b42e2-645c-47fe-937f-5b4431f10563", "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -348,18 +348,18 @@ }, { "model": "process.workerversion", - "pk": "66d545f5-4f60-436a-9cc3-517504cce152", + "pk": "5cc66882-dfda-4800-9422-8e0fb28e0287", "fields": { - "worker": "c7439e52-9b09-489b-8dc5-13994801e8ac", - "revision": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", + "worker": "049370f4-2328-40de-84a0-48e5bb45fcda", + "revision": "174a7683-f6bb-402b-8ff5-3b22785f35a2", "version": null, "configuration": { "test": 42 }, "state": "available", - "gpu_usage": "required", - "model_usage": "disabled", - "docker_image": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "gpu_usage": "disabled", + "model_usage": "required", + "docker_image": "481b42e2-645c-47fe-937f-5b4431f10563", "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -367,18 +367,18 @@ }, { "model": "process.workerversion", - "pk": "7e54d670-f1f2-4b96-a38a-ac6a5416ea72", + "pk": "6df3f42d-36fd-4483-8261-d2550938f66e", "fields": { - "worker": "89964ea9-97a3-4edf-8568-545ea810342e", - "revision": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", - "version": null, + "worker": "8cf9ad2e-20da-42b1-8486-1b9b76d094f6", + "revision": null, + "version": 1, "configuration": { - "test": 42 + "custom": "value" }, - "state": "available", + "state": "created", "gpu_usage": "disabled", "model_usage": "disabled", - "docker_image": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "docker_image": null, "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -386,16 +386,16 @@ }, { "model": "process.workerversion", - "pk": "88a1c9ce-3128-4219-a120-9ea9574316a3", + "pk": "728c1c89-5a6e-4dc9-85fb-4702b760c1f7", "fields": { - "worker": "5a6c0c92-b9b1-4a69-a8d0-b75841cd0193", - "revision": "539e2eb4-6180-4d45-bc2f-ddd4bbe08ab1", + "worker": "de19f976-30a1-49bb-9dfb-a17300db9ccb", + "revision": "174a7683-f6bb-402b-8ff5-3b22785f35a2", "version": null, "configuration": {}, "state": "available", "gpu_usage": "disabled", "model_usage": "disabled", - "docker_image": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "docker_image": "481b42e2-645c-47fe-937f-5b4431f10563", "docker_image_iid": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -403,14 +403,14 @@ }, { "model": "process.workerrun", - "pk": "796a41f5-9797-443d-be13-ea73372e4950", + "pk": "baf81f6a-818a-484e-8d1a-a240b20ab9e3", "fields": { - "process": "4a3c1857-7fe7-47ba-9e47-7ce96eefc96f", - "version": "23473bff-4362-466e-ba5f-b6843df1fdf3", + "process": "c914b228-86a6-434b-81d8-f78751f02cf1", + "version": "0b84a002-efce-4fd6-b4a6-999376df80fa", "model_version": null, "parents": "[]", "configuration": null, - "summary": "Worker Custom worker @ version 1", + "summary": "Worker Document layout analyser @ 0b84a0", "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false @@ -418,14 +418,14 @@ }, { "model": "process.workerrun", - "pk": "9b99e704-47e6-478c-988f-323c636bb91a", + "pk": "20c4817e-b999-41e0-a061-85deb7df73df", "fields": { - "process": "26050593-712f-4f7a-b15a-4d2132241514", - "version": "7e54d670-f1f2-4b96-a38a-ac6a5416ea72", + "process": "c914b228-86a6-434b-81d8-f78751f02cf1", + "version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "model_version": null, - "parents": "[]", + "parents": "[\"baf81f6a-818a-484e-8d1a-a240b20ab9e3\"]", "configuration": null, - "summary": "Worker Document layout analyser @ 7e54d6", + "summary": "Worker Recognizer @ 110fd4", "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false @@ -433,14 +433,14 @@ }, { "model": "process.workerrun", - "pk": "810d22b3-90bf-44bb-a931-9c20d6b600ca", + "pk": "81e444be-04be-47b6-b625-a3f2e61a4456", "fields": { - "process": "26050593-712f-4f7a-b15a-4d2132241514", - "version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "process": "432278f2-a60e-4865-b474-de83833d0497", + "version": "6df3f42d-36fd-4483-8261-d2550938f66e", "model_version": null, - "parents": "[\"9b99e704-47e6-478c-988f-323c636bb91a\"]", + "parents": "[]", "configuration": null, - "summary": "Worker Recognizer @ 06e217", + "summary": "Worker Custom worker @ version 1", "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false @@ -448,10 +448,10 @@ }, { "model": "process.workerrun", - "pk": "9c5e8955-084a-4dd4-a816-c74d2ac0ab49", + "pk": "ed5aaec9-a928-42ab-8166-81fbe92e7959", "fields": { - "process": "be97d04e-0af4-4043-9874-d20f28b30431", - "version": "23473bff-4362-466e-ba5f-b6843df1fdf3", + "process": "c992f023-baea-4c6d-92ba-e5bac0c2c0b4", + "version": "6df3f42d-36fd-4483-8261-d2550938f66e", "model_version": null, "parents": "[]", "configuration": null, @@ -463,7 +463,7 @@ }, { "model": "documents.corpus", - "pk": "1204ee59-2b68-4dfb-a083-3df4996c2337", + "pk": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", @@ -476,11 +476,11 @@ }, { "model": "documents.elementtype", - "pk": "097f73b9-4ea7-4063-98b0-e17eb698e77a", + "pk": "167b45fd-13a2-4ef8-b937-47f64e2665a8", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "slug": "text_line", - "display_name": "Line", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "slug": "word", + "display_name": "Word", "folder": false, "indexable": false, "color": "28b62c" @@ -488,9 +488,9 @@ }, { "model": "documents.elementtype", - "pk": "60e8c1f1-c04d-49b6-bc6e-70e38e437f36", + "pk": "18027add-0729-400d-a225-60927f1dd2d9", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "slug": "volume", "display_name": "Volume", "folder": true, @@ -500,11 +500,11 @@ }, { "model": "documents.elementtype", - "pk": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", + "pk": "1ca6552d-f876-4d2a-a167-38736ebed338", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "slug": "word", - "display_name": "Word", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "slug": "text_line", + "display_name": "Line", "folder": false, "indexable": false, "color": "28b62c" @@ -512,11 +512,11 @@ }, { "model": "documents.elementtype", - "pk": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", + "pk": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "slug": "act", - "display_name": "Act", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "slug": "surface", + "display_name": "Surface", "folder": false, "indexable": false, "color": "28b62c" @@ -524,11 +524,11 @@ }, { "model": "documents.elementtype", - "pk": "f2d75650-9d48-4b6e-b210-dbd595a668d2", + "pk": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "slug": "page", - "display_name": "Page", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "slug": "act", + "display_name": "Act", "folder": false, "indexable": false, "color": "28b62c" @@ -536,11 +536,11 @@ }, { "model": "documents.elementtype", - "pk": "fb9cf6d3-b31a-449c-a780-2f5db501695f", + "pk": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "slug": "surface", - "display_name": "Surface", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "slug": "page", + "display_name": "Page", "folder": false, "indexable": false, "color": "28b62c" @@ -548,279 +548,279 @@ }, { "model": "documents.elementpath", - "pk": "13930713-e133-4d00-90fe-7169541b6b8c", + "pk": "00bd8cd6-1b43-4703-868a-f6ad29891fee", "fields": { - "element": "1f20a3a4-33be-43a3-9427-393799aba6d7", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"737db4ff-8119-4e12-be99-968d7fa3be22\"]", + "element": "e590e52a-11ec-4e27-b3b1-c67cc589ced8", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"bdea4cf0-63bf-4918-b67d-b879d09f3c95\"]", "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "250c8b60-16ac-49c9-ba2a-ee157d387077", + "pk": "057773ab-6c41-4163-aca8-73e742087b50", "fields": { - "element": "60a6c062-1bbb-4e5f-82e7-37cb77d92419", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"67482d70-765b-4092-b462-2d955fd8a7df\"]", - "ordering": 2 - } -}, -{ - "model": "documents.elementpath", - "pk": "2d34a587-68b2-4087-a05e-d92c5bc0b086", - "fields": { - "element": "6452b6c6-3d58-48c2-9032-691095fe8317", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"67482d70-765b-4092-b462-2d955fd8a7df\"]", + "element": "81938246-57ff-49ad-bc79-d07de4275096", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"3dc4ff7a-9a40-431b-b692-a2b5af381ffd\"]", "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "33cdaa32-f9fe-4d60-91af-6200f90915af", + "pk": "05a8caeb-f351-4f3b-91c1-d0aff1ab9d73", "fields": { - "element": "737db4ff-8119-4e12-be99-968d7fa3be22", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", + "element": "2f7f15c7-c39b-4164-aea0-050c2a0e9d34", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"454b9f6d-8b0d-4313-baa3-82ccf8856d42\"]", "ordering": 2 } }, { "model": "documents.elementpath", - "pk": "344c8906-d207-48cc-9d5b-5c738758e510", + "pk": "07cd2fbb-2cfd-4b53-86fe-d37fcc6d3bdb", "fields": { - "element": "66843ee4-559b-4d2d-a9ce-4dd425022159", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"737db4ff-8119-4e12-be99-968d7fa3be22\"]", - "ordering": 1 + "element": "7c1ba0f5-1c2a-45d8-8ef1-6217e06e079b", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"2a08be28-27f2-48f8-8d87-437893d389ca\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "36612194-8586-43a3-9114-b3fa5d4c7832", + "pk": "0a010ead-3329-41fc-83a7-b7f2d6d847f2", "fields": { - "element": "8349d4ba-fd23-4da6-a99b-76ba2e359b6f", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", - "ordering": 5 + "element": "b46d402f-385c-42c8-bca3-4cf732c6b952", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"f3a388d1-9968-4486-9e3b-e5a2a11947b1\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "37f898d5-0a9a-49df-b8f6-40761f18c734", + "pk": "1260e6b9-95e3-4667-abc6-d80ab1b6ecc5", "fields": { - "element": "a41e2061-65cf-4c6e-9ea3-48d00d74133d", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"a0373c38-907d-4127-9762-5aada56b7165\"]", + "element": "77ced3ba-7f04-48c7-b5fa-2b101d191c23", + "path": "[\"c348ff6e-786b-445a-a828-a693fb000fe8\"]", "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "4450a6b1-88fb-4d11-9c7a-edd03872050d", + "pk": "221540c3-58b4-4839-b842-11dfbc608100", "fields": { - "element": "7f80cd7d-f24f-4691-a139-0ce744ea7577", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"492ea0b0-bcaf-4a46-a15a-29cd08e32d90\"]", - "ordering": 0 + "element": "fa35b384-692f-4b42-91ba-60d384ef251f", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"1444e97e-4873-4731-9b75-79f931c9dc9e\"]", + "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "48d847e6-26be-45e8-92a4-0a6517227172", + "pk": "25f13dc7-3bc1-40cf-8c9e-342ca2bc8747", "fields": { - "element": "8727b32e-6b08-44fd-84ff-54d505fb5a85", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"a0373c38-907d-4127-9762-5aada56b7165\"]", - "ordering": 0 + "element": "454b9f6d-8b0d-4313-baa3-82ccf8856d42", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "5bb0b100-e35c-4433-884e-16b3c827dea1", + "pk": "27ca92e0-f081-4ce4-b23a-cf1a1d5b7f13", "fields": { - "element": "e2e0ab90-85c8-457e-920d-479bebb43bf9", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"67482d70-765b-4092-b462-2d955fd8a7df\"]", - "ordering": 3 + "element": "549a9a87-0632-4846-962d-7799147e0225", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 4 } }, { "model": "documents.elementpath", - "pk": "60fccadc-2668-45f0-af63-8541f9d8000a", + "pk": "2ed0a5dc-1c04-49c5-b62a-4f07d804e982", "fields": { - "element": "900dcb10-2146-4571-8735-f508eb5f9986", - "path": "[]", + "element": "1f8e08ad-ee8e-4924-a0b3-740722dfae47", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"3dc4ff7a-9a40-431b-b692-a2b5af381ffd\"]", "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "6b954042-1718-4794-aad4-55c6e2e9e054", + "pk": "3ceef7ee-c057-459b-b267-3e5f1de2d754", "fields": { - "element": "7cd8a970-ca3a-479f-b49e-1292b216c1b9", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"492ea0b0-bcaf-4a46-a15a-29cd08e32d90\"]", - "ordering": 2 + "element": "d3b1f490-1ac8-430e-b0d3-eb617d90b900", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"454b9f6d-8b0d-4313-baa3-82ccf8856d42\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "6ff93429-322f-486a-bc0f-31f7047ce341", + "pk": "56e3e8b7-7d46-459f-a924-98201890e80b", "fields": { - "element": "c80311e3-4529-45d6-9575-31b362c99925", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"737db4ff-8119-4e12-be99-968d7fa3be22\"]", - "ordering": 2 + "element": "ffffc01b-7577-4a93-9148-02fdc1f80435", + "path": "[\"c348ff6e-786b-445a-a828-a693fb000fe8\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "8fd6c9e9-3133-4733-b58b-8a093e49288c", + "pk": "6b97040b-ebdb-49b8-9702-367f55ab4e49", "fields": { - "element": "f6b8eced-ee41-42d3-812a-a622f1879809", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"8144a0f8-f75b-43fa-ac27-d49d69bc483c\"]", + "element": "6d6b7b80-6783-42ef-88ec-15bdbe8ffb65", + "path": "[]", "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "98f8328f-77b3-490d-aa4c-97d6f2030e3f", + "pk": "758e2947-eb09-4ac3-9deb-2ff8d910f6b8", "fields": { - "element": "dc79378e-1804-45c8-b23f-a2eeb33734de", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"8349d4ba-fd23-4da6-a99b-76ba2e359b6f\"]", - "ordering": 0 + "element": "f3a388d1-9968-4486-9e3b-e5a2a11947b1", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 3 } }, { "model": "documents.elementpath", - "pk": "9979cf91-e6da-46e4-976e-386cb9ebbc42", + "pk": "78069f17-72aa-49c5-a433-2286c4bef207", "fields": { - "element": "7ac6504c-4088-4e6e-9a48-567f1f7e54c8", - "path": "[\"900dcb10-2146-4571-8735-f508eb5f9986\"]", - "ordering": 1 + "element": "bdea4cf0-63bf-4918-b67d-b879d09f3c95", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 6 } }, { "model": "documents.elementpath", - "pk": "99ac36ba-7c91-4beb-a10b-97d8edffa1d9", + "pk": "78817bcc-fb50-445a-8fdf-7f0812f2d4f0", "fields": { - "element": "12e84ea0-004a-43e7-9fcc-85021e2407a9", - "path": "[]", - "ordering": 0 + "element": "a9c73703-3711-46ac-957f-25f9bb77af76", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"454b9f6d-8b0d-4313-baa3-82ccf8856d42\"]", + "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "9feb4874-46bf-463a-9bc9-71b13af8bcc0", + "pk": "9a7a9ea5-1d70-4159-a1cd-76cd03cd1bd3", "fields": { - "element": "e38ab791-092f-48eb-bb09-ea95e5a01998", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"492ea0b0-bcaf-4a46-a15a-29cd08e32d90\"]", + "element": "416d13a8-4a15-4641-9b68-36862e80c176", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"549a9a87-0632-4846-962d-7799147e0225\"]", "ordering": 1 } }, { "model": "documents.elementpath", - "pk": "b447f917-b73c-42b5-9512-1a3af17b3eee", + "pk": "a15f789f-d2aa-43af-b66b-a437ad37c9a2", "fields": { - "element": "a0373c38-907d-4127-9762-5aada56b7165", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", - "ordering": 4 + "element": "39d46933-549e-40cc-93e4-3535db7ad8a0", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"3dc4ff7a-9a40-431b-b692-a2b5af381ffd\"]", + "ordering": 2 } }, { "model": "documents.elementpath", - "pk": "b869ccff-bb9b-4c85-9743-d8930f2d920a", + "pk": "ad4f56ef-cccc-4dc3-8922-5fa338e93fa2", "fields": { - "element": "f8d56f23-51f6-40dd-9482-939a1dd877b3", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", - "ordering": 7 + "element": "1145ba8e-4bd5-4f2f-8bb1-c307295d88a0", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"549a9a87-0632-4846-962d-7799147e0225\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "b8a8076c-62d4-4f86-a2f0-21187d589279", + "pk": "b6418b10-676e-4928-9552-921f8de4805e", "fields": { - "element": "8144a0f8-f75b-43fa-ac27-d49d69bc483c", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", - "ordering": 6 + "element": "3dc4ff7a-9a40-431b-b692-a2b5af381ffd", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 2 } }, { "model": "documents.elementpath", - "pk": "be089329-1d86-42cb-85b6-3a2520a334ed", + "pk": "c4abc40a-c4e2-4910-b62e-7bc95ea064f3", "fields": { - "element": "492ea0b0-bcaf-4a46-a15a-29cd08e32d90", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", - "ordering": 1 + "element": "2ef2d52a-0316-4eb6-a3f4-a48c4e25ce7c", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"1444e97e-4873-4731-9b75-79f931c9dc9e\"]", + "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "c66e5e45-f39b-42b7-bbf7-55bab78bfe2c", + "pk": "d4439a5a-5934-4b5a-b956-853ea89dd8d4", "fields": { - "element": "72dd24ed-22f5-40a6-bbb4-b4b0abfcd758", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"f8d56f23-51f6-40dd-9482-939a1dd877b3\"]", + "element": "9e7e2de2-e970-4e4f-81e7-b90008d474c0", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"eed5499a-e95f-4f06-baa0-145d917a5b0c\"]", "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "cc4ca9d4-57ac-4b86-aa08-848fb31c15f1", + "pk": "d5d57a9e-97fb-401f-a128-5fc524946c0e", "fields": { - "element": "43ba23ed-3e59-466d-b48f-35928d3d9a59", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", + "element": "ee161939-65e6-4e1f-be80-ea142dfb0c60", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"1444e97e-4873-4731-9b75-79f931c9dc9e\"]", "ordering": 3 } }, { "model": "documents.elementpath", - "pk": "d28feecf-d0a3-4bd6-b045-71cae47ccf4f", + "pk": "deb7d260-5c5c-4159-9eeb-4f98e39e1a56", "fields": { - "element": "67482d70-765b-4092-b462-2d955fd8a7df", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\"]", + "element": "c348ff6e-786b-445a-a828-a693fb000fe8", + "path": "[]", "ordering": 0 } }, { "model": "documents.elementpath", - "pk": "d840ea1c-695a-4e81-bfb1-ccc2c7746979", + "pk": "ed85c4fa-f853-428c-bd3e-f084e9274f50", "fields": { - "element": "f09bebdb-152e-427c-ae2b-2e296982f342", - "path": "[\"900dcb10-2146-4571-8735-f508eb5f9986\"]", + "element": "6953caa3-b8bb-46a8-a222-1f386ff539f5", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\", \"1444e97e-4873-4731-9b75-79f931c9dc9e\"]", "ordering": 2 } }, { "model": "documents.elementpath", - "pk": "dd98d35b-a3dd-48fa-bec0-1e932f9314ff", + "pk": "f59638f1-17e6-4715-9672-8832bd12c5fb", "fields": { - "element": "2aaa4788-127e-464c-bd8c-cd938796d207", - "path": "[\"900dcb10-2146-4571-8735-f508eb5f9986\"]", - "ordering": 0 + "element": "eed5499a-e95f-4f06-baa0-145d917a5b0c", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 5 } }, { "model": "documents.elementpath", - "pk": "de39b960-87d6-4805-bd39-93debf36f7b3", + "pk": "f663a425-1981-4c25-9e3c-123a1a025db5", "fields": { - "element": "ba400ee3-7247-4c20-bef4-3a49ad9e2e77", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"67482d70-765b-4092-b462-2d955fd8a7df\"]", - "ordering": 0 + "element": "2a08be28-27f2-48f8-8d87-437893d389ca", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", + "ordering": 7 + } +}, +{ + "model": "documents.elementpath", + "pk": "ff0bca17-626f-4671-bc4e-70a9f44ad702", + "fields": { + "element": "97394f5f-6146-42be-8038-0d735e12d5f1", + "path": "[\"c348ff6e-786b-445a-a828-a693fb000fe8\"]", + "ordering": 2 } }, { "model": "documents.elementpath", - "pk": "f0042f9c-66a9-448d-a202-03b55d40d03d", + "pk": "ff852e37-1ca6-43dd-b47a-c4530c0d46c1", "fields": { - "element": "9f1c4e10-d94c-4628-a575-5cb0afdd34af", - "path": "[\"12e84ea0-004a-43e7-9fcc-85021e2407a9\", \"43ba23ed-3e59-466d-b48f-35928d3d9a59\"]", + "element": "1444e97e-4873-4731-9b75-79f931c9dc9e", + "path": "[\"6d6b7b80-6783-42ef-88ec-15bdbe8ffb65\"]", "ordering": 0 } }, { "model": "documents.element", - "pk": "12e84ea0-004a-43e7-9fcc-85021e2407a9", + "pk": "1145ba8e-4bd5-4f2f-8bb1-c307295d88a0", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "60e8c1f1-c04d-49b6-bc6e-70e38e437f36", - "name": "Volume 1", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface B", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -828,18 +828,18 @@ }, { "model": "documents.element", - "pk": "1f20a3a4-33be-43a3-9427-393799aba6d7", + "pk": "1444e97e-4873-4731-9b75-79f931c9dc9e", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "PARIS", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 1, page 1r", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -847,18 +847,18 @@ }, { "model": "documents.element", - "pk": "2aaa4788-127e-464c-bd8c-cd938796d207", + "pk": "1f8e08ad-ee8e-4924-a0b3-740722dfae47", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 2, page 1r", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "PARIS", "creator": null, "worker_version": null, "worker_run": null, - "image": "a68c21d7-d24f-44d7-b134-3c50ee6ddba1", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -866,13 +866,13 @@ }, { "model": "documents.element", - "pk": "43ba23ed-3e59-466d-b48f-35928d3d9a59", + "pk": "2a08be28-27f2-48f8-8d87-437893d389ca", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", - "name": "Act 1", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", + "name": "Act 5", "creator": null, "worker_version": null, "worker_run": null, @@ -885,18 +885,18 @@ }, { "model": "documents.element", - "pk": "492ea0b0-bcaf-4a46-a15a-29cd08e32d90", + "pk": "2ef2d52a-0316-4eb6-a3f4-a48c4e25ce7c", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 1, page 1v", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "PARIS", "creator": null, "worker_version": null, "worker_run": null, - "image": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -904,17 +904,17 @@ }, { "model": "documents.element", - "pk": "60a6c062-1bbb-4e5f-82e7-37cb77d92419", + "pk": "2f7f15c7-c39b-4164-aea0-050c2a0e9d34", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", "name": "DATUM", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", + "image": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)", "rotation_angle": 0, "mirrored": false, @@ -923,18 +923,18 @@ }, { "model": "documents.element", - "pk": "6452b6c6-3d58-48c2-9032-691095fe8317", + "pk": "39d46933-549e-40cc-93e4-3535db7ad8a0", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "ROY", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "DATUM", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", - "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -942,18 +942,18 @@ }, { "model": "documents.element", - "pk": "66843ee4-559b-4d2d-a9ce-4dd425022159", + "pk": "3dc4ff7a-9a40-431b-b692-a2b5af381ffd", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "ROY", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 1, page 2r", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -961,17 +961,17 @@ }, { "model": "documents.element", - "pk": "67482d70-765b-4092-b462-2d955fd8a7df", + "pk": "416d13a8-4a15-4641-9b68-36862e80c176", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 1, page 1r", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface C", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", + "image": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, @@ -980,18 +980,18 @@ }, { "model": "documents.element", - "pk": "72dd24ed-22f5-40a6-bbb4-b4b0abfcd758", + "pk": "454b9f6d-8b0d-4313-baa3-82ccf8856d42", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface F", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 1, page 1v", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)", + "image": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -999,18 +999,18 @@ }, { "model": "documents.element", - "pk": "737db4ff-8119-4e12-be99-968d7fa3be22", + "pk": "549a9a87-0632-4846-962d-7799147e0225", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 1, page 2r", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", + "name": "Act 2", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1018,18 +1018,18 @@ }, { "model": "documents.element", - "pk": "7ac6504c-4088-4e6e-9a48-567f1f7e54c8", + "pk": "6953caa3-b8bb-46a8-a222-1f386ff539f5", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 2, page 1v", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "DATUM", "creator": null, "worker_version": null, "worker_run": null, - "image": "4867c2a1-fadc-4086-842c-c914b678d37d", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1037,18 +1037,18 @@ }, { "model": "documents.element", - "pk": "7cd8a970-ca3a-479f-b49e-1292b216c1b9", + "pk": "6d6b7b80-6783-42ef-88ec-15bdbe8ffb65", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "DATUM", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "18027add-0729-400d-a225-60927f1dd2d9", + "name": "Volume 1", "creator": null, "worker_version": null, "worker_run": null, - "image": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", - "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1056,18 +1056,18 @@ }, { "model": "documents.element", - "pk": "7f80cd7d-f24f-4691-a139-0ce744ea7577", + "pk": "77ced3ba-7f04-48c7-b5fa-2b101d191c23", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "PARIS", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 2, page 1v", "creator": null, "worker_version": null, "worker_run": null, - "image": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", - "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", + "image": "d9c10a6b-6d15-4d60-a934-15a79d0b0bce", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1075,18 +1075,18 @@ }, { "model": "documents.element", - "pk": "8144a0f8-f75b-43fa-ac27-d49d69bc483c", + "pk": "7c1ba0f5-1c2a-45d8-8ef1-6217e06e079b", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", - "name": "Act 4", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface F", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1094,18 +1094,18 @@ }, { "model": "documents.element", - "pk": "8349d4ba-fd23-4da6-a99b-76ba2e359b6f", + "pk": "81938246-57ff-49ad-bc79-d07de4275096", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", - "name": "Act 3", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "ROY", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1113,18 +1113,18 @@ }, { "model": "documents.element", - "pk": "8727b32e-6b08-44fd-84ff-54d505fb5a85", + "pk": "97394f5f-6146-42be-8038-0d735e12d5f1", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface B", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 2, page 2r", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", - "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)", + "image": "a6d3f3bc-986d-4618-8a87-fb1b86d9b866", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1132,18 +1132,18 @@ }, { "model": "documents.element", - "pk": "900dcb10-2146-4571-8735-f508eb5f9986", + "pk": "9e7e2de2-e970-4e4f-81e7-b90008d474c0", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "60e8c1f1-c04d-49b6-bc6e-70e38e437f36", - "name": "Volume 2", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface D", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (0 0, 0 300, 300 300, 300 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1151,18 +1151,18 @@ }, { "model": "documents.element", - "pk": "9f1c4e10-d94c-4628-a575-5cb0afdd34af", + "pk": "a9c73703-3711-46ac-957f-25f9bb77af76", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface A", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "ROY", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", - "polygon": "LINEARRING (0 0, 0 600, 600 600, 600 0, 0 0)", + "image": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", + "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1170,18 +1170,18 @@ }, { "model": "documents.element", - "pk": "a0373c38-907d-4127-9762-5aada56b7165", + "pk": "b46d402f-385c-42c8-bca3-4cf732c6b952", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", - "name": "Act 2", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface A", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (0 0, 0 600, 600 600, 600 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1189,18 +1189,18 @@ }, { "model": "documents.element", - "pk": "a41e2061-65cf-4c6e-9ea3-48d00d74133d", + "pk": "bdea4cf0-63bf-4918-b67d-b879d09f3c95", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface C", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", + "name": "Act 4", "creator": null, "worker_version": null, "worker_run": null, - "image": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1208,18 +1208,18 @@ }, { "model": "documents.element", - "pk": "ba400ee3-7247-4c20-bef4-3a49ad9e2e77", + "pk": "c348ff6e-786b-445a-a828-a693fb000fe8", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "PARIS", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "18027add-0729-400d-a225-60927f1dd2d9", + "name": "Volume 2", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", - "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1227,18 +1227,18 @@ }, { "model": "documents.element", - "pk": "c80311e3-4529-45d6-9575-31b362c99925", + "pk": "d3b1f490-1ac8-430e-b0d3-eb617d90b900", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "DATUM", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "PARIS", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)", + "image": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", + "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1246,18 +1246,18 @@ }, { "model": "documents.element", - "pk": "dc79378e-1804-45c8-b23f-a2eeb33734de", + "pk": "e590e52a-11ec-4e27-b3b1-c67cc589ced8", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface D", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "2bee95f7-e16e-41ae-a61d-51b9a22c3fa0", + "name": "Surface E", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (0 0, 0 300, 300 300, 300 0, 0 0)", + "image": "40210c9c-bf96-4364-a715-17ca2cf675cc", + "polygon": "LINEARRING (300 300, 300 600, 600 600, 600 300, 300 300)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1265,17 +1265,17 @@ }, { "model": "documents.element", - "pk": "e2e0ab90-85c8-457e-920d-479bebb43bf9", + "pk": "ee161939-65e6-4e1f-be80-ea142dfb0c60", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "097f73b9-4ea7-4063-98b0-e17eb698e77a", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "1ca6552d-f876-4d2a-a167-38736ebed338", "name": "Text line", "creator": null, "worker_version": null, "worker_run": null, - "image": "627a53a6-466c-4114-b826-852ecd328e47", + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", "rotation_angle": 0, "mirrored": false, @@ -1284,18 +1284,18 @@ }, { "model": "documents.element", - "pk": "e38ab791-092f-48eb-bb09-ea95e5a01998", + "pk": "eed5499a-e95f-4f06-baa0-145d917a5b0c", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "aa7b5e5a-eaa3-49b5-8c7a-826941c9d472", - "name": "ROY", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", + "name": "Act 3", "creator": null, "worker_version": null, "worker_run": null, - "image": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", - "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1303,18 +1303,18 @@ }, { "model": "documents.element", - "pk": "f09bebdb-152e-427c-ae2b-2e296982f342", + "pk": "f3a388d1-9968-4486-9e3b-e5a2a11947b1", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "f2d75650-9d48-4b6e-b210-dbd595a668d2", - "name": "Volume 2, page 2r", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "571f6a9b-e38b-4bd6-b22f-85bd66cc1a5e", + "name": "Act 1", "creator": null, "worker_version": null, "worker_run": null, - "image": "d7f4c84a-8aae-4c7d-86ce-567c5d4adc6d", - "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", + "image": null, + "polygon": null, "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1322,18 +1322,18 @@ }, { "model": "documents.element", - "pk": "f6b8eced-ee41-42d3-812a-a622f1879809", + "pk": "fa35b384-692f-4b42-91ba-60d384ef251f", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "fb9cf6d3-b31a-449c-a780-2f5db501695f", - "name": "Surface E", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "167b45fd-13a2-4ef8-b937-47f64e2665a8", + "name": "ROY", "creator": null, "worker_version": null, "worker_run": null, - "image": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", - "polygon": "LINEARRING (300 300, 300 600, 600 600, 600 300, 300 300)", + "image": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", + "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1341,18 +1341,18 @@ }, { "model": "documents.element", - "pk": "f8d56f23-51f6-40dd-9482-939a1dd877b3", + "pk": "ffffc01b-7577-4a93-9148-02fdc1f80435", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "c6267733-b1ce-4ea3-ac20-3a18c3d66f24", - "name": "Act 5", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "a8f287b7-31f2-491a-b13f-cd2aa0c461d4", + "name": "Volume 2, page 1r", "creator": null, "worker_version": null, "worker_run": null, - "image": null, - "polygon": null, + "image": "0e219e81-b8ab-484b-a8f2-cb848a9c8b45", + "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)", "rotation_angle": 0, "mirrored": false, "confidence": null @@ -1360,67 +1360,67 @@ }, { "model": "documents.entitytype", - "pk": "4e9c9ca3-03ae-4994-b617-4d78f0854dc0", + "pk": "270158cd-aaa6-46c6-b62f-036cdcc77e9b", "fields": { "name": "person", "color": "ff0000", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9" } }, { "model": "documents.entitytype", - "pk": "8c7ad642-50eb-4125-899b-aa3d03024a47", + "pk": "2cb12ff7-fc14-4d6b-a0dd-0845333171f5", "fields": { - "name": "location", + "name": "organization", "color": "ff0000", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9" } }, { "model": "documents.entitytype", - "pk": "95fcaaf8-6a17-4540-8a76-866a6cad9f1d", + "pk": "67190699-79a4-4f85-aaed-60e05adefd1a", "fields": { "name": "number", "color": "ff0000", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9" } }, { "model": "documents.entitytype", - "pk": "974f88d0-2e4c-4a9e-85b7-2e244c2e883f", + "pk": "a5e2132e-f991-4ed9-ad10-a9fabd1401df", "fields": { "name": "date", "color": "ff0000", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9" } }, { "model": "documents.entitytype", - "pk": "e82c02b6-9b63-483a-a3c0-94fe032d83f8", + "pk": "feaa7348-a77e-4af7-9763-2ca98b22c623", "fields": { - "name": "organization", + "name": "location", "color": "ff0000", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9" } }, { "model": "documents.transcription", - "pk": "268de903-300e-4a00-8f10-e2e10ac2a733", + "pk": "0028aefa-a8d3-4a0f-8634-6d1f0b619bb1", "fields": { - "element": "60a6c062-1bbb-4e5f-82e7-37cb77d92419", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "1444e97e-4873-4731-9b75-79f931c9dc9e", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "DATUM", + "text": "Lorem ipsum dolor sit amet", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "53d8a708-cd44-40b8-8862-7f663ece1133", + "pk": "3db65ed1-320a-4008-a887-747e3a3c6add", "fields": { - "element": "e38ab791-092f-48eb-bb09-ea95e5a01998", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "a9c73703-3711-46ac-957f-25f9bb77af76", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, "text": "ROY", "orientation": "horizontal-lr", @@ -1429,10 +1429,10 @@ }, { "model": "documents.transcription", - "pk": "56a95e2d-4262-42da-a435-a5f29c0bc094", + "pk": "5e252d09-6240-43fe-b531-ea5f8d150c91", "fields": { - "element": "ba400ee3-7247-4c20-bef4-3a49ad9e2e77", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "d3b1f490-1ac8-430e-b0d3-eb617d90b900", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, "text": "PARIS", "orientation": "horizontal-lr", @@ -1441,123 +1441,123 @@ }, { "model": "documents.transcription", - "pk": "7591f452-3d64-4b43-9789-0f05f2dfd6f8", + "pk": "6fb2d310-d2ce-4de8-89fc-2af120735fc1", "fields": { - "element": "6452b6c6-3d58-48c2-9032-691095fe8317", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "2ef2d52a-0316-4eb6-a3f4-a48c4e25ce7c", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "ROY", + "text": "PARIS", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "9b348778-35b7-4ed8-8232-4a641d51118d", + "pk": "9fd17563-7f50-4073-b286-42ddf7e47fcc", "fields": { - "element": "7f80cd7d-f24f-4691-a139-0ce744ea7577", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "39d46933-549e-40cc-93e4-3535db7ad8a0", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "PARIS", + "text": "DATUM", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "dd193fa4-103c-43ae-8914-ed24f2487251", + "pk": "b1260aaa-bcba-43ed-bab9-27a6effa99e0", "fields": { - "element": "7cd8a970-ca3a-479f-b49e-1292b216c1b9", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "1f8e08ad-ee8e-4924-a0b3-740722dfae47", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "DATUM", + "text": "PARIS", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "de4d3e9b-597b-483a-8178-0c78328655bf", + "pk": "b58a6fca-0ef0-4a9a-b020-cfc5d2bf0c38", "fields": { - "element": "66843ee4-559b-4d2d-a9ce-4dd425022159", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "2f7f15c7-c39b-4164-aea0-050c2a0e9d34", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "ROY", + "text": "DATUM", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "e37e143e-c6b5-4b3f-82ce-37e60fd188c1", + "pk": "bfa7949c-ad04-4c20-a92f-2e67006c4b5e", "fields": { - "element": "1f20a3a4-33be-43a3-9427-393799aba6d7", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "81938246-57ff-49ad-bc79-d07de4275096", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "PARIS", + "text": "ROY", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "e41a7db5-5c44-4a14-88e9-92d7769263ca", + "pk": "e66cc126-2d3c-4419-bd18-c4f8f0cb4bbb", "fields": { - "element": "c80311e3-4529-45d6-9575-31b362c99925", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "fa35b384-692f-4b42-91ba-60d384ef251f", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "DATUM", + "text": "ROY", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.transcription", - "pk": "fe88b0e9-117e-4c9b-a761-a8e63f2f095a", + "pk": "ebce2b3b-c593-4a72-bf99-ffd16d552aa0", "fields": { - "element": "67482d70-765b-4092-b462-2d955fd8a7df", - "worker_version": "06e2171f-b7d6-49dc-90fc-d47784e6e334", + "element": "6953caa3-b8bb-46a8-a222-1f386ff539f5", + "worker_version": "110fd472-59f4-43fa-a954-0a8dd776c86d", "worker_run": null, - "text": "Lorem ipsum dolor sit amet", + "text": "DATUM", "orientation": "horizontal-lr", "confidence": 1.0 } }, { "model": "documents.allowedmetadata", - "pk": "13e9fa71-94a9-4e47-95a4-291597a811ef", + "pk": "1645d910-5282-4ea0-8de9-b9495bfc4fd3", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "text", - "name": "folio" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "date", + "name": "date" } }, { "model": "documents.allowedmetadata", - "pk": "721a146d-a883-4f73-981a-1d90744d6d13", + "pk": "4f1b7592-fd60-41a9-adb1-c31afd86d8b7", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "type": "date", - "name": "date" + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", + "type": "text", + "name": "folio" } }, { "model": "documents.allowedmetadata", - "pk": "7b693888-219e-4f24-a930-de812973dc27", + "pk": "e44b9326-0e8c-4e0f-a735-3d701bda3852", "fields": { - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "type": "location", "name": "location" } }, { "model": "documents.metadata", - "pk": "0d46167f-853f-4a07-b780-216a8c400aa3", + "pk": "24d2c357-1f9f-4aeb-b680-b7426144d301", "fields": { - "element": "8349d4ba-fd23-4da6-a99b-76ba2e359b6f", + "element": "549a9a87-0632-4846-962d-7799147e0225", "name": "number", "type": "text", - "value": "3", + "value": "2", "entity": null, "worker_version": null, "worker_run": null @@ -1565,12 +1565,12 @@ }, { "model": "documents.metadata", - "pk": "2cafc35d-ea3c-48cb-a93c-907d6f0a8643", + "pk": "2d466cc6-bd16-462e-81e3-57f7d3406ed5", "fields": { - "element": "2aaa4788-127e-464c-bd8c-cd938796d207", + "element": "77ced3ba-7f04-48c7-b5fa-2b101d191c23", "name": "folio", "type": "text", - "value": "1r", + "value": "1v", "entity": null, "worker_version": null, "worker_run": null @@ -1578,9 +1578,9 @@ }, { "model": "documents.metadata", - "pk": "435e31bc-7844-474b-aff4-c3b8fcc6927a", + "pk": "2ed9bece-59a6-41e3-b7fa-23a17a1fc720", "fields": { - "element": "43ba23ed-3e59-466d-b48f-35928d3d9a59", + "element": "f3a388d1-9968-4486-9e3b-e5a2a11947b1", "name": "number", "type": "text", "value": "1", @@ -1591,12 +1591,12 @@ }, { "model": "documents.metadata", - "pk": "44548048-3180-4912-9134-10ae87037392", + "pk": "32b3e87e-37b2-43fe-b2e9-5c2720f548fe", "fields": { - "element": "737db4ff-8119-4e12-be99-968d7fa3be22", - "name": "folio", + "element": "bdea4cf0-63bf-4918-b67d-b879d09f3c95", + "name": "number", "type": "text", - "value": "2r", + "value": "4", "entity": null, "worker_version": null, "worker_run": null @@ -1604,12 +1604,12 @@ }, { "model": "documents.metadata", - "pk": "57fb874a-5aa8-4526-9cf8-ad5c10b38d24", + "pk": "4d4ccd74-5144-423b-98ef-ff6f27ef0cde", "fields": { - "element": "8144a0f8-f75b-43fa-ac27-d49d69bc483c", - "name": "number", + "element": "3dc4ff7a-9a40-431b-b692-a2b5af381ffd", + "name": "folio", "type": "text", - "value": "4", + "value": "2r", "entity": null, "worker_version": null, "worker_run": null @@ -1617,12 +1617,12 @@ }, { "model": "documents.metadata", - "pk": "9ea4ce55-d95c-46d2-802e-89f98abe862b", + "pk": "5935cea1-4176-4ba8-bc7e-7d399427ab86", "fields": { - "element": "f09bebdb-152e-427c-ae2b-2e296982f342", + "element": "1444e97e-4873-4731-9b75-79f931c9dc9e", "name": "folio", "type": "text", - "value": "2r", + "value": "1r", "entity": null, "worker_version": null, "worker_run": null @@ -1630,9 +1630,9 @@ }, { "model": "documents.metadata", - "pk": "b22d936a-386d-48e3-88e0-6b88da42c982", + "pk": "5e861243-06eb-4e72-b904-86e04bb61fa0", "fields": { - "element": "492ea0b0-bcaf-4a46-a15a-29cd08e32d90", + "element": "454b9f6d-8b0d-4313-baa3-82ccf8856d42", "name": "folio", "type": "text", "value": "1v", @@ -1643,9 +1643,9 @@ }, { "model": "documents.metadata", - "pk": "d58788f8-58a9-488a-bef9-0302705ff942", + "pk": "752125f4-6e63-46e3-be1d-6a5c74e1acd5", "fields": { - "element": "f8d56f23-51f6-40dd-9482-939a1dd877b3", + "element": "2a08be28-27f2-48f8-8d87-437893d389ca", "name": "number", "type": "text", "value": "5", @@ -1656,12 +1656,12 @@ }, { "model": "documents.metadata", - "pk": "de810d60-9a4b-42e3-85c4-7a2174a01213", + "pk": "7f85231d-47f9-415d-a0d2-156a58cf70bc", "fields": { - "element": "a0373c38-907d-4127-9762-5aada56b7165", + "element": "eed5499a-e95f-4f06-baa0-145d917a5b0c", "name": "number", "type": "text", - "value": "2", + "value": "3", "entity": null, "worker_version": null, "worker_run": null @@ -1669,12 +1669,12 @@ }, { "model": "documents.metadata", - "pk": "e4b071a7-41f5-416f-aeee-53ca55d4b640", + "pk": "abbea23e-5dc2-481c-a34b-2e4bd18bace8", "fields": { - "element": "67482d70-765b-4092-b462-2d955fd8a7df", + "element": "97394f5f-6146-42be-8038-0d735e12d5f1", "name": "folio", "type": "text", - "value": "1r", + "value": "2r", "entity": null, "worker_version": null, "worker_run": null @@ -1682,12 +1682,12 @@ }, { "model": "documents.metadata", - "pk": "fec9c649-5fd4-43f7-ab28-3b364b868087", + "pk": "ad4154e1-2017-4028-9f81-a9611e6a439b", "fields": { - "element": "7ac6504c-4088-4e6e-9a48-567f1f7e54c8", + "element": "ffffc01b-7577-4a93-9148-02fdc1f80435", "name": "folio", "type": "text", - "value": "1v", + "value": "1r", "entity": null, "worker_version": null, "worker_run": null @@ -1710,12 +1710,12 @@ }, { "model": "images.image", - "pk": "4867c2a1-fadc-4086-842c-c914b678d37d", + "pk": "0e219e81-b8ab-484b-a8f2-cb848a9c8b45", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img5", + "path": "img4", "width": 1000, "height": 1000, "hash": null, @@ -1724,12 +1724,12 @@ }, { "model": "images.image", - "pk": "627a53a6-466c-4114-b826-852ecd328e47", + "pk": "40210c9c-bf96-4364-a715-17ca2cf675cc", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img1", + "path": "img3", "width": 1000, "height": 1000, "hash": null, @@ -1738,12 +1738,12 @@ }, { "model": "images.image", - "pk": "68df44c1-ed1f-4f29-870d-de7b4b03b1a5", + "pk": "4e80d190-2343-4e72-b60f-fda6b3d70b0d", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img3", + "path": "img1", "width": 1000, "height": 1000, "hash": null, @@ -1752,12 +1752,12 @@ }, { "model": "images.image", - "pk": "7f006318-b3d2-4cda-b1ab-8ff844c07b35", + "pk": "a6d3f3bc-986d-4618-8a87-fb1b86d9b866", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img2", + "path": "img6", "width": 1000, "height": 1000, "hash": null, @@ -1766,12 +1766,12 @@ }, { "model": "images.image", - "pk": "a68c21d7-d24f-44d7-b134-3c50ee6ddba1", + "pk": "bd7d9ffd-013c-4970-9df8-1d18bbe88bd5", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img4", + "path": "img2", "width": 1000, "height": 1000, "hash": null, @@ -1780,12 +1780,12 @@ }, { "model": "images.image", - "pk": "d7f4c84a-8aae-4c7d-86ce-567c5d4adc6d", + "pk": "d9c10a6b-6d15-4d60-a934-15a79d0b0bce", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "server": 1, - "path": "img6", + "path": "img5", "width": 1000, "height": 1000, "hash": null, @@ -1794,56 +1794,56 @@ }, { "model": "users.right", - "pk": "053efd1b-d12f-49e5-ae72-54c7008224ec", + "pk": "053ed1e1-850b-4554-b0d0-d05576b71696", "fields": { - "user": 2, + "user": 3, "group": null, - "content_type": 19, - "content_id": "1204ee59-2b68-4dfb-a083-3df4996c2337", - "level": 100 + "content_type": 34, + "content_id": "18eabf1f-18b6-43d9-b104-7abfcb5b9baa", + "level": 50 } }, { "model": "users.right", - "pk": "3e267701-586a-45f5-adf3-20bab26fbaae", + "pk": "09f17812-99b6-4aa0-987b-541efc0d9eab", "fields": { "user": 2, "group": null, - "content_type": 34, - "content_id": "192deb9f-d37e-4edd-bb9b-2ae35c7ecba5", + "content_type": 19, + "content_id": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "level": 100 } }, { "model": "users.right", - "pk": "7c7634a0-2cd6-4d54-9a1b-14b0c0390050", + "pk": "0dcde7a7-c2a1-4e91-85c5-f5d392c511a6", "fields": { - "user": 2, + "user": 4, "group": null, - "content_type": 11, - "content_id": "94055f35-9ac9-44a0-ac5d-386e132bea2c", + "content_type": 34, + "content_id": "18eabf1f-18b6-43d9-b104-7abfcb5b9baa", "level": 10 } }, { "model": "users.right", - "pk": "9f79af1d-f49f-4fd7-8504-2553ceab64db", + "pk": "42da1a2f-2ff0-4480-b530-30b0934eb6be", "fields": { - "user": 3, + "user": 2, "group": null, "content_type": 34, - "content_id": "192deb9f-d37e-4edd-bb9b-2ae35c7ecba5", - "level": 50 + "content_id": "18eabf1f-18b6-43d9-b104-7abfcb5b9baa", + "level": 100 } }, { "model": "users.right", - "pk": "f38dad9a-d7b5-43cc-8ec7-e437296a0ca4", + "pk": "9323c83d-637f-43b5-8829-03c71505f4fb", "fields": { - "user": 4, + "user": 2, "group": null, - "content_type": 34, - "content_id": "192deb9f-d37e-4edd-bb9b-2ae35c7ecba5", + "content_type": 11, + "content_id": "ff732a3f-c9ac-43fe-8b22-c03cf82d2a4e", "level": 10 } }, @@ -1851,7 +1851,7 @@ "model": "users.user", "pk": 1, "fields": { - "password": "pbkdf2_sha256$390000$uNaUvBneqUWhzAsyWIWTw0$2Q13vkqIe5EhzX9rxV94tnAAuzYxXL1OMkfD49k8j0U=", + "password": "pbkdf2_sha256$390000$K7ghXs3mkOALU9T2ri8k6D$Hw9rIqH0Mdlvd2vaMSsj7lH3TLerOKfpkHUVk4ZfZPM=", "last_login": null, "email": "root@root.fr", "display_name": "Admin", @@ -1866,7 +1866,7 @@ "model": "users.user", "pk": 2, "fields": { - "password": "pbkdf2_sha256$390000$c0a4pOThTZIgnvLuFhk0M8$uY0aZIWY33541EueCEsJwiSn9JV4/xMmblh2ZB+iJIQ=", + "password": "pbkdf2_sha256$390000$4SWGc0rfBPkIHNBjmvIVhM$F81VX9tQd5l9iKOdb970liPhie/hbyyHNsYO7O7fOKE=", "last_login": null, "email": "user@user.fr", "display_name": "Test user", @@ -1909,7 +1909,7 @@ }, { "model": "users.group", - "pk": "192deb9f-d37e-4edd-bb9b-2ae35c7ecba5", + "pk": "18eabf1f-18b6-43d9-b104-7abfcb5b9baa", "fields": { "name": "User group", "public": false, @@ -3905,17 +3905,53 @@ "codename": "view_datasetelement" } }, +{ + "model": "auth.permission", + "pk": 222, + "fields": { + "name": "Can add dataset set", + "content_type": 57, + "codename": "add_datasetset" + } +}, +{ + "model": "auth.permission", + "pk": 223, + "fields": { + "name": "Can change dataset set", + "content_type": 57, + "codename": "change_datasetset" + } +}, +{ + "model": "auth.permission", + "pk": 224, + "fields": { + "name": "Can delete dataset set", + "content_type": 57, + "codename": "delete_datasetset" + } +}, +{ + "model": "auth.permission", + "pk": 225, + "fields": { + "name": "Can view dataset set", + "content_type": 57, + "codename": "view_datasetset" + } +}, { "model": "ponos.farm", - "pk": "94055f35-9ac9-44a0-ac5d-386e132bea2c", + "pk": "ff732a3f-c9ac-43fe-8b22-c03cf82d2a4e", "fields": { "name": "Wheat farm", - "seed": "8cb2c985dcb2dcd344db193307b9049c1fe54d26faba25b417acbb2cdfcc9f41" + "seed": "91901d0fec5faf1551277b5c76546b41902b8aefb819c3dbd10c3a643e6bb93c" } }, { "model": "ponos.task", - "pk": "1cb97d66-b673-4068-9824-ab8c33fdcb95", + "pk": "5c722e0d-2a2f-4ee8-9609-6033e450fd53", "fields": { "run": 0, "depth": 0, @@ -3931,22 +3967,22 @@ "agent": null, "requires_gpu": false, "gpu": null, - "process": "3421ba72-b14c-4df0-a504-1e7e90abe4b4", + "process": "d6b43bc9-d87c-4c80-9211-f0c807506ad7", "worker_run": null, "container": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "expiry": "2100-12-31T23:59:59.999Z", "extra_files": "{}", - "token": "/Mp4N1XhQsWzkPneokooyFdtnCiW4EeQi09Z6nn5LUo=", + "token": "OhbumqNZSmuGnj0MZ3lhJYRc3nHBm0WGrv9RNdtYpJk=", "parents": [] } }, { "model": "ponos.artifact", - "pk": "492ea45f-2c2d-4bf3-a461-016204fcfb03", + "pk": "481b42e2-645c-47fe-937f-5b4431f10563", "fields": { - "task": "1cb97d66-b673-4068-9824-ab8c33fdcb95", + "task": "5c722e0d-2a2f-4ee8-9609-6033e450fd53", "path": "/path/to/docker_build", "size": 42000, "content_type": "application/octet-stream", @@ -3956,32 +3992,78 @@ }, { "model": "training.dataset", - "pk": "5fb84be2-a906-4bc0-830b-f3a369021a32", + "pk": "170bc276-0e11-483a-9486-88a4bf2079b2", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "creator": 2, "task": null, "name": "Second Dataset", "description": "dataset number two", - "state": "open", - "sets": "[\"training\", \"test\", \"validation\"]" + "state": "open" } }, { "model": "training.dataset", - "pk": "cd5bcbb9-450f-4bdf-9bfc-9640194c2f88", + "pk": "6b32dab0-e3f2-4fff-b0ad-2ea1ee550810", "fields": { "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", - "corpus": "1204ee59-2b68-4dfb-a083-3df4996c2337", + "corpus": "3a30b730-9c9e-4b5a-828e-abc4365ea1b9", "creator": 2, "task": null, "name": "First Dataset", "description": "dataset number one", - "state": "open", - "sets": "[\"training\", \"test\", \"validation\"]" + "state": "open" + } +}, +{ + "model": "training.datasetset", + "pk": "00e3b37b-f1ed-4adb-a1de-a1c103edaa24", + "fields": { + "name": "Test", + "dataset": "170bc276-0e11-483a-9486-88a4bf2079b2" + } +}, +{ + "model": "training.datasetset", + "pk": "95255ff4-7bca-424c-8e7e-d8b5c33c585f", + "fields": { + "name": "Train", + "dataset": "170bc276-0e11-483a-9486-88a4bf2079b2" + } +}, +{ + "model": "training.datasetset", + "pk": "b21e4b31-1dc1-4015-9933-3a8e180cf2e0", + "fields": { + "name": "Validation", + "dataset": "170bc276-0e11-483a-9486-88a4bf2079b2" + } +}, +{ + "model": "training.datasetset", + "pk": "b76d919c-ce7e-4896-94c3-9b47862b997a", + "fields": { + "name": "Validation", + "dataset": "6b32dab0-e3f2-4fff-b0ad-2ea1ee550810" + } +}, +{ + "model": "training.datasetset", + "pk": "d5f4d410-0588-4d19-8d08-b57a11bad67f", + "fields": { + "name": "Train", + "dataset": "6b32dab0-e3f2-4fff-b0ad-2ea1ee550810" + } +}, +{ + "model": "training.datasetset", + "pk": "db70ad8a-8d6b-44c6-b8d3-837bf5a4ab8e", + "fields": { + "name": "Test", + "dataset": "6b32dab0-e3f2-4fff-b0ad-2ea1ee550810" } } ] diff --git a/arkindex/documents/management/commands/build_fixtures.py b/arkindex/documents/management/commands/build_fixtures.py index 1e8a5cbab4..e14ef7a7ce 100644 --- a/arkindex/documents/management/commands/build_fixtures.py +++ b/arkindex/documents/management/commands/build_fixtures.py @@ -21,6 +21,7 @@ from arkindex.process.models import ( WorkerVersionState, ) from arkindex.project.tools import fake_now +from arkindex.training.models import DatasetSet from arkindex.users.models import Group, Right, Role, User @@ -288,8 +289,15 @@ class Command(BaseCommand): ) # Create 2 datasets - corpus.datasets.create(name="First Dataset", description="dataset number one", creator=user) - corpus.datasets.create(name="Second Dataset", description="dataset number two", creator=user) + dataset_1 = corpus.datasets.create(name="First Dataset", description="dataset number one", creator=user) + dataset_2 = corpus.datasets.create(name="Second Dataset", description="dataset number two", creator=user) + # Create their sets + DatasetSet.objects.bulk_create( + DatasetSet(name=name, dataset_id=dataset_1.id) for name in ["Train", "Validation", "Test"] + ) + DatasetSet.objects.bulk_create( + DatasetSet(name=name, dataset_id=dataset_2.id) for name in ["Train", "Validation", "Test"] + ) # Create 2 volumes vol1 = Element.objects.create( diff --git a/arkindex/process/migrations/0029_processdataset_sets.py b/arkindex/process/migrations/0029_processdataset_sets.py index 868c1cc29f..f1b1cda509 100644 --- a/arkindex/process/migrations/0029_processdataset_sets.py +++ b/arkindex/process/migrations/0029_processdataset_sets.py @@ -1,8 +1,8 @@ import django.core.validators from django.db import migrations, models +import arkindex.process.models import arkindex.project.fields -import arkindex.training.models class Migration(migrations.Migration): @@ -37,7 +37,7 @@ class Migration(migrations.Migration): validators=[django.core.validators.MinLengthValidator(1)] ), size=None, - validators=[django.core.validators.MinLengthValidator(1), arkindex.training.models.validate_unique_set_names] + validators=[django.core.validators.MinLengthValidator(1), arkindex.process.models.validate_unique_set_names] ), ), ] diff --git a/arkindex/process/models.py b/arkindex/process/models.py index 3acbede35e..1d8561000c 100644 --- a/arkindex/process/models.py +++ b/arkindex/process/models.py @@ -5,6 +5,7 @@ from typing import Optional from django.conf import settings from django.contrib.contenttypes.fields import GenericRelation +from django.core.exceptions import ValidationError from django.core.validators import MinLengthValidator, MinValueValidator from django.db import models, transaction from django.db.models import F, Q @@ -28,7 +29,7 @@ from arkindex.project.aws import S3FileMixin, S3FileStatus from arkindex.project.fields import ArrayField, MD5HashField from arkindex.project.models import IndexableModel from arkindex.project.validators import MaxValueValidator -from arkindex.training.models import ModelVersion, ModelVersionState, validate_unique_set_names +from arkindex.training.models import ModelVersion, ModelVersionState from arkindex.users.models import Role @@ -40,6 +41,11 @@ def process_max_chunks(): return settings.MAX_CHUNKS +def validate_unique_set_names(sets): + if len(set(sets)) != len(sets): + raise ValidationError("Set names must be unique.") + + class ActivityState(Enum): """ Store the state of the workers activity tracking for a process. diff --git a/arkindex/project/serializer_fields.py b/arkindex/project/serializer_fields.py index cefaaf14ec..7667083d86 100644 --- a/arkindex/project/serializer_fields.py +++ b/arkindex/project/serializer_fields.py @@ -12,6 +12,7 @@ from arkindex.documents.models import MetaType from arkindex.ponos.utils import get_process_from_task_auth from arkindex.process.models import ProcessMode, WorkerRun from arkindex.project.gis import ensure_linear_ring +from arkindex.training.models import DatasetElement class EnumField(serializers.ChoiceField): @@ -283,12 +284,12 @@ class DatasetSetsCountField(serializers.DictField): def get_attribute(self, instance): if not self.context.get("sets_count", True): return None - elts_count = {k: 0 for k in instance.sets} + elts_count = {k.name: 0 for k in instance.sets.all()} elts_count.update( - instance.dataset_elements - .values("set") + DatasetElement.objects.filter(set__dataset_id=instance.id) + .values("set__name") .annotate(count=Count("id")) - .values_list("set", "count") + .values_list("set__name", "count") ) return elts_count diff --git a/arkindex/training/admin.py b/arkindex/training/admin.py index 858f40be14..66f3626575 100644 --- a/arkindex/training/admin.py +++ b/arkindex/training/admin.py @@ -2,7 +2,7 @@ from django.contrib import admin from enumfields.admin import EnumFieldListFilter from arkindex.project.admin import ArchivedListFilter -from arkindex.training.models import Dataset, MetricKey, MetricValue, Model, ModelVersion +from arkindex.training.models import Dataset, DatasetSet, MetricKey, MetricValue, Model, ModelVersion class ModelAdmin(admin.ModelAdmin): @@ -31,21 +31,17 @@ class MetricKeyAdmin(admin.ModelAdmin): inlines = [MetricValueInline, ] +class DatasetSetInLine(admin.StackedInline): + model = DatasetSet + + class DatasetAdmin(admin.ModelAdmin): list_display = ("name", "corpus", "state") list_filter = (("state", EnumFieldListFilter), "corpus") search_fields = ("name", "description") - fields = ("id", "name", "created", "updated", "description", "corpus", "creator", "task", "sets") + fields = ("id", "name", "created", "updated", "description", "corpus", "creator", "task") readonly_fields = ("id", "created", "updated", "task") - - def get_form(self, *args, **kwargs): - form = super().get_form(*args, **kwargs) - # Add a help text to mention that the set names should be comma-separated. - # This is only done here and not through the usual `help_text=…` in the model - # because this is only relevant to the Django admin and should not appear in - # DRF serializers or the API docs. - form.base_fields["sets"].help_text = "Comma-separated list of set names" - return form + inlines = [DatasetSetInLine, ] admin.site.register(Model, ModelAdmin) diff --git a/arkindex/training/api.py b/arkindex/training/api.py index 353dc6e928..06034116e9 100644 --- a/arkindex/training/api.py +++ b/arkindex/training/api.py @@ -609,6 +609,7 @@ class CorpusDataset(CorpusACLMixin, ListCreateAPIView): def get_queryset(self): return Dataset.objects \ .select_related("creator") \ + .prefetch_related("sets") \ .filter(corpus=self.corpus) \ .order_by("name") diff --git a/arkindex/training/migrations/0001_initial.py b/arkindex/training/migrations/0001_initial.py index 154f97adfd..ba280c7d4a 100644 --- a/arkindex/training/migrations/0001_initial.py +++ b/arkindex/training/migrations/0001_initial.py @@ -8,9 +8,13 @@ import django.db.models.deletion import enumfields.fields from django.db import migrations, models +import arkindex.process.models import arkindex.project.aws import arkindex.project.fields -import arkindex.training.models + + +def default_sets(): + return ["training", "test", "validation"] class Migration(migrations.Migration): @@ -32,7 +36,7 @@ class Migration(migrations.Migration): ("name", models.CharField(max_length=100, validators=[django.core.validators.MinLengthValidator(1)])), ("description", models.TextField(validators=[django.core.validators.MinLengthValidator(1)])), ("state", enumfields.fields.EnumField(default="open", enum=arkindex.training.models.DatasetState, max_length=10)), - ("sets", django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=50, validators=[django.core.validators.MinLengthValidator(1)]), default=arkindex.training.models.default_sets, size=None, validators=[django.core.validators.MinLengthValidator(1), arkindex.training.models.validate_unique_set_names])), + ("sets", django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=50, validators=[django.core.validators.MinLengthValidator(1)]), default=default_sets, size=None, validators=[django.core.validators.MinLengthValidator(1), arkindex.process.models.validate_unique_set_names])), ("corpus", models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name="datasets", to="documents.corpus")), ], ), diff --git a/arkindex/training/migrations/0007_datasetset_model.py b/arkindex/training/migrations/0007_datasetset_model.py index 94e1b35bfc..8630baa593 100644 --- a/arkindex/training/migrations/0007_datasetset_model.py +++ b/arkindex/training/migrations/0007_datasetset_model.py @@ -83,7 +83,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="datasetelement", name="set", - field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name="dataset_elements", to="training.datasetset"), + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name="set_elements", to="training.datasetset"), ), migrations.RemoveField( model_name="dataset", diff --git a/arkindex/training/models.py b/arkindex/training/models.py index 363393d2b8..06f4f84c5f 100644 --- a/arkindex/training/models.py +++ b/arkindex/training/models.py @@ -4,7 +4,6 @@ from hashlib import sha256 from django.conf import settings from django.contrib.contenttypes.fields import GenericRelation -from django.core.exceptions import ValidationError from django.core.validators import MinLengthValidator from django.db import models from django.db.models import Q @@ -241,15 +240,6 @@ class DatasetState(Enum): Error = "error" -def validate_unique_set_names(sets): - if len(set(sets)) != len(sets): - raise ValidationError("Set names must be unique.") - - -def default_sets(): - return ["training", "test", "validation"] - - class Dataset(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False) created = models.DateTimeField(auto_now_add=True) @@ -316,6 +306,6 @@ class DatasetElement(models.Model): ) set = models.ForeignKey( DatasetSet, - related_name="dataset_elements", + related_name="set_elements", on_delete=models.DO_NOTHING, ) diff --git a/arkindex/training/serializers.py b/arkindex/training/serializers.py index ab1e300b58..4acb03a663 100644 --- a/arkindex/training/serializers.py +++ b/arkindex/training/serializers.py @@ -6,18 +6,19 @@ from textwrap import dedent from django.db import transaction from django.db.models import Count, Q from drf_spectacular.utils import extend_schema_field -from rest_framework import serializers +from rest_framework import permissions, serializers from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.validators import UniqueTogetherValidator from arkindex.documents.models import Element from arkindex.documents.serializers.elements import ElementListSerializer from arkindex.ponos.models import Task -from arkindex.process.models import ProcessDataset, Worker +from arkindex.process.models import Worker from arkindex.project.serializer_fields import ArchivedField, DatasetSetsCountField, EnumField from arkindex.training.models import ( Dataset, DatasetElement, + DatasetSet, DatasetState, MetricKey, MetricMode, @@ -479,6 +480,12 @@ class MetricValueBulkSerializer(serializers.Serializer): return validated_data +class DatasetSetSerializer(serializers.ModelSerializer): + class Meta: + model = DatasetSet + fields = ("id", "name",) + + class DatasetSerializer(serializers.ModelSerializer): state = EnumField( DatasetState, @@ -505,6 +512,9 @@ class DatasetSerializer(serializers.ModelSerializer): help_text="Display name of the user who created the dataset.", ) + set_names = serializers.ListField(child=serializers.CharField(max_length=50), write_only=True, default=["Training", "Validation", "Test"]) + sets = DatasetSetSerializer(many=True, read_only=True) + # When creating the dataset, the dataset's corpus comes from the URL, so the APIView passes it through corpus = serializers.HiddenField(default=_corpus_from_context) @@ -517,16 +527,6 @@ class DatasetSerializer(serializers.ModelSerializer): help_text="Distribution of elements in sets. This value is set to null when listing multiple datasets.", ) - def sets_diff(self, new_sets): - """ - Returns a list of removed sets, and a list of added sets for updates - """ - if not isinstance(self.instance, Dataset): - return [], new_sets - current_sets = set(self.instance.sets) - new_sets = set(new_sets) - return list(current_sets - new_sets), list(new_sets - current_sets) - def validate_state(self, state): """ Dataset's state update is limited to these transitions: @@ -550,27 +550,12 @@ class DatasetSerializer(serializers.ModelSerializer): raise ValidationError(f"Transition from {self.instance.state} to {state} is not allowed.") return state - def validate_sets(self, sets): - """ - Ensure sets are updated in a comprehensible way. - It is either possible to add multiple sets, - remove multiple sets or update a single set. - """ - if sets is not None and len(set(sets)) != len(sets): + def validate_set_names(self, set_names): + if self.context["request"].method not in permissions.SAFE_METHODS and self.context["request"].method != "POST": + raise ValidationError("This API endpoint does not allow updating a dataset's sets.") + if set_names is not None and len(set(set_names)) != len(set_names): raise ValidationError("Set names must be unique.") - - removed, added = self.sets_diff(sets) - if removed and ProcessDataset.objects.filter(sets__overlap=removed, dataset_id=self.instance.id).exists(): - # Sets that are used in a ProcessDataset cannot be renamed or deleted - raise ValidationError("These sets cannot be updated because one or more are selected in a dataset process.") - if not removed or not added: - # Some sets have either been added or removed, but not both; do nothing - return sets - elif len(removed) == 1 and len(added) == 1: - # A single set has been renamed. Move its elements later, while performing the update - return sets - else: - raise ValidationError("Updating those sets is ambiguous because several have changed.") + return set_names def validate(self, data): data = super().validate(data) @@ -598,13 +583,17 @@ class DatasetSerializer(serializers.ModelSerializer): return data - @transaction.atomic() - def update(self, instance, validated_data): - removed, added = self.sets_diff(validated_data.get("sets", self.instance.sets)) - if len(removed) == 1 and len(added) == 1: - set_from, set_to = *removed, *added - instance.dataset_elements.filter(set=set_from).update(set=set_to) - return super().update(instance, validated_data) + @transaction.atomic + def create(self, validated_data): + sets = validated_data.pop("set_names") + dataset = Dataset.objects.create(**validated_data) + DatasetSet.objects.bulk_create( + DatasetSet( + name=set_name, + dataset_id=dataset.id + ) for set_name in sets + ) + return dataset class Meta: model = Dataset @@ -613,6 +602,7 @@ class DatasetSerializer(serializers.ModelSerializer): "name", "description", "sets", + "set_names", "set_elements", "state", # Only the corpus ID is actually serialized @@ -647,13 +637,7 @@ class DatasetSerializer(serializers.ModelSerializer): "sets": { "error_messages": { "empty": "Either do not specify set names to use the default values, or specify a non-empty list of names." - }, - "help_text": dedent( - """ - Updating the sets array must either add or remove sets (in this case nothing specific is done), - or rename a single set within the array (all elements linked to the previous set will be moved). - """ - ).strip(), + } } } @@ -726,35 +710,29 @@ class ElementDatasetSerializer(serializers.ModelSerializer): class SelectionDatasetElementSerializer(serializers.Serializer): - dataset_id = serializers.PrimaryKeyRelatedField( - queryset=Dataset.objects.all(), - source="dataset", + set_id = serializers.PrimaryKeyRelatedField( + queryset=DatasetSet.objects.none(), + source="set", write_only=True, - help_text="UUID of a dataset to add elements from your corpus' selection.", + help_text="UUID of a dataset set the elements will be added to.", style={"base_template": "input.html"}, ) - set = serializers.CharField( - max_length=50, - write_only=True, - help_text="Name of the set elements will be added to.", - ) - def validate_dataset_id(self, dataset): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["set_id"].queryset = DatasetSet.objects.filter( + dataset__corpus_id=self.context["corpus"].id + ).select_related("dataset") + + def validate_set_id(self, set): if ( (corpus := self.context.get("corpus")) - and dataset.corpus_id != corpus.id + and set.dataset.corpus_id != corpus.id ): - raise ValidationError(f"Dataset {dataset.id} is not part of corpus {corpus.name}.") - if dataset.state == DatasetState.Complete: - raise ValidationError(f"Dataset {dataset.id} is marked as completed.") - return dataset - - def validate(self, data): - data = super().validate(data) - dataset = data["dataset"] - if data["set"] not in dataset.sets: - raise ValidationError({"set": [f'This dataset only allows one of {", ".join(dataset.sets)}.']}) - return data + raise ValidationError(f"Dataset {set.dataset.id} is not part of corpus {corpus.name}.") + if set.dataset.state == DatasetState.Complete: + raise ValidationError(f"Dataset {set.dataset.id} is marked as completed.") + return set def create(self, validated_data): user = self.context["request"].user diff --git a/arkindex/training/tests/test_datasets_api.py b/arkindex/training/tests/test_datasets_api.py index a97ad190a6..9b19becc27 100644 --- a/arkindex/training/tests/test_datasets_api.py +++ b/arkindex/training/tests/test_datasets_api.py @@ -9,7 +9,7 @@ from arkindex.documents.models import Corpus from arkindex.process.models import Process, ProcessDataset, ProcessMode from arkindex.project.tests import FixtureAPITestCase from arkindex.project.tools import fake_now -from arkindex.training.models import Dataset, DatasetState +from arkindex.training.models import Dataset, DatasetSet, DatasetState from arkindex.users.models import Role, User # Using the fake DB fixtures creation date when needed @@ -33,6 +33,7 @@ class TestDatasetsAPI(FixtureAPITestCase): ProcessDataset.objects.create(process=cls.process, dataset=cls.dataset, sets=["training", "test", "validation"]) ProcessDataset.objects.create(process=cls.process, dataset=cls.dataset2, sets=["test"]) cls.private_dataset = Dataset.objects.create(name="Private Dataset", description="Dead Sea Scrolls", corpus=cls.private_corpus, creator=cls.dataset_creator) + cls.private_dataset_set = DatasetSet.objects.create(dataset=cls.private_dataset, name="Private set") cls.vol = cls.corpus.elements.get(name="Volume 1") cls.page1 = cls.corpus.elements.get(name="Volume 1, page 1r") cls.page2 = cls.corpus.elements.get(name="Volume 1, page 1v") @@ -75,7 +76,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_list(self): self.client.force_login(self.user) - with self.assertNumQueries(5): + with self.assertNumQueries(6): response = self.client.get(reverse("api:corpus-datasets", kwargs={"pk": self.corpus.pk})) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()["results"], [ @@ -83,7 +84,13 @@ class TestDatasetsAPI(FixtureAPITestCase): "name": "First Dataset", "description": "dataset number one", "id": str(self.dataset.pk), - "sets": ["training", "test", "validation"], + "sets": [ + { + "id": str(ds.id), + "name": ds.name + } + for ds in self.dataset.sets.all() + ], "set_elements": None, "state": "open", "creator": "Test user", @@ -96,7 +103,13 @@ class TestDatasetsAPI(FixtureAPITestCase): "name": "Second Dataset", "description": "dataset number two", "id": str(self.dataset2.pk), - "sets": ["training", "test", "validation"], + "sets": [ + { + "id": str(ds.id), + "name": ds.name + } + for ds in self.dataset2.sets.all() + ], "set_elements": None, "state": "open", "creator": "Test user", @@ -254,7 +267,7 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_create(self): self.client.force_login(self.user) - with self.assertNumQueries(6): + with self.assertNumQueries(10): response = self.client.post( reverse("api:corpus-datasets", kwargs={"pk": self.corpus.pk}), data={"name": "My dataset", "description": "My dataset for my experiments."}, @@ -266,11 +279,11 @@ class TestDatasetsAPI(FixtureAPITestCase): "id": str(created_dataset.id), "name": "My dataset", "description": "My dataset for my experiments.", - "sets": ["training", "test", "validation"], + "sets": {}, "set_elements": { - "training": 0, - "test": 0, - "validation": 0, + "Training": 0, + "Test": 0, + "Validation": 0, }, "state": "open", "creator": "Test user", @@ -494,199 +507,21 @@ class TestDatasetsAPI(FixtureAPITestCase): self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), {"description": ["This field is required."]}) - def test_update_add_sets(self): - self.client.force_login(self.user) - self.assertIsNone(self.dataset.task_id) - with self.assertNumQueries(8): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - "sets": self.dataset.sets + ["unit-01", "unit-02"], - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.dataset.refresh_from_db() - self.assertEqual(self.dataset.state, DatasetState.Open) - self.assertEqual(self.dataset.name, "Shin Seiki Evangelion") - self.assertEqual(self.dataset.description, "Omedeto!") - self.assertListEqual(self.dataset.sets, ["training", "test", "validation", "unit-01", "unit-02"]) - self.assertIsNone(self.dataset.task_id) - - def test_update_remove_sets(self): - """ - It is possible to remove many sets, no elements are moved - """ - # Remove ProcessDataset relation - ProcessDataset.objects.get(process=self.process, dataset=self.dataset).delete() - self.client.force_login(self.user) - dataset_elt = self.dataset.dataset_elements.create(element=self.page1, set="training") - with self.assertNumQueries(9): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - # train and validation sets are removed - "sets": ["test"], - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.dataset.refresh_from_db() - self.assertEqual(self.dataset.state, DatasetState.Open) - self.assertEqual(self.dataset.name, "Shin Seiki Evangelion") - self.assertEqual(self.dataset.description, "Omedeto!") - self.assertListEqual(self.dataset.sets, ["test"]) - self.assertIsNone(self.dataset.task_id) - dataset_elt.refresh_from_db() - self.assertEqual(dataset_elt.element, self.page1) - self.assertEqual(dataset_elt.dataset, self.dataset) - # Element is still linked to a set that does not exist anymore on the dataset - self.assertEqual(dataset_elt.set, "training") - - def test_update_sets_update_single_set(self): - """ - It is possible to rename a single set, if it is not referenced by a ProcessDataset - """ - ProcessDataset.objects.get(process=self.process, dataset=self.dataset, sets=["training", "test", "validation"]).delete() + def test_update_sets_forbidden(self): self.client.force_login(self.user) - self.dataset.dataset_elements.create(element_id=self.page1.id, set="training") - self.dataset.dataset_elements.create(element_id=self.page2.id, set="validation") - self.dataset.dataset_elements.create(element_id=self.page3.id, set="validation") - with self.assertNumQueries(10): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - # validation set is renamed to AAAAAAA - "sets": ["test", "training", "AAAAAAA"], - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.dataset.refresh_from_db() - self.assertEqual(self.dataset.state, DatasetState.Open) - self.assertEqual(self.dataset.name, "Shin Seiki Evangelion") - self.assertEqual(self.dataset.description, "Omedeto!") - self.assertListEqual(self.dataset.sets, ["test", "training", "AAAAAAA"]) - self.assertIsNone(self.dataset.task_id) - self.assertQuerysetEqual( - self.dataset.dataset_elements.values_list("set", "element__name").order_by("element__name"), - [ - ("training", "Volume 1, page 1r"), - ("AAAAAAA", "Volume 1, page 1v"), - ("AAAAAAA", "Volume 1, page 2r"), - ] - ) - - def test_update_sets_processdataset_reference(self): - """ - If a dataset's sets are referenced by a ProcessDataset, they cannot be updated - """ - self.client.force_login(self.user) - self.dataset.dataset_elements.create(element_id=self.page1.id, set="training") - self.dataset.dataset_elements.create(element_id=self.page2.id, set="validation") - self.dataset.dataset_elements.create(element_id=self.page3.id, set="validation") - with self.assertNumQueries(4): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - # validation set is renamed to AAAAAAA - "sets": ["test", "training", "AAAAAAA"], - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), {"sets": ["These sets cannot be updated because one or more are selected in a dataset process."]}) - self.dataset.refresh_from_db() - self.assertEqual(self.dataset.state, DatasetState.Open) - self.assertEqual(self.dataset.name, "First Dataset") - self.assertEqual(self.dataset.description, "dataset number one") - self.assertListEqual(self.dataset.sets, ["training", "test", "validation"]) self.assertIsNone(self.dataset.task_id) - self.assertQuerysetEqual( - self.dataset.dataset_elements.values_list("set", "element__name").order_by("element__name"), - [ - ("training", "Volume 1, page 1r"), - ("validation", "Volume 1, page 1v"), - ("validation", "Volume 1, page 2r"), - ] - ) - - def test_update_sets_ambiguous(self): - """ - No more than one set can be updated - """ - # Remove ProcessDataset relation - ProcessDataset.objects.get(process=self.process, dataset=self.dataset).delete() - self.client.force_login(self.user) - with self.assertNumQueries(4): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - "sets": ["test", "AAAAAAA", "BBBBBBB"], - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertEqual(response.json(), {"sets": ["Updating those sets is ambiguous because several have changed."]}) - - def test_update_sets_length(self): - self.client.force_login(self.user) with self.assertNumQueries(3): response = self.client.put( reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), data={ "name": "Shin Seiki Evangelion", "description": "Omedeto!", - "sets": [] + "set_names": ["unit-01", "unit-02"], }, format="json" ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), {"sets": ["Either do not specify set names to use the default values, or specify a non-empty list of names."]}) - - def test_update_sets_unique_names(self): - self.client.force_login(self.user) - with self.assertNumQueries(3): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "Shin Seiki Evangelion", - "description": "Omedeto!", - "sets": ["unit-01", "unit-01", "unit-02"] - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), {"sets": ["Set names must be unique."]}) - - def test_update_sets_name_too_long(self): - self.client.force_login(self.user) - with self.assertNumQueries(3): - response = self.client.put( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "name": "My Dataset", - "description": "My dataset for my experiments.", - "sets": ["unit-00", "Etiam accumsan ullamcorper mauris eget mattis. Ut porttitor."] - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - "sets": { - "1": ["Ensure this field has no more than 50 characters."] - } - }) + self.assertDictEqual(response.json(), {"set_names": ["This API endpoint does not allow updating a dataset's sets."]}) def test_update_empty_or_blank_description_or_name(self): self.client.force_login(self.user) @@ -696,15 +531,13 @@ class TestDatasetsAPI(FixtureAPITestCase): data={ "name": "", "description": " ", - "sets": "", }, format="json" ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { "name": ["This field may not be blank."], - "description": ["This field may not be blank."], - "sets": ['Expected a list of items but got type "str".'], + "description": ["This field may not be blank."] }) def test_update_all_errors(self): @@ -715,7 +548,7 @@ class TestDatasetsAPI(FixtureAPITestCase): data={ "name": "", "description": " ", - "sets": ["unit-00", "unit-00", "unit-02"] + "set_names": ["unit-00", "unit-00", "unit-02"] }, format="json" ) @@ -723,7 +556,7 @@ class TestDatasetsAPI(FixtureAPITestCase): self.assertDictEqual(response.json(), { "name": ["This field may not be blank."], "description": ["This field may not be blank."], - "sets": ["Set names must be unique."] + "set_names": ["This API endpoint does not allow updating a dataset's sets."] }) def test_update_state_requires_ponos_auth(self): @@ -1022,23 +855,6 @@ class TestDatasetsAPI(FixtureAPITestCase): self.dataset.refresh_from_db() self.assertEqual(self.dataset.state, DatasetState.Open) - def test_partial_update_sets_name_too_long(self): - self.client.force_login(self.user) - with self.assertNumQueries(3): - response = self.client.patch( - reverse("api:dataset-update", kwargs={"pk": self.dataset.pk}), - data={ - "sets": ["unit-00", "Etiam accumsan ullamcorper mauris eget mattis. Ut porttitor."] - }, - format="json" - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - "sets": { - "1": ["Ensure this field has no more than 50 characters."] - } - }) - def test_partial_update_ponos_task_state_forbidden(self): """Dataset's state update is limited to specific transitions""" op, build, complete, error = [DatasetState[state] for state in ("Open", "Building", "Complete", "Error")] @@ -1652,6 +1468,8 @@ class TestDatasetsAPI(FixtureAPITestCase): [("training", "Volume 1, page 1r")] ) + # CreateDatasetElementSelection + def test_add_from_selection_requires_login(self): with self.assertNumQueries(0): response = self.client.post(reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id})) @@ -1710,8 +1528,7 @@ class TestDatasetsAPI(FixtureAPITestCase): response = self.client.post(reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id})) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { - "dataset_id": ["This field is required."], - "set": ["This field is required."], + "set_id": ["This field is required."], }) def test_add_from_selection_wrong_values(self): @@ -1719,13 +1536,12 @@ class TestDatasetsAPI(FixtureAPITestCase): with self.assertNumQueries(3): response = self.client.post( reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id}), - data={"set": {}, "dataset_id": "AAA"}, + data={"set_id": "AAA"}, format="json", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { - "dataset_id": ["“AAA†is not a valid UUID."], - "set": ["Not a valid string."], + "set_id": ["`AAA` is not a valid UUID."], }) def test_add_from_selection_wrong_dataset(self): @@ -1733,7 +1549,7 @@ class TestDatasetsAPI(FixtureAPITestCase): with self.assertNumQueries(4): response = self.client.post( reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id}), - data={"set": "aaa", "dataset_id": self.private_dataset.id}, + data={"set_id": self.private_dataset_set.id}, format="json", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) @@ -1743,31 +1559,19 @@ class TestDatasetsAPI(FixtureAPITestCase): def test_add_from_selection_completed_dataset(self): """A dataset in the Complete state is immutable""" + test_set = self.dataset.sets.first() self.client.force_login(self.user) self.dataset.state = DatasetState.Complete self.dataset.save() with self.assertNumQueries(4): response = self.client.post( reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id}), - data={"set": "aaa", "dataset_id": self.dataset.id}, - format="json", - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - "dataset_id": [f"Dataset {self.dataset.id} is marked as completed."] - }) - - def test_add_from_selection_wrong_set(self): - self.client.force_login(self.user) - with self.assertNumQueries(4): - response = self.client.post( - reverse("api:dataset-elements-selection", kwargs={"pk": self.corpus.id}), - data={"set": "aaa", "dataset_id": self.dataset.id}, + data={"set_id": test_set.id}, format="json", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { - "set": ["This dataset only allows one of training, test, validation."], + "set_id": [f"Dataset {self.dataset.id} is marked as completed."] }) def test_add_from_selection(self): -- GitLab