From 5d3be75dca1c35f7ea4babfc32af60046b9c3057 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Mon, 15 Jan 2024 11:54:13 +0000 Subject: [PATCH 1/9] Handle missing resource relation --- arches/app/models/resource.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index c00f68e4363..95900eb0793 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -566,6 +566,15 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non resource_relations["relations"] = list( filter(lambda x: user_can_read_resource(user, x.resourceinstanceidfrom), resource_relations["relations"]) ) + + missing_related_resource = [] + + for resource_relation in resource_relations["relations"]: + if not models.ResourceInstance.objects.filter(pk=resource_relation.resourceinstanceidto).filter(pk=resource_relation.resourceinstanceidfrom).exists(): + missing_related_resource.append(resource_relation.resourceinstanceidfrom) + resource_relations["relations"].remove(resource_relation) + + logger.warning(f"Missing related resources: {missing_related_resource}") resource_relations["total"] = len(resource_relations["relations"]) ret["total"] = resource_relations["total"] From bbb39f251f91234fb5ebc58ce1c3584d5a0e0b65 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Mon, 15 Jan 2024 15:53:29 +0000 Subject: [PATCH 2/9] Move check for missing related resource code --- arches/app/models/resource.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index 95900eb0793..4be26a30af4 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -557,15 +557,6 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non limit=limit, resourceinstance_graphid=resourceinstance_graphid, ) - - - resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), resource_relations["relations"]) - ) - - resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidfrom), resource_relations["relations"]) - ) missing_related_resource = [] @@ -576,6 +567,16 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non logger.warning(f"Missing related resources: {missing_related_resource}") + + resource_relations["relations"] = list( + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), resource_relations["relations"]) + ) + + resource_relations["relations"] = list( + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidfrom), resource_relations["relations"]) + ) + + resource_relations["total"] = len(resource_relations["relations"]) ret["total"] = resource_relations["total"] From ffb5ae2b4b0905a71fd181561231b293b703aeca Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Mon, 15 Jan 2024 16:12:46 +0000 Subject: [PATCH 3/9] Amend stored value and logger condition --- arches/app/models/resource.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index 4be26a30af4..0ea860b61ae 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -562,10 +562,11 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non for resource_relation in resource_relations["relations"]: if not models.ResourceInstance.objects.filter(pk=resource_relation.resourceinstanceidto).filter(pk=resource_relation.resourceinstanceidfrom).exists(): - missing_related_resource.append(resource_relation.resourceinstanceidfrom) + missing_related_resource.append({resource_relation.resourceinstanceidfrom,resource_relation.resourceinstanceidto}) resource_relations["relations"].remove(resource_relation) - - logger.warning(f"Missing related resources: {missing_related_resource}") + + if len(missing_related_resource) > 0: + logger.warning(f"Missing related resources: {missing_related_resource}") resource_relations["relations"] = list( From 13e9ce1271c5d33d89efdbd2e61ee5914fc340a7 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Tue, 16 Jan 2024 09:04:18 +0000 Subject: [PATCH 4/9] Rework of handle missing resource code for relations (AJ) --- arches/app/models/resource.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index 0ea860b61ae..afd99b0d460 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -559,18 +559,28 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non ) missing_related_resource = [] - + valid_relations = [] for resource_relation in resource_relations["relations"]: - if not models.ResourceInstance.objects.filter(pk=resource_relation.resourceinstanceidto).filter(pk=resource_relation.resourceinstanceidfrom).exists(): - missing_related_resource.append({resource_relation.resourceinstanceidfrom,resource_relation.resourceinstanceidto}) - resource_relations["relations"].remove(resource_relation) + + to_resource = None + from_resource = None + + try: + to_resource = resource_relation.resourceinstanceidto + from_resource = resource_relation.resourceinstanceidfrom + valid_relations.append(resource_relation) + except: + missing_related_resource.append(resource_relation.pk) + + resource_relations["total"] = len(valid_relations) + resource_relations["relations"] = valid_relations if len(missing_related_resource) > 0: - logger.warning(f"Missing related resources: {missing_related_resource}") + logger.warning(f"Broken resource relation records (relation primary key): {missing_related_resource}") resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), resource_relations["relations"]) + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), valid_relations) ) resource_relations["relations"] = list( From b0dadebaaba7e08b678224ea15c31785f73d1951 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Tue, 16 Jan 2024 13:48:53 +0000 Subject: [PATCH 5/9] Add 7.5 tile excel export fix --- arches/app/tasks.py | 18 ++++++++++++------ arches/app/views/search.py | 18 ++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/arches/app/tasks.py b/arches/app/tasks.py index 88681e57029..63812236744 100644 --- a/arches/app/tasks.py +++ b/arches/app/tasks.py @@ -55,6 +55,7 @@ def export_search_results(self, userid, request_values, format, report_link): from arches.app.models.system_settings import settings from arches.app.utils.message_contexts import return_message_context + logger = logging.getLogger(__name__) settings.update_from_db() create_user_task_record(self.request.id, self.name, userid) @@ -71,12 +72,17 @@ def export_search_results(self, userid, request_values, format, report_link): exporter = SearchResultsExporter(search_request=new_request) export_files, export_info = exporter.export(format, report_link) wb = export_files[0]["outputfile"] - with NamedTemporaryFile() as tmp: - wb.save(tmp.name) - tmp.seek(0) - stream = tmp.read() - export_files[0]["outputfile"] = tmp - exportid = exporter.write_export_zipfile(export_files, export_info, export_name) + try: + with NamedTemporaryFile(delete=False) as tmp: + wb.save(tmp.name) + tmp.seek(0) + stream = tmp.read() + export_files[0]["outputfile"] = tmp + exportid = exporter.write_export_zipfile(export_files, export_info, export_name) + except OSError: + logger.error("Temp file could not be created.") + raise + os.unlink(tmp.name) else: exporter = SearchResultsExporter(search_request=new_request) files, export_info = exporter.export(format, report_link) diff --git a/arches/app/views/search.py b/arches/app/views/search.py index 1bb42bdcaf3..c47f0d769bf 100644 --- a/arches/app/views/search.py +++ b/arches/app/views/search.py @@ -272,12 +272,18 @@ def export_results(request): exporter = SearchResultsExporter(search_request=request) export_files, export_info = exporter.export(format, report_link) wb = export_files[0]["outputfile"] - with NamedTemporaryFile(dir=settings.TILE_EXCEL_EXPORT_TEMP_DIRECTORY,delete=settings.TILE_EXCEL_EXPORT_TEMP_FILE_DELETE) as tmp: - wb.save(tmp.name) - tmp.seek(0) - stream = tmp.read() - export_files[0]["outputfile"] = tmp - return zip_utils.zip_response(export_files, zip_file_name=f"{settings.APP_NAME}_export.zip") + try: + with NamedTemporaryFile(delete=False) as tmp: + wb.save(tmp.name) + tmp.seek(0) + stream = tmp.read() + export_files[0]["outputfile"] = tmp + result = zip_utils.zip_response(export_files, zip_file_name=f"{settings.APP_NAME}_export.zip") + except OSError: + logger.error("Temp file could not be created.") + raise + os.unlink(tmp.name) + return result else: exporter = SearchResultsExporter(search_request=request) export_files, export_info = exporter.export(format, report_link) From 25f196aaa353c046cc4d6a27ebec8e11b88d4bc1 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Thu, 18 Jan 2024 10:42:43 +0000 Subject: [PATCH 6/9] Scope correction on resource print --- arches/app/media/js/views/resource/report.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arches/app/media/js/views/resource/report.js b/arches/app/media/js/views/resource/report.js index 69c79203f58..8242cf9e331 100644 --- a/arches/app/media/js/views/resource/report.js +++ b/arches/app/media/js/views/resource/report.js @@ -11,7 +11,8 @@ require([ BaseManagerView.prototype.initialize.call(this, options); if (location.search.indexOf('print') > 0) { - this.viewModel.loading(true); + var self = this + self.viewModel.loading(true); setTimeout( function() { self.viewModel.loading(false); From 8a070cde9eb5574197b832682bc8c99bb2be4a7d Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Thu, 18 Jan 2024 13:14:50 +0000 Subject: [PATCH 7/9] Set resource_relations["relations"] to empty list --- arches/app/models/resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index afd99b0d460..d8fd5be8111 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -573,7 +573,7 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non missing_related_resource.append(resource_relation.pk) resource_relations["total"] = len(valid_relations) - resource_relations["relations"] = valid_relations + resource_relations["relations"] = [] if len(missing_related_resource) > 0: logger.warning(f"Broken resource relation records (relation primary key): {missing_related_resource}") From 7514fa20238ff467c2a7de118d25d9e595ee0a14 Mon Sep 17 00:00:00 2001 From: Chantelle Smith Date: Thu, 18 Jan 2024 14:57:14 +0000 Subject: [PATCH 8/9] Reinstate resource_relations["relations"] --- arches/app/models/resource.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index d8fd5be8111..46fdceb4c0c 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -573,14 +573,14 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non missing_related_resource.append(resource_relation.pk) resource_relations["total"] = len(valid_relations) - resource_relations["relations"] = [] + resource_relations["relations"] = valid_relations if len(missing_related_resource) > 0: logger.warning(f"Broken resource relation records (relation primary key): {missing_related_resource}") resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), valid_relations) + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), resource_relations["relations"]) ) resource_relations["relations"] = list( From a9a6030427f3b4338aaec6e120864c6ce6877984 Mon Sep 17 00:00:00 2001 From: Andy Jones Date: Fri, 19 Jan 2024 09:51:56 +0000 Subject: [PATCH 9/9] ensured resourceid is passed to function --- arches/app/models/resource.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index 46fdceb4c0c..68abab0fbc0 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -580,11 +580,11 @@ def get_relations(resourceinstanceid, start, limit, resourceinstance_graphid=Non resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto), resource_relations["relations"]) + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidto.pk), resource_relations["relations"]) ) resource_relations["relations"] = list( - filter(lambda x: user_can_read_resource(user, x.resourceinstanceidfrom), resource_relations["relations"]) + filter(lambda x: user_can_read_resource(user, x.resourceinstanceidfrom.pk), resource_relations["relations"]) )