From 98e84d1cd2a5768bf407e5a1e5133290d68f9e3e Mon Sep 17 00:00:00 2001 From: Mikko Nieminen Date: Thu, 23 Nov 2023 17:50:56 +0100 Subject: [PATCH] update timeline object ref empty name handling (#1341) --- CHANGELOG.rst | 2 +- timeline/api.py | 22 ++++++++++++++++------ timeline/models.py | 4 ++-- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2855f3a2..5efc3582 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,7 +21,7 @@ Added - User login/logout logging signals (#1326) - ``createdevusers`` management command (#1339) - **Timeline** - - Empty object reference name handling in ``add_object()`` (#1338) + - Empty object reference name handling in ``add_object()`` (#1338, #1341) Changed ------- diff --git a/timeline/api.py b/timeline/api.py index 67f192d1..c717f2ed 100644 --- a/timeline/api.py +++ b/timeline/api.py @@ -18,6 +18,7 @@ ProjectEvent, ProjectEventObjectRef, EVENT_STATUS_TYPES, + OBJ_REF_UNNAMED, ) @@ -38,8 +39,10 @@ class TimelineAPI: # Internal Helpers --------------------------------------------------------- @classmethod - def _get_label(cls, label): - """Format label to be displayed""" + def _get_ref_label(cls, label): + """Return reference object name in displayable form""" + if not label: + return OBJ_REF_UNNAMED if not {' ', '-'}.intersection(label): return Truncator(label).chars(LABEL_MAX_WIDTH) return label @@ -68,7 +71,7 @@ def _get_history_link(cls, ref_obj): def _get_not_found_label(cls, ref_obj): """Get label for object which is not found in the database""" return '{} {}'.format( - cls._get_label(ref_obj.name), cls._get_history_link(ref_obj) + cls._get_ref_label(ref_obj.name), cls._get_history_link(ref_obj) ) @classmethod @@ -85,11 +88,11 @@ def _get_project_desc(cls, ref_obj, request=None): 'projectroles:detail', kwargs={'project': project.sodar_uuid}, ), - cls._get_label(project.title), + cls._get_ref_label(project.title), ) elif project: return '{}'.format( - cls._get_label(project.title) + cls._get_ref_label(project.title) ) return ref_obj.name @@ -173,6 +176,13 @@ def _get_ref_description(cls, event, ref_label, app_plugin, request): raise ex link_data = None if link_data: + if not link_data['label']: + logger.warning( + 'Empty label returned by plugin "{}" for object ' + 'reference "{}" ({})"'.format( + app_plugin.name, ref_obj, ref_obj.sodar_uuid + ) + ) return '{} {}'.format( link_data['url'], ( @@ -180,7 +190,7 @@ def _get_ref_description(cls, event, ref_label, app_plugin, request): if 'blank' in link_data and link_data['blank'] is True else '' ), - cls._get_label(link_data['label']), + cls._get_ref_label(link_data['label']), cls._get_history_link(ref_obj), ) else: diff --git a/timeline/models.py b/timeline/models.py index 1967474d..100cecf7 100644 --- a/timeline/models.py +++ b/timeline/models.py @@ -26,7 +26,7 @@ 'INFO': 'Info level action', 'CANCEL': 'Action cancelled', } -OBJ_REF_UNNAMED = '(Unnamed)' +OBJ_REF_UNNAMED = '(unnamed)' class ProjectEventManager(models.Manager): @@ -187,7 +187,7 @@ def add_object(self, obj, label, name, extra_data=None): ref.label = label if not name: logger.warning( - 'Adding object reference with no name: {} ({})'.format( + 'Adding object reference with no name: "{}" ({})'.format( obj, getattr(obj, 'sodar_uuid') ) )