From 224138887c0bb40b80378e2fca17ab4308e29ae4 Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Fri, 20 Nov 2020 13:20:19 +0100
Subject: [PATCH] DDSim: printSteeringFile: fix exception for sorting, python3

---
 DDG4/python/DDSim/DD4hepSimulation.py | 38 ++++++++++++++++-----------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/DDG4/python/DDSim/DD4hepSimulation.py b/DDG4/python/DDSim/DD4hepSimulation.py
index 46fd5e0c5..1bea997ef 100644
--- a/DDG4/python/DDSim/DD4hepSimulation.py
+++ b/DDG4/python/DDSim/DD4hepSimulation.py
@@ -610,7 +610,7 @@ SIM = DD4hepSimulation()
 """
     optionDict = parser._option_string_actions
     parameters = vars(self)
-    for parName, parameter in sorted(list(parameters.items()), sortParameters):
+    for parName, parameter in sorted(list(parameters.items()), key=sortParameters):
       if parName.startswith("_"):
         continue
       if isinstance(parameter, ConfigHelper):
@@ -619,7 +619,7 @@ SIM = DD4hepSimulation()
         steeringFileBase += "## %s \n" % "\n## ".join(parameter.__doc__.splitlines())
         steeringFileBase += "################################################################################\n"
         options = parameter.getOptions()
-        for opt, optionsDict in sorted(six.iteritems(options), sortParameters):
+        for opt, optionsDict in sorted(six.iteritems(options), key=sortParameters):
           if opt.startswith("_"):
             continue
           parValue = optionsDict['default']
@@ -733,20 +733,26 @@ SIM = DD4hepSimulation()
 # MODULE FUNCTIONS GO HERE
 ################################################################################
 
-def sortParameters(parA, parB):
-  """sort the parameters by name: first normal parameters, then set of
-  parameters based on ConfigHelper objects
-  """
-  parTypeA = parA[1]
-  parTypeB = parB[1]
-  if isinstance(parTypeA, ConfigHelper) and isinstance(parTypeB, ConfigHelper):
-    return 1 if str(parA[0]) > str(parB[0]) else -1
-  elif isinstance(parTypeA, ConfigHelper):
-    return 1
-  elif isinstance(parTypeB, ConfigHelper):
-    return -1
-  else:
-    return 1 if str(parA[0]) > str(parB[0]) else -1
+
+def sortParameters(key):
+  from functools import cmp_to_key
+
+  def _sortParameters(parA, parB):
+    """sort the parameters by name: first normal parameters, then set of
+    parameters based on ConfigHelper objects
+    """
+    parTypeA = parA[1]
+    parTypeB = parB[1]
+    if isinstance(parTypeA, ConfigHelper) and isinstance(parTypeB, ConfigHelper):
+      return 1 if str(parA[0]) > str(parB[0]) else -1
+    elif isinstance(parTypeA, ConfigHelper):
+      return 1
+    elif isinstance(parTypeB, ConfigHelper):
+      return -1
+    else:
+      return 1 if str(parA[0]) > str(parB[0]) else -1
+
+  return cmp_to_key(_sortParameters)(key)
 
 
 def getOutputLevel(level):
-- 
GitLab