From 73c87f9512d1a331a20233efe22d471d1155e9b3 Mon Sep 17 00:00:00 2001 From: beeankha Date: Fri, 28 Jun 2019 16:28:38 -0400 Subject: [PATCH 1/3] Add helper method in order to reduce repetition --- awx/api/serializers.py | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 2eb252a5c9..7ce90cf663 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4680,6 +4680,22 @@ class ActivityStreamSerializer(BaseSerializer): obj._prefetched_objects_cache[related_manager.prefetch_cache_name] = list(related_manager.all()) return related_manager.all() + def _job_method(self, obj, fk, summary_fields): + summary_keys = {'job': 'job_template', + 'workflow_job_template_node': 'workflow_job_template'} + if fk not in summary_keys: + return + summary_fields[summary_keys[fk]] = [] + item = {} + fields = SUMMARIZABLE_FK_FIELDS[summary_keys[fk]] + related_obj = getattr(obj, summary_keys[fk], None) + if related_obj is not None: + for field in fields: + fval = getattr(related_obj, field, None) + if fval is not None: + item[field] = fval + summary_fields[summary_keys[fk]].append(item) + def get_summary_fields(self, obj): summary_fields = OrderedDict() for fk, related_fields in self._local_summarizable_fk_fields: @@ -4690,33 +4706,13 @@ class ActivityStreamSerializer(BaseSerializer): if m2m_list: summary_fields[fk] = [] for thisItem in m2m_list: - if fk == 'job': - summary_fields['job_template'] = [] - job_template_item = {} - job_template_fields = SUMMARIZABLE_FK_FIELDS['job_template'] - job_template = getattr(thisItem, 'job_template', None) - if job_template is not None: - for field in job_template_fields: - fval = getattr(job_template, field, None) - if fval is not None: - job_template_item[field] = fval - summary_fields['job_template'].append(job_template_item) - if fk == 'workflow_job_template_node': - summary_fields['workflow_job_template'] = [] - workflow_job_template_item = {} - workflow_job_template_fields = SUMMARIZABLE_FK_FIELDS['workflow_job_template'] - workflow_job_template = getattr(thisItem, 'workflow_job_template', None) - if workflow_job_template is not None: - for field in workflow_job_template_fields: - fval = getattr(workflow_job_template, field, None) - if fval is not None: - workflow_job_template_item[field] = fval - summary_fields['workflow_job_template'].append(workflow_job_template_item) if fk == 'schedule': unified_job_template = getattr(thisItem, 'unified_job_template', None) if unified_job_template is not None: summary_fields[get_type_for_model(unified_job_template)] = {'id': unified_job_template.id, 'name': unified_job_template.name} + else: + self._job_method(thisItem, fk, summary_fields) thisItemDict = {} for field in related_fields: fval = getattr(thisItem, field, None) From 0dba3f53b1044657cfaf45783d6d9793f28b458b Mon Sep 17 00:00:00 2001 From: beeankha Date: Mon, 8 Jul 2019 14:47:50 -0400 Subject: [PATCH 2/3] Add in schedule case to helper method, make Activity Stream link point to schedule page --- awx/api/serializers.py | 17 ++++++----------- .../factories/build-anchor.factory.js | 6 +++--- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 7ce90cf663..495b19a7c3 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4682,19 +4682,20 @@ class ActivityStreamSerializer(BaseSerializer): def _job_method(self, obj, fk, summary_fields): summary_keys = {'job': 'job_template', - 'workflow_job_template_node': 'workflow_job_template'} + 'workflow_job_template_node': 'workflow_job_template', + 'schedule': 'unified_job_template'} if fk not in summary_keys: return - summary_fields[summary_keys[fk]] = [] + related_obj = getattr(obj, summary_keys[fk], None) + summary_fields[get_type_for_model(related_obj)] = [] item = {} fields = SUMMARIZABLE_FK_FIELDS[summary_keys[fk]] - related_obj = getattr(obj, summary_keys[fk], None) if related_obj is not None: for field in fields: fval = getattr(related_obj, field, None) if fval is not None: item[field] = fval - summary_fields[summary_keys[fk]].append(item) + summary_fields[get_type_for_model(related_obj)].append(item) def get_summary_fields(self, obj): summary_fields = OrderedDict() @@ -4706,13 +4707,7 @@ class ActivityStreamSerializer(BaseSerializer): if m2m_list: summary_fields[fk] = [] for thisItem in m2m_list: - if fk == 'schedule': - unified_job_template = getattr(thisItem, 'unified_job_template', None) - if unified_job_template is not None: - summary_fields[get_type_for_model(unified_job_template)] = {'id': unified_job_template.id, - 'name': unified_job_template.name} - else: - self._job_method(thisItem, fk, summary_fields) + self._job_method(thisItem, fk, summary_fields) thisItemDict = {} for field in related_fields: fval = getattr(thisItem, field, None) diff --git a/awx/ui/client/src/activity-stream/factories/build-anchor.factory.js b/awx/ui/client/src/activity-stream/factories/build-anchor.factory.js index f29769b222..5a9435c10a 100644 --- a/awx/ui/client/src/activity-stream/factories/build-anchor.factory.js +++ b/awx/ui/client/src/activity-stream/factories/build-anchor.factory.js @@ -39,13 +39,13 @@ export default function BuildAnchor($log, $filter) { case 'schedule': // schedule urls depend on the resource they're associated with if (activity.summary_fields.job_template){ - url += 'templates/job_template/' + activity.summary_fields.job_template.id + '/schedules/' + obj.id; + url += 'templates/job_template/' + activity.summary_fields.job_template[0].id + '/schedules/' + obj.id; } else if (activity.summary_fields.project){ - url += 'projects/' + activity.summary_fields.project.id + '/schedules/' + obj.id; + url += 'projects/' + activity.summary_fields.project[0].id + '/schedules/' + obj.id; } else if (activity.summary_fields.system_job_template){ - url += 'management_jobs/' + activity.summary_fields.system_job_template.id + '/schedules/edit/' + obj.id; + url += 'management_jobs/management_jobs/' + activity.summary_fields.system_job_template[0].id + '/schedules/edit/' + obj.id; } // urls for inventory sync schedules currently depend on having an inventory id and group id else { From 12e0c31fe6ce82675d0312e804f71165bcfbce6d Mon Sep 17 00:00:00 2001 From: beeankha Date: Mon, 8 Jul 2019 15:03:35 -0400 Subject: [PATCH 3/3] Rename helper method --- awx/api/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 495b19a7c3..60db5cf9f3 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4680,7 +4680,7 @@ class ActivityStreamSerializer(BaseSerializer): obj._prefetched_objects_cache[related_manager.prefetch_cache_name] = list(related_manager.all()) return related_manager.all() - def _job_method(self, obj, fk, summary_fields): + def _summarize_parent_ujt(self, obj, fk, summary_fields): summary_keys = {'job': 'job_template', 'workflow_job_template_node': 'workflow_job_template', 'schedule': 'unified_job_template'} @@ -4707,7 +4707,7 @@ class ActivityStreamSerializer(BaseSerializer): if m2m_list: summary_fields[fk] = [] for thisItem in m2m_list: - self._job_method(thisItem, fk, summary_fields) + self._summarize_parent_ujt(thisItem, fk, summary_fields) thisItemDict = {} for field in related_fields: fval = getattr(thisItem, field, None)