From 079f61d09c1f99e6b47677fce2989db9c10f12cf Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Mon, 6 Apr 2020 10:30:31 +0200
Subject: [PATCH] Simplify deduplicate_steps

The same result can be achieved using a multi-component sorting key.

Change-Id: Ieacf9fcecb2a6de7b4ccd8889f789099af39aa37
---
 ironic_python_agent/hardware.py | 21 +++++----------------
 1 file changed, 5 insertions(+), 16 deletions(-)

diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py
index c5bf4b4db..db5738ef7 100644
--- a/ironic_python_agent/hardware.py
+++ b/ironic_python_agent/hardware.py
@@ -2151,6 +2151,10 @@ def check_versions(provided_version=None):
                                      node_version=provided_version)
 
 
+def _step_sort_key(step):
+    return (-step['hwm']['support'], -step['priority'], step['hwm']['name'])
+
+
 def deduplicate_steps(candidate_steps):
     """Remove duplicated clean or deploy steps
 
@@ -2195,22 +2199,7 @@ def deduplicate_steps(candidate_steps):
             steps[step['step']].append(step)
 
     for step_name, step_list in steps.items():
-        # determine the max support level among candidate steps
-        max_support = max([x['hwm']['support'] for x in step_list])
-        # filter out any steps that are not at the max support for this step
-        max_support_steps = [x for x in step_list
-                             if x['hwm']['support'] == max_support]
-
-        # determine the max priority among remaining steps
-        max_priority = max([x['priority'] for x in max_support_steps])
-        # filter out any steps that are not at the max priority for this step
-        max_priority_steps = [x for x in max_support_steps
-                              if x['priority'] == max_priority]
-
-        # if there are still multiple steps, sort by hwm name and take
-        # the first result
-        winning_step = sorted(max_priority_steps,
-                              key=lambda x: x['hwm']['name'])[0]
+        winning_step = sorted(step_list, key=_step_sort_key)[0]
         # Remove extra metadata we added to the step for filtering
         manager = winning_step.pop('hwm')['name']
         # Add winning step to deduped_steps