From c96ce1504391198bf05cbccf0332921af9b28e70 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Mon, 10 May 2021 16:34:01 +0200 Subject: [PATCH 1/2] Update the DataImport's element during file imports --- arkindex_tasks/import_files/base.py | 19 +++++++++++++++++++ tests/import_files/test_base.py | 18 ++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/arkindex_tasks/import_files/base.py b/arkindex_tasks/import_files/base.py index 351d0934..f45a0032 100644 --- a/arkindex_tasks/import_files/base.py +++ b/arkindex_tasks/import_files/base.py @@ -247,6 +247,25 @@ class FileImport(DataImportTask): logger.info(f"Imported {len(elements) - 1} elements") + # The file import might create any amount of folders, but the first one + # is always the topmost one. We look for it in the elements list then + # update the DataImport's element so that the frontend can display + # a "View element" button. + created_folder = next( + ( + element + for element in elements + if element["type"] == self.dataimport["folder_type"] + ), + None, + ) + if created_folder: + default_client.request( + "PartialUpdateDataImport", + id=self.dataimport["id"], + body={"element_id": created_folder["id"]}, + ) + logger.info("Deleting files…") self.delete_files(successful_datafiles) diff --git a/tests/import_files/test_base.py b/tests/import_files/test_base.py index 49606603..5dfe6840 100644 --- a/tests/import_files/test_base.py +++ b/tests/import_files/test_base.py @@ -374,6 +374,7 @@ class TestFileImport(TestCase): "mode": "images", "element": {"id": "folderid", "name": "Untitled", "type": "potato"}, "files": ["file1"], + "folder_type": "potato", "element_type": "page", }, ) @@ -403,6 +404,8 @@ class TestFileImport(TestCase): mock.post("/api/v1/elements/create/", json={"id": "pageid", "type": "page"}) # DataFile deletion mock.delete("/api/v1/imports/file/file1/", status_code=204) + # DataImport update + mock.patch("/api/v1/imports/importid/", status_code=200) fi = FileImport("importid") fi.run() @@ -417,6 +420,7 @@ class TestFileImport(TestCase): ("PUT", "http://s3/put"), ("PATCH", "https://arkindex.teklia.com/api/v1/image/imageid/"), ("POST", "https://arkindex.teklia.com/api/v1/elements/create/"), + ("PATCH", "https://arkindex.teklia.com/api/v1/imports/importid/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/file1/"), ], ) @@ -437,7 +441,7 @@ class TestFileImport(TestCase): "id": "importid", "corpus": "corpusid", "mode": "pdf", - "element": {"id": "folderid", "name": "Untitled", "type": "potato"}, + "element": {"id": "folderid", "name": "Untitled", "type": "book"}, "files": ["file1"], "element_type": "page", "folder_type": "book", @@ -470,7 +474,7 @@ class TestFileImport(TestCase): mock.post( "/api/v1/elements/create/", [ - {"json": {"id": "box", "type": "box"}}, + {"json": {"id": "box", "type": "book"}}, { "json": { "id": "page1", @@ -497,6 +501,8 @@ class TestFileImport(TestCase): }, ], ) + # DataImport update + mock.patch("/api/v1/imports/importid/", status_code=200) # DataFile deletion mock.delete("/api/v1/imports/file/file1/", status_code=204) @@ -533,6 +539,7 @@ class TestFileImport(TestCase): "POST", "https://arkindex.teklia.com/api/v1/element/page2/transcriptions/bulk/", ), + ("PATCH", "https://arkindex.teklia.com/api/v1/imports/importid/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/file1/"), ], ) @@ -542,8 +549,8 @@ class TestFileImport(TestCase): self.assertListEqual( elements, [ - {"id": "folderid", "type": "potato"}, - {"id": "box", "type": "box"}, + {"id": "folderid", "type": "book"}, + {"id": "box", "type": "book"}, { "id": "page1", "type": "page", @@ -611,6 +618,8 @@ class TestFileImport(TestCase): {"json": {"id": "pageid", "type": "page"}}, ], ) + # DataImport update + mock.patch("/api/v1/imports/importid/", status_code=200) # DataFile deletion mock.delete("/api/v1/imports/file/file1/", status_code=204) @@ -628,6 +637,7 @@ class TestFileImport(TestCase): ("PUT", "http://s3/put"), ("PATCH", "https://arkindex.teklia.com/api/v1/image/imageid/"), ("POST", "https://arkindex.teklia.com/api/v1/elements/create/"), + ("PATCH", "https://arkindex.teklia.com/api/v1/imports/importid/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/file1/"), ], ) -- GitLab From 7df9609b6d73460e4332a840eefc58f7f613362b Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Fri, 14 May 2021 09:29:34 +0200 Subject: [PATCH 2/2] Add missing mock --- tests/import_files/test_base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/import_files/test_base.py b/tests/import_files/test_base.py index 5dfe6840..6a4aec6d 100644 --- a/tests/import_files/test_base.py +++ b/tests/import_files/test_base.py @@ -700,6 +700,9 @@ class TestFileImport(TestCase): # Page creation mock.post("/api/v1/elements/create/", json={"id": "pageid", "type": "page"}) + # DataImport element update + mock.patch("/api/v1/imports/importid/", status_code=200) + # DataFile deletion for i in numbers: mock.delete(f"/api/v1/imports/file/{i}/", status_code=204) @@ -727,6 +730,7 @@ class TestFileImport(TestCase): ("POST", "https://arkindex.teklia.com/api/v1/elements/create/"), ] * 5 expected_queries += [ + ("PATCH", "https://arkindex.teklia.com/api/v1/imports/importid/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/1/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/2/"), ("DELETE", "https://arkindex.teklia.com/api/v1/imports/file/10/"), -- GitLab