sepolgen: convert cmp functions to key functions

In python3 it is needed to pass compare function as a key argument
instead of directly passing compare function to sort function

Signed-off-by: Robert Kuska <rkuska@redhat.com>
This commit is contained in:
Robert Kuska 2015-08-05 03:15:14 -04:00 committed by Stephen Smalley
parent 60956ac7ec
commit 1ee796ccb7
2 changed files with 25 additions and 2 deletions

View File

@ -131,7 +131,7 @@ def sort_filter(module):
rules = []
rules.extend(node.avrules())
rules.extend(node.interface_calls())
rules.sort(rule_cmp)
rules.sort(key=util.cmp_to_key(rule_cmp))
cur = None
sep_rules = []
@ -155,7 +155,7 @@ def sort_filter(module):
ras = []
ras.extend(node.role_types())
ras.sort(role_type_cmp)
ras.sort(key=util.cmp_to_key(role_type_cmp))
if len(ras):
comment = refpolicy.Comment()
comment.lines.append("============= ROLES ==============")

View File

@ -145,6 +145,29 @@ class Comparison():
def __ne__(self, other):
return self._compare(other, lambda a, b: a != b)
if sys.version_info < (2,7):
# cmp_to_key function is missing in python2.6
def cmp_to_key(mycmp):
'Convert a cmp= function into a key= function'
class K:
def __init__(self, obj, *args):
self.obj = obj
def __lt__(self, other):
return mycmp(self.obj, other.obj) < 0
def __gt__(self, other):
return mycmp(self.obj, other.obj) > 0
def __eq__(self, other):
return mycmp(self.obj, other.obj) == 0
def __le__(self, other):
return mycmp(self.obj, other.obj) <= 0
def __ge__(self, other):
return mycmp(self.obj, other.obj) >= 0
def __ne__(self, other):
return mycmp(self.obj, other.obj) != 0
return K
else:
from functools import cmp_to_key
def cmp(first, second):
return (first > second) - (second > first)