diff mbox series

[2/2] libsemanage: make pywrap-test.py compatible with Python 3

Message ID 20180818175033.13100-2-nicolas.iooss@m4x.org (mailing list archive)
State Not Applicable
Headers show
Series [1/2] libsemanage: reindent pywrap-test.py with spaces | expand

Commit Message

Nicolas Iooss Aug. 18, 2018, 5:50 p.m. UTC
This program can be useful in order to test the Python API of
libsemanage. Make it usable in Python 3 using 2to3 and some tweaks.

While at it, fix warnings reported by flake8 linter.

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
---
 libsemanage/src/pywrap-test.py | 680 ++++++++++++++++++---------------
 1 file changed, 369 insertions(+), 311 deletions(-)

Comments

William Roberts Aug. 18, 2018, 6:43 p.m. UTC | #1
Im assuming with your attention on the python side of the house we're going
to see a lot of
formatting change patches heading the mailing list. I don't have any
problems with them.

Are you using some formatter for these, if so which one is it? Is it flake8
still?

We should probably document that patches should be sent formatted, ie if a
patch introduces a delta
after applying the patch and running <formatter>, it's an issue.

On Sat, Aug 18, 2018 at 10:50 AM, Nicolas Iooss <nicolas.iooss@m4x.org>
wrote:

> This program can be useful in order to test the Python API of
> libsemanage. Make it usable in Python 3 using 2to3 and some tweaks.
>
> While at it, fix warnings reported by flake8 linter.
>
> Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
> ---
>  libsemanage/src/pywrap-test.py | 680 ++++++++++++++++++---------------
>  1 file changed, 369 insertions(+), 311 deletions(-)
>
> diff --git a/libsemanage/src/pywrap-test.py b/libsemanage/src/pywrap-test.
> py
> index 326034947aa5..5ac48f408380 100644
> --- a/libsemanage/src/pywrap-test.py
> +++ b/libsemanage/src/pywrap-test.py
> @@ -1,8 +1,11 @@
> -#!/usr/bin/python
> +#!/usr/bin/env python
> +from __future__ import print_function
> +
>  import sys
>  import getopt
>  import semanage
>
> +
>  usage = "\
>  Choose one of the following tests:\n\
>  -m for modules\n\
> @@ -27,21 +30,25 @@ Other options:\n\
>  -v for verbose output\
>  "
>
> +
>  class Usage(Exception):
>      def __init__(self, msg):
>          Exception.__init__(self)
>          self.msg = msg
>
> +
>  class Status(Exception):
>      def __init__(self, msg):
>          Exception.__init__(self)
>          self.msg = msg
>
> +
>  class Error(Exception):
>      def __init__(self, msg):
>          Exception.__init__(self)
>          self.msg = msg
>
> +
>  class Tests:
>      def __init__(self):
>          self.all = False
> @@ -65,146 +72,164 @@ class Tests:
>          self.verbose = False
>
>      def selected(self):
> -        return (self.all or self.users or self.modules or self.seusers or
> self.ports or self.fcontexts or self.interfaces or self.booleans or
> self.abooleans or self.writeuser or self.writeseuser or self.writeport or
> self.writefcontext or self.writeinterface or self.writeboolean or
> self.writeaboolean or self.nodes or self.writenode)
> +        return (
> +            self.all or
> +            self.users or
> +            self.modules or
> +            self.seusers or
> +            self.ports or
> +            self.fcontexts or
> +            self.interfaces or
> +            self.booleans or
> +            self.abooleans or
> +            self.writeuser or
> +            self.writeseuser or
> +            self.writeport or
> +            self.writefcontext or
> +            self.writeinterface or
> +            self.writeboolean or
> +            self.writeaboolean or
> +            self.nodes or
> +            self.writenode)
>
>      def run(self, handle):
> -        if (self.users or self.all):
> +        if self.users or self.all:
>              self.test_users(handle)
> -            print ""
> -        if (self.seusers or self.all):
> +            print("")
> +        if self.seusers or self.all:
>              self.test_seusers(handle)
> -            print ""
> -        if (self.ports or self.all):
> +            print("")
> +        if self.ports or self.all:
>              self.test_ports(handle)
> -            print ""
> -        if (self.modules or self.all):
> +            print("")
> +        if self.modules or self.all:
>              self.test_modules(handle)
> -            print ""
> -        if (self.fcontexts or self.all):
> +            print("")
> +        if self.fcontexts or self.all:
>              self.test_fcontexts(handle)
> -            print ""
> -        if (self.interfaces or self.all):
> +            print("")
> +        if self.interfaces or self.all:
>              self.test_interfaces(handle)
> -            print ""
> -        if (self.booleans or self.all):
> +            print("")
> +        if self.booleans or self.all:
>              self.test_booleans(handle)
> -            print ""
> -        if (self.abooleans or self.all):
> +            print("")
> +        if self.abooleans or self.all:
>              self.test_abooleans(handle)
> -            print ""
> -        if (self.nodes or self.all):
> +            print("")
> +        if self.nodes or self.all:
>              self.test_nodes(handle)
> -            print ""
> -        if (self.writeuser or self.all):
> +            print("")
> +        if self.writeuser or self.all:
>              self.test_writeuser(handle)
> -            print ""
> -        if (self.writeseuser or self.all):
> +            print("")
> +        if self.writeseuser or self.all:
>              self.test_writeseuser(handle)
> -            print ""
> -        if (self.writeport or self.all):
> +            print("")
> +        if self.writeport or self.all:
>              self.test_writeport(handle)
> -            print ""
> -        if (self.writefcontext or self.all):
> +            print("")
> +        if self.writefcontext or self.all:
>              self.test_writefcontext(handle)
> -            print ""
> -        if (self.writeinterface or self.all):
> +            print("")
> +        if self.writeinterface or self.all:
>              self.test_writeinterface(handle)
> -            print ""
> -        if (self.writeboolean or self.all):
> +            print("")
> +        if self.writeboolean or self.all:
>              self.test_writeboolean(handle)
> -            print ""
> -        if (self.writeaboolean or self.all):
> +            print("")
> +        if self.writeaboolean or self.all:
>              self.test_writeaboolean(handle)
> -            print ""
> -        if (self.writenode or self.all):
> +            print("")
> +        if self.writenode or self.all:
>              self.test_writenode(handle)
> -            print ""
> +            print("")
>
> -    def test_modules(self,sh):
> -        print "Testing modules..."
> +    def test_modules(self, sh):
> +        print("Testing modules...")
>
>          (trans_cnt, mlist, mlist_size) = semanage.semanage_module_list(
> sh)
>
> -        print "Transaction number: ", trans_cnt
> -        print "Module list size: ", mlist_size
> +        print("Transaction number: %s" % trans_cnt)
> +        print("Module list size: %s" % mlist_size)
>          if self.verbose:
> -            print "List reference: ", mlist
> +            print("List reference: %s" % mlist)
>
> -        if (mlist_size == 0):
> -            print "No modules installed!"
> -            print "This is not necessarily a test failure."
> +        if mlist_size == 0:
> +            print("No modules installed!")
> +            print("This is not necessarily a test failure.")
>              return
>          for idx in range(mlist_size):
>              module = semanage.semanage_module_list_nth(mlist, idx)
>              if self.verbose:
> -                print "Module reference: ", module
> -            print "Module name: ", semanage.semanage_module_get_
> name(module)
> +                print("Module reference: %s" % module)
> +            print("Module name: %s" % semanage.semanage_module_get_
> name(module))
>
> -    def test_seusers(self,sh):
> -        print "Testing seusers..."
> +    def test_seusers(self, sh):
> +        print("Testing seusers...")
>
>          (status, slist) = semanage.semanage_seuser_list(sh)
>          if status < 0:
>              raise Error("Could not list seusers")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if ( len(slist) == 0):
> -            print "No seusers found!"
> -            print "This is not necessarily a test failure."
> +        if len(slist) == 0:
> +            print("No seusers found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for seuser in slist:
>              if self.verbose:
> -                print "seseuser reference: ", seuser
> -            print "seuser name: ", semanage.semanage_seuser_get_
> name(seuser)
> -            print "   seuser mls range: ", semanage.semanage_seuser_get_
> mlsrange(seuser)
> -            print "   seuser sename: ", semanage.semanage_seuser_get_
> sename(seuser)
> +                print("seseuser reference: %s" % seuser)
> +            print("seuser name: %s" % semanage.semanage_seuser_get_
> name(seuser))
> +            print("   seuser mls range: %s" %
> semanage.semanage_seuser_get_mlsrange(seuser))
> +            print("   seuser sename: %s" % semanage.semanage_seuser_get_
> sename(seuser))
>              semanage.semanage_seuser_free(seuser)
>
> -    def test_users(self,sh):
> -        print "Testing users..."
> +    def test_users(self, sh):
> +        print("Testing users...")
>
>          (status, ulist) = semanage.semanage_user_list(sh)
>          if status < 0:
>              raise Error("Could not list users")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if ( len(ulist) == 0):
> -            print "No users found!"
> -            print "This is not necessarily a test failure."
> +        if len(ulist) == 0:
> +            print("No users found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for user in ulist:
>              if self.verbose:
> -                print "User reference: ", user
> -            print "User name: ", semanage.semanage_user_get_name(user)
> -            print "   User labeling prefix: ", semanage.semanage_user_get_
> prefix(user)
> -            print "   User mls level: ", semanage.semanage_user_get_
> mlslevel(user)
> -            print "   User mls range: ", semanage.semanage_user_get_
> mlsrange(user)
> -            print "   User number of roles: ", semanage.semanage_user_get_
> num_roles(user)
> -            print "   User roles: "
> +                print("User reference: %s" % user)
> +            print("User name: %s" % semanage.semanage_user_get_
> name(user))
> +            print("   User labeling prefix: %s" %
> semanage.semanage_user_get_prefix(user))
> +            print("   User mls level: %s" % semanage.semanage_user_get_
> mlslevel(user))
> +            print("   User mls range: %s" % semanage.semanage_user_get_
> mlsrange(user))
> +            print("   User number of roles: %s" %
> semanage.semanage_user_get_num_roles(user))
> +            print("   User roles: ")
>              (status, rlist) = semanage.semanage_user_get_roles(sh, user)
>              if status < 0:
>                  raise Error("Could not get user roles")
>
>              for role in rlist:
> -                print "      ", role
> +                print("      %s" % role)
>
>              semanage.semanage_user_free(user)
>
> -    def test_ports(self,sh):
> -        print "Testing ports..."
> +    def test_ports(self, sh):
> +        print("Testing ports...")
>
>          (status, plist) = semanage.semanage_port_list(sh)
>          if status < 0:
>              raise Error("Could not list ports")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if ( len(plist) == 0):
> -            print "No ports found!"
> -            print "This is not necessarily a test failure."
> +        if len(plist) == 0:
> +            print("No ports found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for port in plist:
>              if self.verbose:
> -                print "Port reference: ", port
> +                print("Port reference: %s" % port)
>              low = semanage.semanage_port_get_low(port)
>              high = semanage.semanage_port_get_high(port)
>              con = semanage.semanage_port_get_con(port)
> @@ -214,26 +239,27 @@ class Tests:
>                  range_str = str(low)
>              else:
>                  range_str = str(low) + "-" + str(high)
> -            (rc, con_str) = semanage.semanage_context_to_string(sh,con)
> -            if rc < 0: con_str = ""
> -            print "Port: ", range_str, " ", proto_str, " Context: ",
> con_str
> +            (rc, con_str) = semanage.semanage_context_to_string(sh, con)
> +            if rc < 0:
> +                con_str = ""
> +            print("Port: %s %s Context: %s" % (range_str, proto_str,
> con_str))
>              semanage.semanage_port_free(port)
>
> -    def test_fcontexts(self,sh):
> -        print "Testing file contexts..."
> +    def test_fcontexts(self, sh):
> +        print("Testing file contexts...")
>
>          (status, flist) = semanage.semanage_fcontext_list(sh)
>          if status < 0:
>              raise Error("Could not list file contexts")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if (len(flist) == 0):
> -            print "No file contexts found!"
> -            print "This is not necessarily a test failure."
> +        if len(flist) == 0:
> +            print("No file contexts found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for fcon in flist:
>              if self.verbose:
> -                print "File Context reference: ", fcon
> +                print("File Context reference: %s" % fcon)
>              expr = semanage.semanage_fcontext_get_expr(fcon)
>              type = semanage.semanage_fcontext_get_type(fcon)
>              type_str = semanage.semanage_fcontext_get_type_str(type)
> @@ -241,406 +267,413 @@ class Tests:
>              if not con:
>                  con_str = "<<none>>"
>              else:
> -                (rc, con_str) = semanage.semanage_context_to_
> string(sh,con)
> -                if rc < 0: con_str = ""
> -            print "File Expr: ", expr, " [", type_str, "] Context: ",
> con_str
> +                (rc, con_str) = semanage.semanage_context_to_string(sh,
> con)
> +                if rc < 0:
> +                    con_str = ""
> +            print("File Expr: %s [%s] Context: %s" % (expr, type_str,
> con_str))
>              semanage.semanage_fcontext_free(fcon)
>
> -    def test_interfaces(self,sh):
> -        print "Testing network interfaces..."
> +    def test_interfaces(self, sh):
> +        print("Testing network interfaces...")
>
>          (status, ilist) = semanage.semanage_iface_list(sh)
>          if status < 0:
>              raise Error("Could not list interfaces")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if (len(ilist) == 0):
> -            print "No network interfaces found!"
> -            print "This is not necessarily a test failure."
> +        if len(ilist) == 0:
> +            print("No network interfaces found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for iface in ilist:
>              if self.verbose:
> -                print "Interface reference: ", iface
> +                print("Interface reference: %s" % iface)
>              name = semanage.semanage_iface_get_name(iface)
>              msg_con = semanage.semanage_iface_get_msgcon(iface)
>              if_con = semanage.semanage_iface_get_ifcon(iface)
> -            (rc, msg_con_str) = semanage.semanage_context_to_
> string(sh,msg_con)
> -            if rc < 0: msg_con_str = ""
> +            (rc, msg_con_str) = semanage.semanage_context_to_string(sh,
> msg_con)
> +            if rc < 0:
> +                msg_con_str = ""
>              (rc, if_con_str) = semanage.semanage_context_to_string(sh,
> if_con)
> -            if rc < 0: if_con_str = ""
> -            print "Interface: ", name, " Context: ", if_con_str, "
> Message Context: ", msg_con_str
> +            if rc < 0:
> +                if_con_str = ""
> +            print("Interface: %s Context: %s Message Context: %s" %
> (name, if_con_str, msg_con_str))
>              semanage.semanage_iface_free(iface)
>
> -    def test_booleans(self,sh):
> -        print "Testing booleans..."
> +    def test_booleans(self, sh):
> +        print("Testing booleans...")
>
>          (status, blist) = semanage.semanage_bool_list(sh)
>          if status < 0:
>              raise Error("Could not list booleans")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if (len(blist) == 0):
> -            print "No booleans found!"
> -            print "This is not necessarily a test failure."
> +        if len(blist) == 0:
> +            print("No booleans found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for pbool in blist:
>              if self.verbose:
> -                print "Boolean reference: ", pbool
> +                print("Boolean reference: %s" % pbool)
>              name = semanage.semanage_bool_get_name(pbool)
>              value = semanage.semanage_bool_get_value(pbool)
> -            print "Boolean: ", name, " Value: ", value
> +            print("Boolean: %s Value: %s" % (name, value))
>              semanage.semanage_bool_free(pbool)
>
> -    def test_abooleans(self,sh):
> -        print "Testing active booleans..."
> +    def test_abooleans(self, sh):
> +        print("Testing active booleans...")
>
>          (status, ablist) = semanage.semanage_bool_list_active(sh)
>          if status < 0:
>              raise Error("Could not list active booleans")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if (len(ablist) == 0):
> -            print "No active booleans found!"
> -            print "This is not necessarily a test failure."
> +        if len(ablist) == 0:
> +            print("No active booleans found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for abool in ablist:
>              if self.verbose:
> -                print "Active boolean reference: ", abool
> +                print("Active boolean reference: %s" % abool)
>              name = semanage.semanage_bool_get_name(abool)
>              value = semanage.semanage_bool_get_value(abool)
> -            print "Active Boolean: ", name, " Value: ", value
> +            print("Active Boolean: %s Value: %s" % (name, value))
>              semanage.semanage_bool_free(abool)
>
> -    def test_nodes(self,sh):
> -        print "Testing network nodes..."
> +    def test_nodes(self, sh):
> +        print("Testing network nodes...")
>
>          (status, nlist) = semanage.semanage_node_list(sh)
>          if status < 0:
>              raise Error("Could not list network nodes")
> -        print "Query status (commit number): ", status
> +        print("Query status (commit number): %s" % status)
>
> -        if (len(nlist) == 0):
> -            print "No network nodes found!"
> -            print "This is not necessarily a test failure."
> +        if len(nlist) == 0:
> +            print("No network nodes found!")
> +            print("This is not necessarily a test failure.")
>              return
>          for node in nlist:
>              if self.verbose:
> -                print "Network node reference: ", node
> +                print("Network node reference: %s" % node)
>
>              (status, addr) = semanage.semanage_node_get_addr(sh, node)
> -            if status < 0: addr = ""
> +            if status < 0:
> +                addr = ""
>
>              (status, mask) = semanage.semanage_node_get_mask(sh, node)
> -            if status < 0: mask = ""
> +            if status < 0:
> +                mask = ""
>
>              proto = semanage.semanage_node_get_proto(node)
>              proto_str = semanage.semanage_node_get_proto_str(proto)
>              con = semanage.semanage_node_get_con(node)
>
>              (status, con_str) = semanage.semanage_context_to_string(sh,
> con)
> -            if status < 0: con_str = ""
> +            if status < 0:
> +                con_str = ""
>
> -            print "Network Node: ", addr, "/", mask, " (", proto_str,
> ")", "Context: ", con_str
> +            print("Network Node: %s/%s (%s) Context: %s" % (addr, mask,
> proto_str, con_str))
>              semanage.semanage_node_free(node)
>
> -    def test_writeuser(self,sh):
> -        print "Testing user write..."
> +    def test_writeuser(self, sh):
> +        print("Testing user write...")
>
>          (status, user) = semanage.semanage_user_create(sh)
>          if status < 0:
>              raise Error("Could not create user object")
>          if self.verbose:
> -            print "User object created"
> +            print("User object created")
>
> -        status = semanage.semanage_user_set_name(sh,user, "testPyUser")
> +        status = semanage.semanage_user_set_name(sh, user, "testPyUser")
>          if status < 0:
>              raise Error("Could not set user name")
>          if self.verbose:
> -            print "User name set: ", semanage.semanage_user_get_
> name(user)
> +            print("User name set: %s" % semanage.semanage_user_get_
> name(user))
>
>          status = semanage.semanage_user_add_role(sh, user, "user_r")
>          if status < 0:
>              raise Error("Could not add role")
>
> -        status = semanage.semanage_user_set_prefix(sh,user, "user")
> +        status = semanage.semanage_user_set_prefix(sh, user, "user")
>          if status < 0:
>              raise Error("Could not set labeling prefix")
>          if self.verbose:
> -            print "User prefix set: ", semanage.semanage_user_get_
> prefix(user)
> +            print("User prefix set: %s" % semanage.semanage_user_get_
> prefix(user))
>
>          status = semanage.semanage_user_set_mlsrange(sh, user, "s0")
>          if status < 0:
>              raise Error("Could not set MLS range")
>          if self.verbose:
> -            print "User mlsrange: ", semanage.semanage_user_get_
> mlsrange(user)
> +            print("User mlsrange: %s" % semanage.semanage_user_get_
> mlsrange(user))
>
>          status = semanage.semanage_user_set_mlslevel(sh, user, "s0")
>          if status < 0:
>              raise Error("Could not set MLS level")
>          if self.verbose:
> -            print "User mlslevel: ", semanage.semanage_user_get_
> mlslevel(user)
> +            print("User mlslevel: %s" % semanage.semanage_user_get_
> mlslevel(user))
>
> -        (status,key) = semanage.semanage_user_key_extract(sh,user)
> +        (status, key) = semanage.semanage_user_key_extract(sh, user)
>          if status < 0:
>              raise Error("Could not extract user key")
>          if self.verbose:
> -            print "User key extracted: ", key
> +            print("User key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_user_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_user_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if user exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_user) = semanage.semanage_user_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old user")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction.."
> +        print("Starting transaction..")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_user_modify_local(sh,key,user)
> +        status = semanage.semanage_user_modify_local(sh, key, user)
>          if status < 0:
>              raise Error("Could not modify user")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing user..."
> +            print("Removing user...")
>              status = semanage.semanage_user_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test user")
>              if self.verbose:
> -                print "User delete: ", status
> +                print("User delete: %s" % status)
>          else:
> -            print "Resetting user..."
> +            print("Resetting user...")
>              status = semanage.semanage_user_modify_local(sh, key,
> old_user)
>              if status < 0:
>                  raise Error("Could not reset test user")
>              if self.verbose:
> -                print "User modify: ", status
> +                print("User modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_user_key_free(key)
>          semanage.semanage_user_free(user)
> -        if exists: semanage.semanage_user_free(old_user)
> +        if exists:
> +            semanage.semanage_user_free(old_user)
>
> -    def test_writeseuser(self,sh):
> -        print "Testing seuser write..."
> +    def test_writeseuser(self, sh):
> +        print("Testing seuser write...")
>
>          (status, seuser) = semanage.semanage_seuser_create(sh)
>          if status < 0:
>              raise Error("Could not create SEUser object")
>          if self.verbose:
> -            print "SEUser object created."
> +            print("SEUser object created.")
>
> -        status = semanage.semanage_seuser_set_name(sh,seuser,
> "testPySEUser")
> +        status = semanage.semanage_seuser_set_name(sh, seuser,
> "testPySEUser")
>          if status < 0:
>              raise Error("Could not set name")
>          if self.verbose:
> -            print "SEUser name set: ", semanage.semanage_seuser_get_
> name(seuser)
> +            print("SEUser name set: %s" % semanage.semanage_seuser_get_
> name(seuser))
>
>          status = semanage.semanage_seuser_set_sename(sh, seuser, "root")
>          if status < 0:
>              raise Error("Could not set sename")
>          if self.verbose:
> -            print "SEUser seuser: ", semanage.semanage_seuser_get_
> sename(seuser)
> +            print("SEUser seuser: %s" % semanage.semanage_seuser_get_
> sename(seuser))
>
>          status = semanage.semanage_seuser_set_mlsrange(sh, seuser,
> "s0:c0.c255")
>          if status < 0:
>              raise Error("Could not set MLS range")
>          if self.verbose:
> -            print "SEUser mlsrange: ", semanage.semanage_seuser_get_
> mlsrange(seuser)
> +            print("SEUser mlsrange: %s" % semanage.semanage_seuser_get_
> mlsrange(seuser))
>
> -        (status,key) = semanage.semanage_seuser_key_extract(sh,seuser)
> +        (status, key) = semanage.semanage_seuser_key_extract(sh, seuser)
>          if status < 0:
>              raise Error("Could not extract SEUser key")
>          if self.verbose:
> -            print "SEUser key extracted: ", key
> +            print("SEUser key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_seuser_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_seuser_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if SEUser exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_seuser) = semanage.semanage_seuser_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SEUser")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_seuser_modify_local(sh,key,seuser)
> +        status = semanage.semanage_seuser_modify_local(sh, key, seuser)
>          if status < 0:
>              raise Error("Could not modify SEUser")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing seuser..."
> +            print("Removing seuser...")
>              status = semanage.semanage_seuser_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SEUser")
>              if self.verbose:
> -                print "Seuser delete: ", status
> +                print("Seuser delete: %s" % status)
>          else:
> -            print "Resetting seuser..."
> +            print("Resetting seuser...")
>              status = semanage.semanage_seuser_modify_local(sh, key,
> old_seuser)
>              if status < 0:
>                  raise Error("Could not reset test SEUser")
>              if self.verbose:
> -                print "Seuser modify: ", status
> +                print("Seuser modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_seuser_key_free(key)
>          semanage.semanage_seuser_free(seuser)
>          if exists:
>              semanage.semanage_seuser_free(old_seuser)
>
> -    def test_writeport(self,sh):
> -        print "Testing port write..."
> +    def test_writeport(self, sh):
> +        print("Testing port write...")
>
>          (status, port) = semanage.semanage_port_create(sh)
>          if status < 0:
>              raise Error("Could not create SEPort object")
>          if self.verbose:
> -            print "SEPort object created."
> +            print("SEPort object created.")
>
> -        semanage.semanage_port_set_range(port,150,200)
> +        semanage.semanage_port_set_range(port, 150, 200)
>          low = semanage.semanage_port_get_low(port)
>          high = semanage.semanage_port_get_high(port)
>          if self.verbose:
> -            print "SEPort range set: ", low, "-", high
> +            print("SEPort range set: %s-%s" % (low, high))
>
>          semanage.semanage_port_set_proto(port,
> semanage.SEMANAGE_PROTO_TCP)
>          if self.verbose:
> -            print "SEPort protocol set: ", semanage.semanage_port_get_
> proto_str(semanage.SEMANAGE_PROTO_TCP)
> +            print("SEPort protocol set: %s" % semanage.semanage_port_get_
> proto_str(semanage.SEMANAGE_PROTO_TCP))
>
>          (status, con) = semanage.semanage_context_create(sh)
>          if status < 0:
>              raise Error("Could not create SEContext object")
>          if self.verbose:
> -            print "SEContext object created (for port)."
> +            print("SEContext object created (for port).")
>
>          status = semanage.semanage_context_set_user(sh, con, "system_u")
>          if status < 0:
>              raise Error("Could not set context user")
>          if self.verbose:
> -            print "SEContext user: ", semanage.semanage_context_get_
> user(con)
> +            print("SEContext user: %s" % semanage.semanage_context_get_
> user(con))
>
>          status = semanage.semanage_context_set_role(sh, con, "object_r")
>          if status < 0:
>              raise Error("Could not set context role")
>          if self.verbose:
> -            print "SEContext role: ", semanage.semanage_context_get_
> role(con)
> +            print("SEContext role: %s" % semanage.semanage_context_get_
> role(con))
>
>          status = semanage.semanage_context_set_type(sh, con,
> "http_port_t")
>          if status < 0:
>              raise Error("Could not set context type")
>          if self.verbose:
> -            print "SEContext type: ", semanage.semanage_context_get_
> type(con)
> +            print("SEContext type: %s" % semanage.semanage_context_get_
> type(con))
>
>          status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
>          if status < 0:
>              raise Error("Could not set context MLS fields")
>          if self.verbose:
> -            print "SEContext mls: ", semanage.semanage_context_get_
> mls(con)
> +            print("SEContext mls: %s" % semanage.semanage_context_get_
> mls(con))
>
>          status = semanage.semanage_port_set_con(sh, port, con)
>          if status < 0:
>              raise Error("Could not set SEPort context")
>          if self.verbose:
> -            print "SEPort context set: ", con
> +            print("SEPort context set: %s" % con)
>
> -        (status,key) = semanage.semanage_port_key_extract(sh,port)
> +        (status, key) = semanage.semanage_port_key_extract(sh, port)
>          if status < 0:
>              raise Error("Could not extract SEPort key")
>          if self.verbose:
> -            print "SEPort key extracted: ", key
> +            print("SEPort key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_port_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_port_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if SEPort exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_port) = semanage.semanage_port_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SEPort")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_port_modify_local(sh,key,port)
> +        status = semanage.semanage_port_modify_local(sh, key, port)
>          if status < 0:
>              raise Error("Could not modify SEPort")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing port range..."
> +            print("Removing port range...")
>              status = semanage.semanage_port_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SEPort")
>              if self.verbose:
> -                print "Port range delete: ", status
> +                print("Port range delete: %s" % status)
>          else:
> -            print "Resetting port range..."
> +            print("Resetting port range...")
>              status = semanage.semanage_port_modify_local(sh, key,
> old_port)
>              if status < 0:
>                  raise Error("Could not reset test SEPort")
>              if self.verbose:
> -                print "Port range modify: ", status
> +                print("Port range modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_context_free(con)
>          semanage.semanage_port_key_free(key)
> @@ -648,118 +681,118 @@ class Tests:
>          if exists:
>              semanage.semanage_port_free(old_port)
>
> -    def test_writefcontext(self,sh):
> -        print "Testing file context write..."
> +    def test_writefcontext(self, sh):
> +        print("Testing file context write...")
>
>          (status, fcon) = semanage.semanage_fcontext_create(sh)
>          if status < 0:
>              raise Error("Could not create SEFcontext object")
>          if self.verbose:
> -            print "SEFcontext object created."
> +            print("SEFcontext object created.")
>
>          status = semanage.semanage_fcontext_set_expr(sh, fcon,
> "/test/fcontext(/.*)?")
>          if status < 0:
>              raise Error("Could not set expression")
>          if self.verbose:
> -            print "SEFContext expr set: ", semanage.semanage_fcontext_
> get_expr(fcon)
> +            print("SEFContext expr set: %s" % semanage.semanage_fcontext_
> get_expr(fcon))
>
>          semanage.semanage_fcontext_set_type(fcon,
> semanage.SEMANAGE_FCONTEXT_REG)
>          if self.verbose:
>              ftype = semanage.semanage_fcontext_get_type(fcon)
> -            print "SEFContext type set: ", semanage.semanage_fcontext_
> get_type_str(ftype)
> +            print("SEFContext type set: %s" % semanage.semanage_fcontext_
> get_type_str(ftype))
>
>          (status, con) = semanage.semanage_context_create(sh)
>          if status < 0:
>              raise Error("Could not create SEContext object")
>          if self.verbose:
> -            print "SEContext object created (for file context)."
> +            print("SEContext object created (for file context).")
>
>          status = semanage.semanage_context_set_user(sh, con, "system_u")
>          if status < 0:
>              raise Error("Could not set context user")
>          if self.verbose:
> -            print "SEContext user: ", semanage.semanage_context_get_
> user(con)
> +            print("SEContext user: %s" % semanage.semanage_context_get_
> user(con))
>
>          status = semanage.semanage_context_set_role(sh, con, "object_r")
>          if status < 0:
>              raise Error("Could not set context role")
>          if self.verbose:
> -            print "SEContext role: ", semanage.semanage_context_get_
> role(con)
> +            print("SEContext role: %s" % semanage.semanage_context_get_
> role(con))
>
>          status = semanage.semanage_context_set_type(sh, con, "default_t")
>          if status < 0:
>              raise Error("Could not set context type")
>          if self.verbose:
> -            print "SEContext type: ", semanage.semanage_context_get_
> type(con)
> +            print("SEContext type: %s" % semanage.semanage_context_get_
> type(con))
>
>          status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
>          if status < 0:
>              raise Error("Could not set context MLS fields")
>          if self.verbose:
> -            print "SEContext mls: ", semanage.semanage_context_get_
> mls(con)
> +            print("SEContext mls: %s" % semanage.semanage_context_get_
> mls(con))
>
>          status = semanage.semanage_fcontext_set_con(sh, fcon, con)
>          if status < 0:
>              raise Error("Could not set SEFcontext context")
>          if self.verbose:
> -            print "SEFcontext context set: ", con
> +            print("SEFcontext context set: %s" % con)
>
> -        (status,key) = semanage.semanage_fcontext_key_extract(sh,fcon)
> +        (status, key) = semanage.semanage_fcontext_key_extract(sh, fcon)
>          if status < 0:
>              raise Error("Could not extract SEFcontext key")
>          if self.verbose:
> -            print "SEFcontext key extracted: ", key
> +            print("SEFcontext key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_fcontext_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_fcontext_exists_local(sh,
> key)
>          if status < 0:
>              raise Error("Could not check if SEFcontext exists")
>
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>          if exists:
>              (status, old_fcontext) = semanage.semanage_fcontext_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SEFcontext")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_fcontext_modify_local(sh,key,fcon)
> +        status = semanage.semanage_fcontext_modify_local(sh, key, fcon)
>          if status < 0:
>              raise Error("Could not modify SEFcontext")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing file context..."
> +            print("Removing file context...")
>              status = semanage.semanage_fcontext_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SEFcontext")
>              if self.verbose:
> -                print "File context delete: ", status
> +                print("File context delete: %s" % status)
>          else:
> -            print "Resetting file context..."
> +            print("Resetting file context...")
>              status = semanage.semanage_fcontext_modify_local(sh, key,
> old_fcontext)
>              if status < 0:
>                  raise Error("Could not reset test FContext")
>              if self.verbose:
> -                print "File context modify: ", status
> +                print("File context modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_context_free(con)
>          semanage.semanage_fcontext_key_free(key)
> @@ -767,119 +800,119 @@ class Tests:
>          if exists:
>              semanage.semanage_fcontext_free(old_fcontext)
>
> -    def test_writeinterface(self,sh):
> -        print "Testing network interface write..."
> +    def test_writeinterface(self, sh):
> +        print("Testing network interface write...")
>
>          (status, iface) = semanage.semanage_iface_create(sh)
>          if status < 0:
>              raise Error("Could not create SEIface object")
>          if self.verbose:
> -            print "SEIface object created."
> +            print("SEIface object created.")
>
>          status = semanage.semanage_iface_set_name(sh, iface,
> "test_iface")
>          if status < 0:
>              raise Error("Could not set SEIface name")
>          if self.verbose:
> -            print "SEIface name set: ", semanage.semanage_iface_get_
> name(iface)
> +            print("SEIface name set: %s" % semanage.semanage_iface_get_
> name(iface))
>
>          (status, con) = semanage.semanage_context_create(sh)
>          if status < 0:
>              raise Error("Could not create SEContext object")
>          if self.verbose:
> -            print "SEContext object created (for network interface)"
> +            print("SEContext object created (for network interface)")
>
>          status = semanage.semanage_context_set_user(sh, con, "system_u")
>          if status < 0:
>              raise Error("Could not set interface context user")
>          if self.verbose:
> -            print "SEContext user: ", semanage.semanage_context_get_
> user(con)
> +            print("SEContext user: %s" % semanage.semanage_context_get_
> user(con))
>
>          status = semanage.semanage_context_set_role(sh, con, "object_r")
>          if status < 0:
>              raise Error("Could not set interface context role")
>          if self.verbose:
> -            print "SEContext role: ", semanage.semanage_context_get_
> role(con)
> +            print("SEContext role: %s" % semanage.semanage_context_get_
> role(con))
>
>          status = semanage.semanage_context_set_type(sh, con, "default_t")
>          if status < 0:
>              raise Error("Could not set interface context type")
>          if self.verbose:
> -            print "SEContext type: ", semanage.semanage_context_get_
> type(con)
> +            print("SEContext type: %s" % semanage.semanage_context_get_
> type(con))
>
>          status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
>          if status < 0:
>              raise Error("Could not set interface context MLS fields")
>          if self.verbose:
> -            print "SEContext mls: ", semanage.semanage_context_get_
> mls(con)
> +            print("SEContext mls: %s" % semanage.semanage_context_get_
> mls(con))
>
>          status = semanage.semanage_iface_set_ifcon(sh, iface, con)
>          if status < 0:
>              raise Error("Could not set SEIface interface context")
>          if self.verbose:
> -            print "SEIface interface context set: ", con
> +            print("SEIface interface context set: %s" % con)
>
>          status = semanage.semanage_iface_set_msgcon(sh, iface, con)
>          if status < 0:
>              raise Error("Could not set SEIface message context")
>          if self.verbose:
> -            print "SEIface message context set: ", con
> +            print("SEIface message context set: %s" % con)
>
> -        (status,key) = semanage.semanage_iface_key_extract(sh,iface)
> +        (status, key) = semanage.semanage_iface_key_extract(sh, iface)
>          if status < 0:
>              raise Error("Could not extract SEIface key")
>          if self.verbose:
> -            print "SEIface key extracted: ", key
> +            print("SEIface key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_iface_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_iface_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if SEIface exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_iface) = semanage.semanage_iface_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SEIface")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not begin semanage transaction")
>
> -        status = semanage.semanage_iface_modify_local(sh,key,iface)
> +        status = semanage.semanage_iface_modify_local(sh, key, iface)
>          if status < 0:
>              raise Error("Could not modify SEIface")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not begin semanage transaction")
>
>          if not exists:
> -            print "Removing interface..."
> +            print("Removing interface...")
>              status = semanage.semanage_iface_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SEIface")
>              if self.verbose:
> -                print "Interface delete: ", status
> +                print("Interface delete: %s" % status)
>          else:
> -            print "Resetting interface..."
> +            print("Resetting interface...")
>              status = semanage.semanage_iface_modify_local(sh, key,
> old_iface)
>              if status < 0:
>                  raise Error("Could not reset test SEIface")
>              if self.verbose:
> -                print "Interface modify: ", status
> +                print("Interface modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_context_free(con)
>          semanage.semanage_iface_key_free(key)
> @@ -887,45 +920,45 @@ class Tests:
>          if exists:
>              semanage.semanage_iface_free(old_iface)
>
> -    def test_writeboolean(self,sh):
> -        print "Testing boolean write..."
> +    def test_writeboolean(self, sh):
> +        print("Testing boolean write...")
>
>          (status, pbool) = semanage.semanage_bool_create(sh)
>          if status < 0:
>              raise Error("Could not create SEBool object")
>          if self.verbose:
> -            print "SEBool object created."
> +            print("SEBool object created.")
>
>          status = semanage.semanage_bool_set_name(sh, pbool,
> "allow_execmem")
>          if status < 0:
>              raise Error("Could not set name")
>          if self.verbose:
> -            print "SEBool name set: ", semanage.semanage_bool_get_
> name(pbool)
> +            print("SEBool name set: %s" % semanage.semanage_bool_get_
> name(pbool))
>
>          semanage.semanage_bool_set_value(pbool, 0)
>          if self.verbose:
> -            print "SEbool value set: ", semanage.semanage_bool_get_
> value(pbool)
> +            print("SEbool value set: %s" % semanage.semanage_bool_get_
> value(pbool))
>
> -        (status,key) = semanage.semanage_bool_key_extract(sh, pbool)
> +        (status, key) = semanage.semanage_bool_key_extract(sh, pbool)
>          if status < 0:
>              raise Error("Could not extract SEBool key")
>          if self.verbose:
> -            print "SEBool key extracted: ", key
> +            print("SEBool key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_bool_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_bool_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if SEBool exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_bool) = semanage.semanage_bool_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SEBool")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
> @@ -938,110 +971,110 @@ class Tests:
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing boolean..."
> +            print("Removing boolean...")
>              status = semanage.semanage_bool_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SEBool")
>              if self.verbose:
> -                print "Boolean delete: ", status
> +                print("Boolean delete: %s" % status)
>          else:
> -            print "Resetting boolean..."
> +            print("Resetting boolean...")
>              status = semanage.semanage_bool_modify_local(sh, key,
> old_bool)
>              if status < 0:
>                  raise Error("Could not reset test SEBool")
>              if self.verbose:
> -                print "Boolean modify: ", status
> +                print("Boolean modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_bool_key_free(key)
>          semanage.semanage_bool_free(pbool)
> -        if exists: semanage.semanage_bool_free(old_bool)
> +        if exists:
> +            semanage.semanage_bool_free(old_bool)
>
> -    def test_writeaboolean(self,sh):
> -        print "Testing active boolean write..."
> +    def test_writeaboolean(self, sh):
> +        print("Testing active boolean write...")
>
>          (status, key) = semanage.semanage_bool_key_create(sh,
> "allow_execmem")
>          if status < 0:
>              raise Error("Could not create SEBool key")
>          if self.verbose:
> -            print "SEBool key created: ", key
> +            print("SEBool key created: %s" % key)
>
>          (status, old_bool) = semanage.semanage_bool_query_active(sh, key)
>          if status < 0:
>              raise Error("Could not query old SEBool")
>          if self.verbose:
> -            print "Query status (commit number): ", status
> +            print("Query status (commit number): %s" % status)
>
>          (status, abool) = semanage.semanage_bool_create(sh)
>          if status < 0:
>              raise Error("Could not create SEBool object")
>          if self.verbose:
> -            print "SEBool object created."
> +            print("SEBool object created.")
>
>          status = semanage.semanage_bool_set_name(sh, abool,
> "allow_execmem")
>          if status < 0:
>              raise Error("Could not set name")
>          if self.verbose:
> -            print "SEBool name set: ", semanage.semanage_bool_get_
> name(abool)
> +            print("SEBool name set: %s" % semanage.semanage_bool_get_
> name(abool))
>
>          semanage.semanage_bool_set_value(abool, 0)
>          if self.verbose:
> -            print "SEbool value set: ", semanage.semanage_bool_get_
> value(abool)
> +            print("SEbool value set: %s" % semanage.semanage_bool_get_
> value(abool))
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_bool_set_active(sh,key,abool)
> +        status = semanage.semanage_bool_set_active(sh, key, abool)
>          if status < 0:
>              raise Error("Could not modify SEBool")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
> -        print "Resetting old active boolean..."
> +        print("Resetting old active boolean...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_bool_set_active(sh, key,old_bool)
> +        status = semanage.semanage_bool_set_active(sh, key, old_bool)
>          if status < 0:
>              raise Error("Could not reset test SEBool")
>          if self.verbose:
> -            print "SEBool active reset: ", status
> +            print("SEBool active reset: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_bool_key_free(key)
>          semanage.semanage_bool_free(abool)
>          semanage.semanage_bool_free(old_bool)
>
> -
> -    def test_writenode(self,sh):
> -        print "Testing network node write..."
> +    def test_writenode(self, sh):
> +        print("Testing network node write...")
>
>          (status, node) = semanage.semanage_node_create(sh)
>          if status < 0:
>              raise Error("Could not create SENode object")
>          if self.verbose:
> -            print "SENode object created."
> +            print("SENode object created.")
>
>          status = semanage.semanage_node_set_addr(sh, node,
> semanage.SEMANAGE_PROTO_IP6, "ffee:dddd::bbbb")
>          if status < 0:
> @@ -1053,100 +1086,100 @@ class Tests:
>
>          semanage.semanage_node_set_proto(node,
> semanage.SEMANAGE_PROTO_IP6)
>          if self.verbose:
> -            print "SENode protocol set: ", semanage.semanage_node_get_
> proto_str(semanage.SEMANAGE_PROTO_IP6)
> +            print("SENode protocol set: %s" % semanage.semanage_node_get_
> proto_str(semanage.SEMANAGE_PROTO_IP6))
>
>          (status, con) = semanage.semanage_context_create(sh)
>          if status < 0:
>              raise Error("Could not create SEContext object")
>          if self.verbose:
> -            print "SEContext object created (for node)."
> +            print("SEContext object created (for node).")
>
>          status = semanage.semanage_context_set_user(sh, con, "system_u")
>          if status < 0:
>              raise Error("Could not set context user")
>          if self.verbose:
> -            print "SEContext user: ", semanage.semanage_context_get_
> user(con)
> +            print("SEContext user: %s" % semanage.semanage_context_get_
> user(con))
>
>          status = semanage.semanage_context_set_role(sh, con, "object_r")
>          if status < 0:
>              raise Error("Could not set context role")
>          if self.verbose:
> -            print "SEContext role: ", semanage.semanage_context_get_
> role(con)
> +            print("SEContext role: %s" % semanage.semanage_context_get_
> role(con))
>
>          status = semanage.semanage_context_set_type(sh, con, "lo_node_t")
>          if status < 0:
>              raise Error("Could not set context type")
>          if self.verbose:
> -            print "SEContext type: ", semanage.semanage_context_get_
> type(con)
> +            print("SEContext type: %s" % semanage.semanage_context_get_
> type(con))
>
>          status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
>          if status < 0:
>              raise Error("Could not set context MLS fields")
>          if self.verbose:
> -            print "SEContext mls: ", semanage.semanage_context_get_
> mls(con)
> +            print("SEContext mls: %s" % semanage.semanage_context_get_
> mls(con))
>
>          status = semanage.semanage_node_set_con(sh, node, con)
>          if status < 0:
>              raise Error("Could not set SENode context")
>          if self.verbose:
> -            print "SENode context set: ", con
> +            print("SENode context set: %s" % con)
>
> -        (status,key) = semanage.semanage_node_key_extract(sh, node)
> +        (status, key) = semanage.semanage_node_key_extract(sh, node)
>          if status < 0:
>              raise Error("Could not extract SENode key")
>          if self.verbose:
> -            print "SENode key extracted: ", key
> +            print("SENode key extracted: %s" % key)
>
> -        (status,exists) = semanage.semanage_node_exists_local(sh,key)
> +        (status, exists) = semanage.semanage_node_exists_local(sh, key)
>          if status < 0:
>              raise Error("Could not check if SENode exists")
>          if self.verbose:
> -            print "Exists status (commit number): ", status
> +            print("Exists status (commit number): %s" % status)
>
>          if exists:
>              (status, old_node) = semanage.semanage_node_query_local(sh,
> key)
>              if status < 0:
>                  raise Error("Could not query old SENode")
>              if self.verbose:
> -                print "Query status (commit number): ", status
> +                print("Query status (commit number): %s" % status)
>
> -        print "Starting transaction..."
> +        print("Starting transaction...")
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
> -        status = semanage.semanage_node_modify_local(sh,key, node)
> +        status = semanage.semanage_node_modify_local(sh, key, node)
>          if status < 0:
>              raise Error("Could not modify SENode")
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit test transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          status = semanage.semanage_begin_transaction(sh)
>          if status < 0:
>              raise Error("Could not start semanage transaction")
>
>          if not exists:
> -            print "Removing network node..."
> +            print("Removing network node...")
>              status = semanage.semanage_node_del_local(sh, key)
>              if status < 0:
>                  raise Error("Could not delete test SENode")
>              if self.verbose:
> -                print "Network node delete: ", status
> +                print("Network node delete: %s" % status)
>          else:
> -            print "Resetting network node..."
> +            print("Resetting network node...")
>              status = semanage.semanage_node_modify_local(sh, key,
> old_node)
>              if status < 0:
>                  raise Error("Could not reset test SENode")
>              if self.verbose:
> -                print "Network node modify: ", status
> +                print("Network node modify: %s" % status)
>
>          status = semanage.semanage_commit(sh)
>          if status < 0:
>              raise Error("Could not commit reset transaction")
> -        print "Commit status (transaction number): ", status
> +        print("Commit status (transaction number): %s" % status)
>
>          semanage.semanage_context_free(con)
>          semanage.semanage_node_key_free(key)
> @@ -1154,17 +1187,41 @@ class Tests:
>          if exists:
>              semanage.semanage_node_free(old_node)
>
> +
>  def main(argv=None):
>      if argv is None:
>          argv = sys.argv
>      try:
>          try:
> -            opts, args = getopt.getopt(argv[1:], "hvmuspfibcUSPFIBCanN",
> ["help", "verbose", "modules", "users", "seusers", "ports", "file
> contexts", "network interfaces", "booleans", "active booleans", "network
> nodes", "writeuser", "writeseuser", "writeport", "writefcontext",
> "writeinterface", "writeboolean", "writeaboolean", "writenode", "all"])
> +            opts, args = getopt.getopt(
> +                argv[1:], "hvmuspfibcUSPFIBCanN",
> +                [
> +                    "help",
> +                    "verbose",
> +                    "modules",
> +                    "users",
> +                    "seusers",
> +                    "ports",
> +                    "file contexts",
> +                    "network interfaces",
> +                    "booleans",
> +                    "active booleans",
> +                    "network nodes",
> +                    "writeuser",
> +                    "writeseuser",
> +                    "writeport",
> +                    "writefcontext",
> +                    "writeinterface",
> +                    "writeboolean",
> +                    "writeaboolean",
> +                    "writenode",
> +                    "all",
> +                ])
>              tests = Tests()
>              for o, a in opts:
>                  if o == "-v":
>                      tests.verbose = True
> -                    print "Verbose output selected."
> +                    print("Verbose output selected.")
>                  if o == "-a":
>                      tests.all = True
>                  if o == "-u":
> @@ -1207,12 +1264,12 @@ def main(argv=None):
>              if not tests.selected():
>                  raise Usage("Please select a valid test.")
>
> -        except getopt.error, msg:
> +        except getopt.error as msg:
>              raise Usage(msg)
>
> -        sh=semanage.semanage_handle_create()
> +        sh = semanage.semanage_handle_create()
>
> -        if (semanage.semanage_is_managed(sh) != 1):
> +        if semanage.semanage_is_managed(sh) != 1:
>              raise Status("Unmanaged!")
>
>          status = semanage.semanage_connect(sh)
> @@ -1227,14 +1284,15 @@ def main(argv=None):
>
>          semanage.semanage_handle_destroy(sh)
>
> -    except Usage, err:
> -        print >>sys.stderr, err.msg
> -    except Status, err:
> -        print >>sys.stderr, err.msg
> -    except Error, err:
> -        print >>sys.stderr, err.msg
> +    except Usage as err:
> +        print(err.msg, file=sys.stderr)
> +    except Status as err:
> +        print(err.msg, file=sys.stderr)
> +    except Error as err:
> +        print(err.msg, file=sys.stderr)
>
>      return 2
>
> +
>  if __name__ == "__main__":
>      sys.exit(main())
> --
> 2.18.0
>
> _______________________________________________
> Selinux mailing list
> Selinux@tycho.nsa.gov
> To unsubscribe, send email to Selinux-leave@tycho.nsa.gov.
> To get help, send an email containing "help" to
> Selinux-request@tycho.nsa.gov.
>
<div dir="ltr">Im assuming with your attention on the python side of the house we&#39;re going to see a lot of<div>formatting change patches heading the mailing list. I don&#39;t have any problems with them.</div><div><br></div><div>Are you using some formatter for these, if so which one is it? Is it flake8 still?<br></div><div><br></div><div>We should probably document that patches should be sent formatted, ie if a patch introduces a delta</div><div>after applying the patch and running &lt;formatter&gt;, it&#39;s an issue.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 18, 2018 at 10:50 AM, Nicolas Iooss <span dir="ltr">&lt;<a href="mailto:nicolas.iooss@m4x.org" target="_blank">nicolas.iooss@m4x.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This program can be useful in order to test the Python API of<br>
libsemanage. Make it usable in Python 3 using 2to3 and some tweaks.<br>
<br>
While at it, fix warnings reported by flake8 linter.<br>
<br>
Signed-off-by: Nicolas Iooss &lt;<a href="mailto:nicolas.iooss@m4x.org">nicolas.iooss@m4x.org</a>&gt;<br>
---<br>
 libsemanage/src/pywrap-test.py | 680 ++++++++++++++++++------------<wbr>---<br>
 1 file changed, 369 insertions(+), 311 deletions(-)<br>
<br>
diff --git a/libsemanage/src/pywrap-test.<wbr>py b/libsemanage/src/pywrap-test.<wbr>py<br>
index 326034947aa5..5ac48f408380 100644<br>
--- a/libsemanage/src/pywrap-test.<wbr>py<br>
+++ b/libsemanage/src/pywrap-test.<wbr>py<br>
@@ -1,8 +1,11 @@<br>
-#!/usr/bin/python<br>
+#!/usr/bin/env python<br>
+from __future__ import print_function<br>
+<br>
 import sys<br>
 import getopt<br>
 import semanage<br>
<br>
+<br>
 usage = &quot;\<br>
 Choose one of the following tests:\n\<br>
 -m for modules\n\<br>
@@ -27,21 +30,25 @@ Other options:\n\<br>
 -v for verbose output\<br>
 &quot;<br>
<br>
+<br>
 class Usage(Exception):<br>
     def __init__(self, msg):<br>
         Exception.__init__(self)<br>
         self.msg = msg<br>
<br>
+<br>
 class Status(Exception):<br>
     def __init__(self, msg):<br>
         Exception.__init__(self)<br>
         self.msg = msg<br>
<br>
+<br>
 class Error(Exception):<br>
     def __init__(self, msg):<br>
         Exception.__init__(self)<br>
         self.msg = msg<br>
<br>
+<br>
 class Tests:<br>
     def __init__(self):<br>
         self.all = False<br>
@@ -65,146 +72,164 @@ class Tests:<br>
         self.verbose = False<br>
<br>
     def selected(self):<br>
-        return (self.all or self.users or self.modules or self.seusers or self.ports or self.fcontexts or self.interfaces or self.booleans or self.abooleans or self.writeuser or self.writeseuser or self.writeport or self.writefcontext or self.writeinterface or self.writeboolean or self.writeaboolean or self.nodes or self.writenode)<br>
+        return (<br>
+            self.all or<br>
+            self.users or<br>
+            self.modules or<br>
+            self.seusers or<br>
+            self.ports or<br>
+            self.fcontexts or<br>
+            self.interfaces or<br>
+            self.booleans or<br>
+            self.abooleans or<br>
+            self.writeuser or<br>
+            self.writeseuser or<br>
+            self.writeport or<br>
+            self.writefcontext or<br>
+            self.writeinterface or<br>
+            self.writeboolean or<br>
+            self.writeaboolean or<br>
+            self.nodes or<br>
+            self.writenode)<br>
<br>
     def run(self, handle):<br>
-        if (self.users or self.all):<br>
+        if self.users or self.all:<br>
             self.test_users(handle)<br>
-            print &quot;&quot;<br>
-        if (self.seusers or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.seusers or self.all:<br>
             self.test_seusers(handle)<br>
-            print &quot;&quot;<br>
-        if (self.ports or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.ports or self.all:<br>
             self.test_ports(handle)<br>
-            print &quot;&quot;<br>
-        if (self.modules or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.modules or self.all:<br>
             self.test_modules(handle)<br>
-            print &quot;&quot;<br>
-        if (self.fcontexts or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.fcontexts or self.all:<br>
             self.test_fcontexts(handle)<br>
-            print &quot;&quot;<br>
-        if (self.interfaces or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.interfaces or self.all:<br>
             self.test_interfaces(handle)<br>
-            print &quot;&quot;<br>
-        if (self.booleans or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.booleans or self.all:<br>
             self.test_booleans(handle)<br>
-            print &quot;&quot;<br>
-        if (self.abooleans or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.abooleans or self.all:<br>
             self.test_abooleans(handle)<br>
-            print &quot;&quot;<br>
-        if (self.nodes or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.nodes or self.all:<br>
             self.test_nodes(handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeuser or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeuser or self.all:<br>
             self.test_writeuser(handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeseuser or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeseuser or self.all:<br>
             self.test_writeseuser(handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeport or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeport or self.all:<br>
             self.test_writeport(handle)<br>
-            print &quot;&quot;<br>
-        if (self.writefcontext or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writefcontext or self.all:<br>
             self.test_writefcontext(<wbr>handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeinterface or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeinterface or self.all:<br>
             self.test_writeinterface(<wbr>handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeboolean or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeboolean or self.all:<br>
             self.test_writeboolean(handle)<br>
-            print &quot;&quot;<br>
-        if (self.writeaboolean or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writeaboolean or self.all:<br>
             self.test_writeaboolean(<wbr>handle)<br>
-            print &quot;&quot;<br>
-        if (self.writenode or self.all):<br>
+            print(&quot;&quot;)<br>
+        if self.writenode or self.all:<br>
             self.test_writenode(handle)<br>
-            print &quot;&quot;<br>
+            print(&quot;&quot;)<br>
<br>
-    def test_modules(self,sh):<br>
-        print &quot;Testing modules...&quot;<br>
+    def test_modules(self, sh):<br>
+        print(&quot;Testing modules...&quot;)<br>
<br>
         (trans_cnt, mlist, mlist_size) = semanage.semanage_module_list(<wbr>sh)<br>
<br>
-        print &quot;Transaction number: &quot;, trans_cnt<br>
-        print &quot;Module list size: &quot;, mlist_size<br>
+        print(&quot;Transaction number: %s&quot; % trans_cnt)<br>
+        print(&quot;Module list size: %s&quot; % mlist_size)<br>
         if self.verbose:<br>
-            print &quot;List reference: &quot;, mlist<br>
+            print(&quot;List reference: %s&quot; % mlist)<br>
<br>
-        if (mlist_size == 0):<br>
-            print &quot;No modules installed!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if mlist_size == 0:<br>
+            print(&quot;No modules installed!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for idx in range(mlist_size):<br>
             module = semanage.semanage_module_list_<wbr>nth(mlist, idx)<br>
             if self.verbose:<br>
-                print &quot;Module reference: &quot;, module<br>
-            print &quot;Module name: &quot;, semanage.semanage_module_get_<wbr>name(module)<br>
+                print(&quot;Module reference: %s&quot; % module)<br>
+            print(&quot;Module name: %s&quot; % semanage.semanage_module_get_<wbr>name(module))<br>
<br>
-    def test_seusers(self,sh):<br>
-        print &quot;Testing seusers...&quot;<br>
+    def test_seusers(self, sh):<br>
+        print(&quot;Testing seusers...&quot;)<br>
<br>
         (status, slist) = semanage.semanage_seuser_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list seusers&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if ( len(slist) == 0):<br>
-            print &quot;No seusers found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(slist) == 0:<br>
+            print(&quot;No seusers found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for seuser in slist:<br>
             if self.verbose:<br>
-                print &quot;seseuser reference: &quot;, seuser<br>
-            print &quot;seuser name: &quot;, semanage.semanage_seuser_get_<wbr>name(seuser)<br>
-            print &quot;   seuser mls range: &quot;, semanage.semanage_seuser_get_<wbr>mlsrange(seuser)<br>
-            print &quot;   seuser sename: &quot;, semanage.semanage_seuser_get_<wbr>sename(seuser)<br>
+                print(&quot;seseuser reference: %s&quot; % seuser)<br>
+            print(&quot;seuser name: %s&quot; % semanage.semanage_seuser_get_<wbr>name(seuser))<br>
+            print(&quot;   seuser mls range: %s&quot; % semanage.semanage_seuser_get_<wbr>mlsrange(seuser))<br>
+            print(&quot;   seuser sename: %s&quot; % semanage.semanage_seuser_get_<wbr>sename(seuser))<br>
             semanage.semanage_seuser_free(<wbr>seuser)<br>
<br>
-    def test_users(self,sh):<br>
-        print &quot;Testing users...&quot;<br>
+    def test_users(self, sh):<br>
+        print(&quot;Testing users...&quot;)<br>
<br>
         (status, ulist) = semanage.semanage_user_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list users&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if ( len(ulist) == 0):<br>
-            print &quot;No users found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(ulist) == 0:<br>
+            print(&quot;No users found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for user in ulist:<br>
             if self.verbose:<br>
-                print &quot;User reference: &quot;, user<br>
-            print &quot;User name: &quot;, semanage.semanage_user_get_<wbr>name(user)<br>
-            print &quot;   User labeling prefix: &quot;, semanage.semanage_user_get_<wbr>prefix(user)<br>
-            print &quot;   User mls level: &quot;, semanage.semanage_user_get_<wbr>mlslevel(user)<br>
-            print &quot;   User mls range: &quot;, semanage.semanage_user_get_<wbr>mlsrange(user)<br>
-            print &quot;   User number of roles: &quot;, semanage.semanage_user_get_<wbr>num_roles(user)<br>
-            print &quot;   User roles: &quot;<br>
+                print(&quot;User reference: %s&quot; % user)<br>
+            print(&quot;User name: %s&quot; % semanage.semanage_user_get_<wbr>name(user))<br>
+            print(&quot;   User labeling prefix: %s&quot; % semanage.semanage_user_get_<wbr>prefix(user))<br>
+            print(&quot;   User mls level: %s&quot; % semanage.semanage_user_get_<wbr>mlslevel(user))<br>
+            print(&quot;   User mls range: %s&quot; % semanage.semanage_user_get_<wbr>mlsrange(user))<br>
+            print(&quot;   User number of roles: %s&quot; % semanage.semanage_user_get_<wbr>num_roles(user))<br>
+            print(&quot;   User roles: &quot;)<br>
             (status, rlist) = semanage.semanage_user_get_<wbr>roles(sh, user)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not get user roles&quot;)<br>
<br>
             for role in rlist:<br>
-                print &quot;      &quot;, role<br>
+                print(&quot;      %s&quot; % role)<br>
<br>
             semanage.semanage_user_free(<wbr>user)<br>
<br>
-    def test_ports(self,sh):<br>
-        print &quot;Testing ports...&quot;<br>
+    def test_ports(self, sh):<br>
+        print(&quot;Testing ports...&quot;)<br>
<br>
         (status, plist) = semanage.semanage_port_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list ports&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if ( len(plist) == 0):<br>
-            print &quot;No ports found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(plist) == 0:<br>
+            print(&quot;No ports found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for port in plist:<br>
             if self.verbose:<br>
-                print &quot;Port reference: &quot;, port<br>
+                print(&quot;Port reference: %s&quot; % port)<br>
             low = semanage.semanage_port_get_<wbr>low(port)<br>
             high = semanage.semanage_port_get_<wbr>high(port)<br>
             con = semanage.semanage_port_get_<wbr>con(port)<br>
@@ -214,26 +239,27 @@ class Tests:<br>
                 range_str = str(low)<br>
             else:<br>
                 range_str = str(low) + &quot;-&quot; + str(high)<br>
-            (rc, con_str) = semanage.semanage_context_to_<wbr>string(sh,con)<br>
-            if rc &lt; 0: con_str = &quot;&quot;<br>
-            print &quot;Port: &quot;, range_str, &quot; &quot;, proto_str, &quot; Context: &quot;, con_str<br>
+            (rc, con_str) = semanage.semanage_context_to_<wbr>string(sh, con)<br>
+            if rc &lt; 0:<br>
+                con_str = &quot;&quot;<br>
+            print(&quot;Port: %s %s Context: %s&quot; % (range_str, proto_str, con_str))<br>
             semanage.semanage_port_free(<wbr>port)<br>
<br>
-    def test_fcontexts(self,sh):<br>
-        print &quot;Testing file contexts...&quot;<br>
+    def test_fcontexts(self, sh):<br>
+        print(&quot;Testing file contexts...&quot;)<br>
<br>
         (status, flist) = semanage.semanage_fcontext_<wbr>list(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list file contexts&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if (len(flist) == 0):<br>
-            print &quot;No file contexts found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(flist) == 0:<br>
+            print(&quot;No file contexts found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for fcon in flist:<br>
             if self.verbose:<br>
-                print &quot;File Context reference: &quot;, fcon<br>
+                print(&quot;File Context reference: %s&quot; % fcon)<br>
             expr = semanage.semanage_fcontext_<wbr>get_expr(fcon)<br>
             type = semanage.semanage_fcontext_<wbr>get_type(fcon)<br>
             type_str = semanage.semanage_fcontext_<wbr>get_type_str(type)<br>
@@ -241,406 +267,413 @@ class Tests:<br>
             if not con:<br>
                 con_str = &quot;&lt;&lt;none&gt;&gt;&quot;<br>
             else:<br>
-                (rc, con_str) = semanage.semanage_context_to_<wbr>string(sh,con)<br>
-                if rc &lt; 0: con_str = &quot;&quot;<br>
-            print &quot;File Expr: &quot;, expr, &quot; [&quot;, type_str, &quot;] Context: &quot;, con_str<br>
+                (rc, con_str) = semanage.semanage_context_to_<wbr>string(sh, con)<br>
+                if rc &lt; 0:<br>
+                    con_str = &quot;&quot;<br>
+            print(&quot;File Expr: %s [%s] Context: %s&quot; % (expr, type_str, con_str))<br>
             semanage.semanage_fcontext_<wbr>free(fcon)<br>
<br>
-    def test_interfaces(self,sh):<br>
-        print &quot;Testing network interfaces...&quot;<br>
+    def test_interfaces(self, sh):<br>
+        print(&quot;Testing network interfaces...&quot;)<br>
<br>
         (status, ilist) = semanage.semanage_iface_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list interfaces&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if (len(ilist) == 0):<br>
-            print &quot;No network interfaces found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(ilist) == 0:<br>
+            print(&quot;No network interfaces found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for iface in ilist:<br>
             if self.verbose:<br>
-                print &quot;Interface reference: &quot;, iface<br>
+                print(&quot;Interface reference: %s&quot; % iface)<br>
             name = semanage.semanage_iface_get_<wbr>name(iface)<br>
             msg_con = semanage.semanage_iface_get_<wbr>msgcon(iface)<br>
             if_con = semanage.semanage_iface_get_<wbr>ifcon(iface)<br>
-            (rc, msg_con_str) = semanage.semanage_context_to_<wbr>string(sh,msg_con)<br>
-            if rc &lt; 0: msg_con_str = &quot;&quot;<br>
+            (rc, msg_con_str) = semanage.semanage_context_to_<wbr>string(sh, msg_con)<br>
+            if rc &lt; 0:<br>
+                msg_con_str = &quot;&quot;<br>
             (rc, if_con_str) = semanage.semanage_context_to_<wbr>string(sh, if_con)<br>
-            if rc &lt; 0: if_con_str = &quot;&quot;<br>
-            print &quot;Interface: &quot;, name, &quot; Context: &quot;, if_con_str, &quot; Message Context: &quot;, msg_con_str<br>
+            if rc &lt; 0:<br>
+                if_con_str = &quot;&quot;<br>
+            print(&quot;Interface: %s Context: %s Message Context: %s&quot; % (name, if_con_str, msg_con_str))<br>
             semanage.semanage_iface_free(<wbr>iface)<br>
<br>
-    def test_booleans(self,sh):<br>
-        print &quot;Testing booleans...&quot;<br>
+    def test_booleans(self, sh):<br>
+        print(&quot;Testing booleans...&quot;)<br>
<br>
         (status, blist) = semanage.semanage_bool_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list booleans&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if (len(blist) == 0):<br>
-            print &quot;No booleans found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(blist) == 0:<br>
+            print(&quot;No booleans found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for pbool in blist:<br>
             if self.verbose:<br>
-                print &quot;Boolean reference: &quot;, pbool<br>
+                print(&quot;Boolean reference: %s&quot; % pbool)<br>
             name = semanage.semanage_bool_get_<wbr>name(pbool)<br>
             value = semanage.semanage_bool_get_<wbr>value(pbool)<br>
-            print &quot;Boolean: &quot;, name, &quot; Value: &quot;, value<br>
+            print(&quot;Boolean: %s Value: %s&quot; % (name, value))<br>
             semanage.semanage_bool_free(<wbr>pbool)<br>
<br>
-    def test_abooleans(self,sh):<br>
-        print &quot;Testing active booleans...&quot;<br>
+    def test_abooleans(self, sh):<br>
+        print(&quot;Testing active booleans...&quot;)<br>
<br>
         (status, ablist) = semanage.semanage_bool_list_<wbr>active(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list active booleans&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if (len(ablist) == 0):<br>
-            print &quot;No active booleans found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(ablist) == 0:<br>
+            print(&quot;No active booleans found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for abool in ablist:<br>
             if self.verbose:<br>
-                print &quot;Active boolean reference: &quot;, abool<br>
+                print(&quot;Active boolean reference: %s&quot; % abool)<br>
             name = semanage.semanage_bool_get_<wbr>name(abool)<br>
             value = semanage.semanage_bool_get_<wbr>value(abool)<br>
-            print &quot;Active Boolean: &quot;, name, &quot; Value: &quot;, value<br>
+            print(&quot;Active Boolean: %s Value: %s&quot; % (name, value))<br>
             semanage.semanage_bool_free(<wbr>abool)<br>
<br>
-    def test_nodes(self,sh):<br>
-        print &quot;Testing network nodes...&quot;<br>
+    def test_nodes(self, sh):<br>
+        print(&quot;Testing network nodes...&quot;)<br>
<br>
         (status, nlist) = semanage.semanage_node_list(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not list network nodes&quot;)<br>
-        print &quot;Query status (commit number): &quot;, status<br>
+        print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        if (len(nlist) == 0):<br>
-            print &quot;No network nodes found!&quot;<br>
-            print &quot;This is not necessarily a test failure.&quot;<br>
+        if len(nlist) == 0:<br>
+            print(&quot;No network nodes found!&quot;)<br>
+            print(&quot;This is not necessarily a test failure.&quot;)<br>
             return<br>
         for node in nlist:<br>
             if self.verbose:<br>
-                print &quot;Network node reference: &quot;, node<br>
+                print(&quot;Network node reference: %s&quot; % node)<br>
<br>
             (status, addr) = semanage.semanage_node_get_<wbr>addr(sh, node)<br>
-            if status &lt; 0: addr = &quot;&quot;<br>
+            if status &lt; 0:<br>
+                addr = &quot;&quot;<br>
<br>
             (status, mask) = semanage.semanage_node_get_<wbr>mask(sh, node)<br>
-            if status &lt; 0: mask = &quot;&quot;<br>
+            if status &lt; 0:<br>
+                mask = &quot;&quot;<br>
<br>
             proto = semanage.semanage_node_get_<wbr>proto(node)<br>
             proto_str = semanage.semanage_node_get_<wbr>proto_str(proto)<br>
             con = semanage.semanage_node_get_<wbr>con(node)<br>
<br>
             (status, con_str) = semanage.semanage_context_to_<wbr>string(sh, con)<br>
-            if status &lt; 0: con_str = &quot;&quot;<br>
+            if status &lt; 0:<br>
+                con_str = &quot;&quot;<br>
<br>
-            print &quot;Network Node: &quot;, addr, &quot;/&quot;, mask, &quot; (&quot;, proto_str, &quot;)&quot;, &quot;Context: &quot;, con_str<br>
+            print(&quot;Network Node: %s/%s (%s) Context: %s&quot; % (addr, mask, proto_str, con_str))<br>
             semanage.semanage_node_free(<wbr>node)<br>
<br>
-    def test_writeuser(self,sh):<br>
-        print &quot;Testing user write...&quot;<br>
+    def test_writeuser(self, sh):<br>
+        print(&quot;Testing user write...&quot;)<br>
<br>
         (status, user) = semanage.semanage_user_create(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create user object&quot;)<br>
         if self.verbose:<br>
-            print &quot;User object created&quot;<br>
+            print(&quot;User object created&quot;)<br>
<br>
-        status = semanage.semanage_user_set_<wbr>name(sh,user, &quot;testPyUser&quot;)<br>
+        status = semanage.semanage_user_set_<wbr>name(sh, user, &quot;testPyUser&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set user name&quot;)<br>
         if self.verbose:<br>
-            print &quot;User name set: &quot;, semanage.semanage_user_get_<wbr>name(user)<br>
+            print(&quot;User name set: %s&quot; % semanage.semanage_user_get_<wbr>name(user))<br>
<br>
         status = semanage.semanage_user_add_<wbr>role(sh, user, &quot;user_r&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not add role&quot;)<br>
<br>
-        status = semanage.semanage_user_set_<wbr>prefix(sh,user, &quot;user&quot;)<br>
+        status = semanage.semanage_user_set_<wbr>prefix(sh, user, &quot;user&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set labeling prefix&quot;)<br>
         if self.verbose:<br>
-            print &quot;User prefix set: &quot;, semanage.semanage_user_get_<wbr>prefix(user)<br>
+            print(&quot;User prefix set: %s&quot; % semanage.semanage_user_get_<wbr>prefix(user))<br>
<br>
         status = semanage.semanage_user_set_<wbr>mlsrange(sh, user, &quot;s0&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set MLS range&quot;)<br>
         if self.verbose:<br>
-            print &quot;User mlsrange: &quot;, semanage.semanage_user_get_<wbr>mlsrange(user)<br>
+            print(&quot;User mlsrange: %s&quot; % semanage.semanage_user_get_<wbr>mlsrange(user))<br>
<br>
         status = semanage.semanage_user_set_<wbr>mlslevel(sh, user, &quot;s0&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set MLS level&quot;)<br>
         if self.verbose:<br>
-            print &quot;User mlslevel: &quot;, semanage.semanage_user_get_<wbr>mlslevel(user)<br>
+            print(&quot;User mlslevel: %s&quot; % semanage.semanage_user_get_<wbr>mlslevel(user))<br>
<br>
-        (status,key) = semanage.semanage_user_key_<wbr>extract(sh,user)<br>
+        (status, key) = semanage.semanage_user_key_<wbr>extract(sh, user)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract user key&quot;)<br>
         if self.verbose:<br>
-            print &quot;User key extracted: &quot;, key<br>
+            print(&quot;User key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_user_exists_<wbr>local(sh,key)<br>
+        (status, exists) = semanage.semanage_user_exists_<wbr>local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if user exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_user) = semanage.semanage_user_query_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old user&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction..&quot;<br>
+        print(&quot;Starting transaction..&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_user_modify_<wbr>local(sh,key,user)<br>
+        status = semanage.semanage_user_modify_<wbr>local(sh, key, user)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify user&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing user...&quot;<br>
+            print(&quot;Removing user...&quot;)<br>
             status = semanage.semanage_user_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test user&quot;)<br>
             if self.verbose:<br>
-                print &quot;User delete: &quot;, status<br>
+                print(&quot;User delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting user...&quot;<br>
+            print(&quot;Resetting user...&quot;)<br>
             status = semanage.semanage_user_modify_<wbr>local(sh, key, old_user)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test user&quot;)<br>
             if self.verbose:<br>
-                print &quot;User modify: &quot;, status<br>
+                print(&quot;User modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_user_key_<wbr>free(key)<br>
         semanage.semanage_user_free(<wbr>user)<br>
-        if exists: semanage.semanage_user_free(<wbr>old_user)<br>
+        if exists:<br>
+            semanage.semanage_user_free(<wbr>old_user)<br>
<br>
-    def test_writeseuser(self,sh):<br>
-        print &quot;Testing seuser write...&quot;<br>
+    def test_writeseuser(self, sh):<br>
+        print(&quot;Testing seuser write...&quot;)<br>
<br>
         (status, seuser) = semanage.semanage_seuser_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEUser object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEUser object created.&quot;<br>
+            print(&quot;SEUser object created.&quot;)<br>
<br>
-        status = semanage.semanage_seuser_set_<wbr>name(sh,seuser, &quot;testPySEUser&quot;)<br>
+        status = semanage.semanage_seuser_set_<wbr>name(sh, seuser, &quot;testPySEUser&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set name&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEUser name set: &quot;, semanage.semanage_seuser_get_<wbr>name(seuser)<br>
+            print(&quot;SEUser name set: %s&quot; % semanage.semanage_seuser_get_<wbr>name(seuser))<br>
<br>
         status = semanage.semanage_seuser_set_<wbr>sename(sh, seuser, &quot;root&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set sename&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEUser seuser: &quot;, semanage.semanage_seuser_get_<wbr>sename(seuser)<br>
+            print(&quot;SEUser seuser: %s&quot; % semanage.semanage_seuser_get_<wbr>sename(seuser))<br>
<br>
         status = semanage.semanage_seuser_set_<wbr>mlsrange(sh, seuser, &quot;s0:c0.c255&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set MLS range&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEUser mlsrange: &quot;, semanage.semanage_seuser_get_<wbr>mlsrange(seuser)<br>
+            print(&quot;SEUser mlsrange: %s&quot; % semanage.semanage_seuser_get_<wbr>mlsrange(seuser))<br>
<br>
-        (status,key) = semanage.semanage_seuser_key_<wbr>extract(sh,seuser)<br>
+        (status, key) = semanage.semanage_seuser_key_<wbr>extract(sh, seuser)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SEUser key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEUser key extracted: &quot;, key<br>
+            print(&quot;SEUser key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_seuser_<wbr>exists_local(sh,key)<br>
+        (status, exists) = semanage.semanage_seuser_<wbr>exists_local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SEUser exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_seuser) = semanage.semanage_seuser_<wbr>query_local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SEUser&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_seuser_<wbr>modify_local(sh,key,seuser)<br>
+        status = semanage.semanage_seuser_<wbr>modify_local(sh, key, seuser)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SEUser&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing seuser...&quot;<br>
+            print(&quot;Removing seuser...&quot;)<br>
             status = semanage.semanage_seuser_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SEUser&quot;)<br>
             if self.verbose:<br>
-                print &quot;Seuser delete: &quot;, status<br>
+                print(&quot;Seuser delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting seuser...&quot;<br>
+            print(&quot;Resetting seuser...&quot;)<br>
             status = semanage.semanage_seuser_<wbr>modify_local(sh, key, old_seuser)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test SEUser&quot;)<br>
             if self.verbose:<br>
-                print &quot;Seuser modify: &quot;, status<br>
+                print(&quot;Seuser modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_seuser_key_<wbr>free(key)<br>
         semanage.semanage_seuser_free(<wbr>seuser)<br>
         if exists:<br>
             semanage.semanage_seuser_free(<wbr>old_seuser)<br>
<br>
-    def test_writeport(self,sh):<br>
-        print &quot;Testing port write...&quot;<br>
+    def test_writeport(self, sh):<br>
+        print(&quot;Testing port write...&quot;)<br>
<br>
         (status, port) = semanage.semanage_port_create(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEPort object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEPort object created.&quot;<br>
+            print(&quot;SEPort object created.&quot;)<br>
<br>
-        semanage.semanage_port_set_<wbr>range(port,150,200)<br>
+        semanage.semanage_port_set_<wbr>range(port, 150, 200)<br>
         low = semanage.semanage_port_get_<wbr>low(port)<br>
         high = semanage.semanage_port_get_<wbr>high(port)<br>
         if self.verbose:<br>
-            print &quot;SEPort range set: &quot;, low, &quot;-&quot;, high<br>
+            print(&quot;SEPort range set: %s-%s&quot; % (low, high))<br>
<br>
         semanage.semanage_port_set_<wbr>proto(port, semanage.SEMANAGE_PROTO_TCP)<br>
         if self.verbose:<br>
-            print &quot;SEPort protocol set: &quot;, semanage.semanage_port_get_<wbr>proto_str(semanage.SEMANAGE_<wbr>PROTO_TCP)<br>
+            print(&quot;SEPort protocol set: %s&quot; % semanage.semanage_port_get_<wbr>proto_str(semanage.SEMANAGE_<wbr>PROTO_TCP))<br>
<br>
         (status, con) = semanage.semanage_context_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEContext object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext object created (for port).&quot;<br>
+            print(&quot;SEContext object created (for port).&quot;)<br>
<br>
         status = semanage.semanage_context_set_<wbr>user(sh, con, &quot;system_u&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context user&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext user: &quot;, semanage.semanage_context_get_<wbr>user(con)<br>
+            print(&quot;SEContext user: %s&quot; % semanage.semanage_context_get_<wbr>user(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>role(sh, con, &quot;object_r&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context role&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext role: &quot;, semanage.semanage_context_get_<wbr>role(con)<br>
+            print(&quot;SEContext role: %s&quot; % semanage.semanage_context_get_<wbr>role(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>type(sh, con, &quot;http_port_t&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context type&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext type: &quot;, semanage.semanage_context_get_<wbr>type(con)<br>
+            print(&quot;SEContext type: %s&quot; % semanage.semanage_context_get_<wbr>type(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>mls(sh, con, &quot;s0:c0.c255&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context MLS fields&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext mls: &quot;, semanage.semanage_context_get_<wbr>mls(con)<br>
+            print(&quot;SEContext mls: %s&quot; % semanage.semanage_context_get_<wbr>mls(con))<br>
<br>
         status = semanage.semanage_port_set_<wbr>con(sh, port, con)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SEPort context&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEPort context set: &quot;, con<br>
+            print(&quot;SEPort context set: %s&quot; % con)<br>
<br>
-        (status,key) = semanage.semanage_port_key_<wbr>extract(sh,port)<br>
+        (status, key) = semanage.semanage_port_key_<wbr>extract(sh, port)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SEPort key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEPort key extracted: &quot;, key<br>
+            print(&quot;SEPort key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_port_exists_<wbr>local(sh,key)<br>
+        (status, exists) = semanage.semanage_port_exists_<wbr>local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SEPort exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_port) = semanage.semanage_port_query_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SEPort&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_port_modify_<wbr>local(sh,key,port)<br>
+        status = semanage.semanage_port_modify_<wbr>local(sh, key, port)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SEPort&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing port range...&quot;<br>
+            print(&quot;Removing port range...&quot;)<br>
             status = semanage.semanage_port_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SEPort&quot;)<br>
             if self.verbose:<br>
-                print &quot;Port range delete: &quot;, status<br>
+                print(&quot;Port range delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting port range...&quot;<br>
+            print(&quot;Resetting port range...&quot;)<br>
             status = semanage.semanage_port_modify_<wbr>local(sh, key, old_port)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test SEPort&quot;)<br>
             if self.verbose:<br>
-                print &quot;Port range modify: &quot;, status<br>
+                print(&quot;Port range modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_context_<wbr>free(con)<br>
         semanage.semanage_port_key_<wbr>free(key)<br>
@@ -648,118 +681,118 @@ class Tests:<br>
         if exists:<br>
             semanage.semanage_port_free(<wbr>old_port)<br>
<br>
-    def test_writefcontext(self,sh):<br>
-        print &quot;Testing file context write...&quot;<br>
+    def test_writefcontext(self, sh):<br>
+        print(&quot;Testing file context write...&quot;)<br>
<br>
         (status, fcon) = semanage.semanage_fcontext_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEFcontext object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEFcontext object created.&quot;<br>
+            print(&quot;SEFcontext object created.&quot;)<br>
<br>
         status = semanage.semanage_fcontext_<wbr>set_expr(sh, fcon, &quot;/test/fcontext(/.*)?&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set expression&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEFContext expr set: &quot;, semanage.semanage_fcontext_<wbr>get_expr(fcon)<br>
+            print(&quot;SEFContext expr set: %s&quot; % semanage.semanage_fcontext_<wbr>get_expr(fcon))<br>
<br>
         semanage.semanage_fcontext_<wbr>set_type(fcon, semanage.SEMANAGE_FCONTEXT_<wbr>REG)<br>
         if self.verbose:<br>
             ftype = semanage.semanage_fcontext_<wbr>get_type(fcon)<br>
-            print &quot;SEFContext type set: &quot;, semanage.semanage_fcontext_<wbr>get_type_str(ftype)<br>
+            print(&quot;SEFContext type set: %s&quot; % semanage.semanage_fcontext_<wbr>get_type_str(ftype))<br>
<br>
         (status, con) = semanage.semanage_context_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEContext object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext object created (for file context).&quot;<br>
+            print(&quot;SEContext object created (for file context).&quot;)<br>
<br>
         status = semanage.semanage_context_set_<wbr>user(sh, con, &quot;system_u&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context user&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext user: &quot;, semanage.semanage_context_get_<wbr>user(con)<br>
+            print(&quot;SEContext user: %s&quot; % semanage.semanage_context_get_<wbr>user(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>role(sh, con, &quot;object_r&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context role&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext role: &quot;, semanage.semanage_context_get_<wbr>role(con)<br>
+            print(&quot;SEContext role: %s&quot; % semanage.semanage_context_get_<wbr>role(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>type(sh, con, &quot;default_t&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context type&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext type: &quot;, semanage.semanage_context_get_<wbr>type(con)<br>
+            print(&quot;SEContext type: %s&quot; % semanage.semanage_context_get_<wbr>type(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>mls(sh, con, &quot;s0:c0.c255&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context MLS fields&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext mls: &quot;, semanage.semanage_context_get_<wbr>mls(con)<br>
+            print(&quot;SEContext mls: %s&quot; % semanage.semanage_context_get_<wbr>mls(con))<br>
<br>
         status = semanage.semanage_fcontext_<wbr>set_con(sh, fcon, con)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SEFcontext context&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEFcontext context set: &quot;, con<br>
+            print(&quot;SEFcontext context set: %s&quot; % con)<br>
<br>
-        (status,key) = semanage.semanage_fcontext_<wbr>key_extract(sh,fcon)<br>
+        (status, key) = semanage.semanage_fcontext_<wbr>key_extract(sh, fcon)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SEFcontext key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEFcontext key extracted: &quot;, key<br>
+            print(&quot;SEFcontext key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_fcontext_<wbr>exists_local(sh,key)<br>
+        (status, exists) = semanage.semanage_fcontext_<wbr>exists_local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SEFcontext exists&quot;)<br>
<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
         if exists:<br>
             (status, old_fcontext) = semanage.semanage_fcontext_<wbr>query_local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SEFcontext&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_fcontext_<wbr>modify_local(sh,key,fcon)<br>
+        status = semanage.semanage_fcontext_<wbr>modify_local(sh, key, fcon)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SEFcontext&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing file context...&quot;<br>
+            print(&quot;Removing file context...&quot;)<br>
             status = semanage.semanage_fcontext_<wbr>del_local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SEFcontext&quot;)<br>
             if self.verbose:<br>
-                print &quot;File context delete: &quot;, status<br>
+                print(&quot;File context delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting file context...&quot;<br>
+            print(&quot;Resetting file context...&quot;)<br>
             status = semanage.semanage_fcontext_<wbr>modify_local(sh, key, old_fcontext)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test FContext&quot;)<br>
             if self.verbose:<br>
-                print &quot;File context modify: &quot;, status<br>
+                print(&quot;File context modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_context_<wbr>free(con)<br>
         semanage.semanage_fcontext_<wbr>key_free(key)<br>
@@ -767,119 +800,119 @@ class Tests:<br>
         if exists:<br>
             semanage.semanage_fcontext_<wbr>free(old_fcontext)<br>
<br>
-    def test_writeinterface(self,sh):<br>
-        print &quot;Testing network interface write...&quot;<br>
+    def test_writeinterface(self, sh):<br>
+        print(&quot;Testing network interface write...&quot;)<br>
<br>
         (status, iface) = semanage.semanage_iface_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEIface object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEIface object created.&quot;<br>
+            print(&quot;SEIface object created.&quot;)<br>
<br>
         status = semanage.semanage_iface_set_<wbr>name(sh, iface, &quot;test_iface&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SEIface name&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEIface name set: &quot;, semanage.semanage_iface_get_<wbr>name(iface)<br>
+            print(&quot;SEIface name set: %s&quot; % semanage.semanage_iface_get_<wbr>name(iface))<br>
<br>
         (status, con) = semanage.semanage_context_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEContext object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext object created (for network interface)&quot;<br>
+            print(&quot;SEContext object created (for network interface)&quot;)<br>
<br>
         status = semanage.semanage_context_set_<wbr>user(sh, con, &quot;system_u&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set interface context user&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext user: &quot;, semanage.semanage_context_get_<wbr>user(con)<br>
+            print(&quot;SEContext user: %s&quot; % semanage.semanage_context_get_<wbr>user(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>role(sh, con, &quot;object_r&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set interface context role&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext role: &quot;, semanage.semanage_context_get_<wbr>role(con)<br>
+            print(&quot;SEContext role: %s&quot; % semanage.semanage_context_get_<wbr>role(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>type(sh, con, &quot;default_t&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set interface context type&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext type: &quot;, semanage.semanage_context_get_<wbr>type(con)<br>
+            print(&quot;SEContext type: %s&quot; % semanage.semanage_context_get_<wbr>type(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>mls(sh, con, &quot;s0:c0.c255&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set interface context MLS fields&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext mls: &quot;, semanage.semanage_context_get_<wbr>mls(con)<br>
+            print(&quot;SEContext mls: %s&quot; % semanage.semanage_context_get_<wbr>mls(con))<br>
<br>
         status = semanage.semanage_iface_set_<wbr>ifcon(sh, iface, con)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SEIface interface context&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEIface interface context set: &quot;, con<br>
+            print(&quot;SEIface interface context set: %s&quot; % con)<br>
<br>
         status = semanage.semanage_iface_set_<wbr>msgcon(sh, iface, con)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SEIface message context&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEIface message context set: &quot;, con<br>
+            print(&quot;SEIface message context set: %s&quot; % con)<br>
<br>
-        (status,key) = semanage.semanage_iface_key_<wbr>extract(sh,iface)<br>
+        (status, key) = semanage.semanage_iface_key_<wbr>extract(sh, iface)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SEIface key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEIface key extracted: &quot;, key<br>
+            print(&quot;SEIface key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_iface_<wbr>exists_local(sh,key)<br>
+        (status, exists) = semanage.semanage_iface_<wbr>exists_local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SEIface exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_iface) = semanage.semanage_iface_query_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SEIface&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not begin semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_iface_<wbr>modify_local(sh,key,iface)<br>
+        status = semanage.semanage_iface_<wbr>modify_local(sh, key, iface)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SEIface&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not begin semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing interface...&quot;<br>
+            print(&quot;Removing interface...&quot;)<br>
             status = semanage.semanage_iface_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SEIface&quot;)<br>
             if self.verbose:<br>
-                print &quot;Interface delete: &quot;, status<br>
+                print(&quot;Interface delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting interface...&quot;<br>
+            print(&quot;Resetting interface...&quot;)<br>
             status = semanage.semanage_iface_<wbr>modify_local(sh, key, old_iface)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test SEIface&quot;)<br>
             if self.verbose:<br>
-                print &quot;Interface modify: &quot;, status<br>
+                print(&quot;Interface modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_context_<wbr>free(con)<br>
         semanage.semanage_iface_key_<wbr>free(key)<br>
@@ -887,45 +920,45 @@ class Tests:<br>
         if exists:<br>
             semanage.semanage_iface_free(<wbr>old_iface)<br>
<br>
-    def test_writeboolean(self,sh):<br>
-        print &quot;Testing boolean write...&quot;<br>
+    def test_writeboolean(self, sh):<br>
+        print(&quot;Testing boolean write...&quot;)<br>
<br>
         (status, pbool) = semanage.semanage_bool_create(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEBool object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool object created.&quot;<br>
+            print(&quot;SEBool object created.&quot;)<br>
<br>
         status = semanage.semanage_bool_set_<wbr>name(sh, pbool, &quot;allow_execmem&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set name&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool name set: &quot;, semanage.semanage_bool_get_<wbr>name(pbool)<br>
+            print(&quot;SEBool name set: %s&quot; % semanage.semanage_bool_get_<wbr>name(pbool))<br>
<br>
         semanage.semanage_bool_set_<wbr>value(pbool, 0)<br>
         if self.verbose:<br>
-            print &quot;SEbool value set: &quot;, semanage.semanage_bool_get_<wbr>value(pbool)<br>
+            print(&quot;SEbool value set: %s&quot; % semanage.semanage_bool_get_<wbr>value(pbool))<br>
<br>
-        (status,key) = semanage.semanage_bool_key_<wbr>extract(sh, pbool)<br>
+        (status, key) = semanage.semanage_bool_key_<wbr>extract(sh, pbool)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SEBool key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool key extracted: &quot;, key<br>
+            print(&quot;SEBool key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_bool_exists_<wbr>local(sh,key)<br>
+        (status, exists) = semanage.semanage_bool_exists_<wbr>local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SEBool exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_bool) = semanage.semanage_bool_query_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SEBool&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
@@ -938,110 +971,110 @@ class Tests:<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing boolean...&quot;<br>
+            print(&quot;Removing boolean...&quot;)<br>
             status = semanage.semanage_bool_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SEBool&quot;)<br>
             if self.verbose:<br>
-                print &quot;Boolean delete: &quot;, status<br>
+                print(&quot;Boolean delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting boolean...&quot;<br>
+            print(&quot;Resetting boolean...&quot;)<br>
             status = semanage.semanage_bool_modify_<wbr>local(sh, key, old_bool)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test SEBool&quot;)<br>
             if self.verbose:<br>
-                print &quot;Boolean modify: &quot;, status<br>
+                print(&quot;Boolean modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_bool_key_<wbr>free(key)<br>
         semanage.semanage_bool_free(<wbr>pbool)<br>
-        if exists: semanage.semanage_bool_free(<wbr>old_bool)<br>
+        if exists:<br>
+            semanage.semanage_bool_free(<wbr>old_bool)<br>
<br>
-    def test_writeaboolean(self,sh):<br>
-        print &quot;Testing active boolean write...&quot;<br>
+    def test_writeaboolean(self, sh):<br>
+        print(&quot;Testing active boolean write...&quot;)<br>
<br>
         (status, key) = semanage.semanage_bool_key_<wbr>create(sh, &quot;allow_execmem&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEBool key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool key created: &quot;, key<br>
+            print(&quot;SEBool key created: %s&quot; % key)<br>
<br>
         (status, old_bool) = semanage.semanage_bool_query_<wbr>active(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not query old SEBool&quot;)<br>
         if self.verbose:<br>
-            print &quot;Query status (commit number): &quot;, status<br>
+            print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
         (status, abool) = semanage.semanage_bool_create(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEBool object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool object created.&quot;<br>
+            print(&quot;SEBool object created.&quot;)<br>
<br>
         status = semanage.semanage_bool_set_<wbr>name(sh, abool, &quot;allow_execmem&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set name&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool name set: &quot;, semanage.semanage_bool_get_<wbr>name(abool)<br>
+            print(&quot;SEBool name set: %s&quot; % semanage.semanage_bool_get_<wbr>name(abool))<br>
<br>
         semanage.semanage_bool_set_<wbr>value(abool, 0)<br>
         if self.verbose:<br>
-            print &quot;SEbool value set: &quot;, semanage.semanage_bool_get_<wbr>value(abool)<br>
+            print(&quot;SEbool value set: %s&quot; % semanage.semanage_bool_get_<wbr>value(abool))<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_bool_set_<wbr>active(sh,key,abool)<br>
+        status = semanage.semanage_bool_set_<wbr>active(sh, key, abool)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SEBool&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
-        print &quot;Resetting old active boolean...&quot;<br>
+        print(&quot;Resetting old active boolean...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_bool_set_<wbr>active(sh, key,old_bool)<br>
+        status = semanage.semanage_bool_set_<wbr>active(sh, key, old_bool)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not reset test SEBool&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEBool active reset: &quot;, status<br>
+            print(&quot;SEBool active reset: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_bool_key_<wbr>free(key)<br>
         semanage.semanage_bool_free(<wbr>abool)<br>
         semanage.semanage_bool_free(<wbr>old_bool)<br>
<br>
-<br>
-    def test_writenode(self,sh):<br>
-        print &quot;Testing network node write...&quot;<br>
+    def test_writenode(self, sh):<br>
+        print(&quot;Testing network node write...&quot;)<br>
<br>
         (status, node) = semanage.semanage_node_create(<wbr>sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SENode object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SENode object created.&quot;<br>
+            print(&quot;SENode object created.&quot;)<br>
<br>
         status = semanage.semanage_node_set_<wbr>addr(sh, node, semanage.SEMANAGE_PROTO_IP6, &quot;ffee:dddd::bbbb&quot;)<br>
         if status &lt; 0:<br>
@@ -1053,100 +1086,100 @@ class Tests:<br>
<br>
         semanage.semanage_node_set_<wbr>proto(node, semanage.SEMANAGE_PROTO_IP6)<br>
         if self.verbose:<br>
-            print &quot;SENode protocol set: &quot;, semanage.semanage_node_get_<wbr>proto_str(semanage.SEMANAGE_<wbr>PROTO_IP6)<br>
+            print(&quot;SENode protocol set: %s&quot; % semanage.semanage_node_get_<wbr>proto_str(semanage.SEMANAGE_<wbr>PROTO_IP6))<br>
<br>
         (status, con) = semanage.semanage_context_<wbr>create(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not create SEContext object&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext object created (for node).&quot;<br>
+            print(&quot;SEContext object created (for node).&quot;)<br>
<br>
         status = semanage.semanage_context_set_<wbr>user(sh, con, &quot;system_u&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context user&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext user: &quot;, semanage.semanage_context_get_<wbr>user(con)<br>
+            print(&quot;SEContext user: %s&quot; % semanage.semanage_context_get_<wbr>user(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>role(sh, con, &quot;object_r&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context role&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext role: &quot;, semanage.semanage_context_get_<wbr>role(con)<br>
+            print(&quot;SEContext role: %s&quot; % semanage.semanage_context_get_<wbr>role(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>type(sh, con, &quot;lo_node_t&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context type&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext type: &quot;, semanage.semanage_context_get_<wbr>type(con)<br>
+            print(&quot;SEContext type: %s&quot; % semanage.semanage_context_get_<wbr>type(con))<br>
<br>
         status = semanage.semanage_context_set_<wbr>mls(sh, con, &quot;s0:c0.c255&quot;)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set context MLS fields&quot;)<br>
         if self.verbose:<br>
-            print &quot;SEContext mls: &quot;, semanage.semanage_context_get_<wbr>mls(con)<br>
+            print(&quot;SEContext mls: %s&quot; % semanage.semanage_context_get_<wbr>mls(con))<br>
<br>
         status = semanage.semanage_node_set_<wbr>con(sh, node, con)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not set SENode context&quot;)<br>
         if self.verbose:<br>
-            print &quot;SENode context set: &quot;, con<br>
+            print(&quot;SENode context set: %s&quot; % con)<br>
<br>
-        (status,key) = semanage.semanage_node_key_<wbr>extract(sh, node)<br>
+        (status, key) = semanage.semanage_node_key_<wbr>extract(sh, node)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not extract SENode key&quot;)<br>
         if self.verbose:<br>
-            print &quot;SENode key extracted: &quot;, key<br>
+            print(&quot;SENode key extracted: %s&quot; % key)<br>
<br>
-        (status,exists) = semanage.semanage_node_exists_<wbr>local(sh,key)<br>
+        (status, exists) = semanage.semanage_node_exists_<wbr>local(sh, key)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not check if SENode exists&quot;)<br>
         if self.verbose:<br>
-            print &quot;Exists status (commit number): &quot;, status<br>
+            print(&quot;Exists status (commit number): %s&quot; % status)<br>
<br>
         if exists:<br>
             (status, old_node) = semanage.semanage_node_query_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not query old SENode&quot;)<br>
             if self.verbose:<br>
-                print &quot;Query status (commit number): &quot;, status<br>
+                print(&quot;Query status (commit number): %s&quot; % status)<br>
<br>
-        print &quot;Starting transaction...&quot;<br>
+        print(&quot;Starting transaction...&quot;)<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
-        status = semanage.semanage_node_modify_<wbr>local(sh,key, node)<br>
+        status = semanage.semanage_node_modify_<wbr>local(sh, key, node)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not modify SENode&quot;)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit test transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         status = semanage.semanage_begin_<wbr>transaction(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not start semanage transaction&quot;)<br>
<br>
         if not exists:<br>
-            print &quot;Removing network node...&quot;<br>
+            print(&quot;Removing network node...&quot;)<br>
             status = semanage.semanage_node_del_<wbr>local(sh, key)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not delete test SENode&quot;)<br>
             if self.verbose:<br>
-                print &quot;Network node delete: &quot;, status<br>
+                print(&quot;Network node delete: %s&quot; % status)<br>
         else:<br>
-            print &quot;Resetting network node...&quot;<br>
+            print(&quot;Resetting network node...&quot;)<br>
             status = semanage.semanage_node_modify_<wbr>local(sh, key, old_node)<br>
             if status &lt; 0:<br>
                 raise Error(&quot;Could not reset test SENode&quot;)<br>
             if self.verbose:<br>
-                print &quot;Network node modify: &quot;, status<br>
+                print(&quot;Network node modify: %s&quot; % status)<br>
<br>
         status = semanage.semanage_commit(sh)<br>
         if status &lt; 0:<br>
             raise Error(&quot;Could not commit reset transaction&quot;)<br>
-        print &quot;Commit status (transaction number): &quot;, status<br>
+        print(&quot;Commit status (transaction number): %s&quot; % status)<br>
<br>
         semanage.semanage_context_<wbr>free(con)<br>
         semanage.semanage_node_key_<wbr>free(key)<br>
@@ -1154,17 +1187,41 @@ class Tests:<br>
         if exists:<br>
             semanage.semanage_node_free(<wbr>old_node)<br>
<br>
+<br>
 def main(argv=None):<br>
     if argv is None:<br>
         argv = sys.argv<br>
     try:<br>
         try:<br>
-            opts, args = getopt.getopt(argv[1:], &quot;hvmuspfibcUSPFIBCanN&quot;, [&quot;help&quot;, &quot;verbose&quot;, &quot;modules&quot;, &quot;users&quot;, &quot;seusers&quot;, &quot;ports&quot;, &quot;file contexts&quot;, &quot;network interfaces&quot;, &quot;booleans&quot;, &quot;active booleans&quot;, &quot;network nodes&quot;, &quot;writeuser&quot;, &quot;writeseuser&quot;, &quot;writeport&quot;, &quot;writefcontext&quot;, &quot;writeinterface&quot;, &quot;writeboolean&quot;, &quot;writeaboolean&quot;, &quot;writenode&quot;, &quot;all&quot;])<br>
+            opts, args = getopt.getopt(<br>
+                argv[1:], &quot;hvmuspfibcUSPFIBCanN&quot;,<br>
+                [<br>
+                    &quot;help&quot;,<br>
+                    &quot;verbose&quot;,<br>
+                    &quot;modules&quot;,<br>
+                    &quot;users&quot;,<br>
+                    &quot;seusers&quot;,<br>
+                    &quot;ports&quot;,<br>
+                    &quot;file contexts&quot;,<br>
+                    &quot;network interfaces&quot;,<br>
+                    &quot;booleans&quot;,<br>
+                    &quot;active booleans&quot;,<br>
+                    &quot;network nodes&quot;,<br>
+                    &quot;writeuser&quot;,<br>
+                    &quot;writeseuser&quot;,<br>
+                    &quot;writeport&quot;,<br>
+                    &quot;writefcontext&quot;,<br>
+                    &quot;writeinterface&quot;,<br>
+                    &quot;writeboolean&quot;,<br>
+                    &quot;writeaboolean&quot;,<br>
+                    &quot;writenode&quot;,<br>
+                    &quot;all&quot;,<br>
+                ])<br>
             tests = Tests()<br>
             for o, a in opts:<br>
                 if o == &quot;-v&quot;:<br>
                     tests.verbose = True<br>
-                    print &quot;Verbose output selected.&quot;<br>
+                    print(&quot;Verbose output selected.&quot;)<br>
                 if o == &quot;-a&quot;:<br>
                     tests.all = True<br>
                 if o == &quot;-u&quot;:<br>
@@ -1207,12 +1264,12 @@ def main(argv=None):<br>
             if not tests.selected():<br>
                 raise Usage(&quot;Please select a valid test.&quot;)<br>
<br>
-        except getopt.error, msg:<br>
+        except getopt.error as msg:<br>
             raise Usage(msg)<br>
<br>
-        sh=semanage.semanage_handle_<wbr>create()<br>
+        sh = semanage.semanage_handle_<wbr>create()<br>
<br>
-        if (semanage.semanage_is_managed(<wbr>sh) != 1):<br>
+        if semanage.semanage_is_managed(<wbr>sh) != 1:<br>
             raise Status(&quot;Unmanaged!&quot;)<br>
<br>
         status = semanage.semanage_connect(sh)<br>
@@ -1227,14 +1284,15 @@ def main(argv=None):<br>
<br>
         semanage.semanage_handle_<wbr>destroy(sh)<br>
<br>
-    except Usage, err:<br>
-        print &gt;&gt;sys.stderr, err.msg<br>
-    except Status, err:<br>
-        print &gt;&gt;sys.stderr, err.msg<br>
-    except Error, err:<br>
-        print &gt;&gt;sys.stderr, err.msg<br>
+    except Usage as err:<br>
+        print(err.msg, file=sys.stderr)<br>
+    except Status as err:<br>
+        print(err.msg, file=sys.stderr)<br>
+    except Error as err:<br>
+        print(err.msg, file=sys.stderr)<br>
<br>
     return 2<br>
<br>
+<br>
 if __name__ == &quot;__main__&quot;:<br>
     sys.exit(main())<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.18.0<br>
<br>
______________________________<wbr>_________________<br>
Selinux mailing list<br>
<a href="mailto:Selinux@tycho.nsa.gov">Selinux@tycho.nsa.gov</a><br>
To unsubscribe, send email to <a href="mailto:Selinux-leave@tycho.nsa.gov">Selinux-leave@tycho.nsa.gov</a>.<br>
To get help, send an email containing &quot;help&quot; to <a href="mailto:Selinux-request@tycho.nsa.gov">Selinux-request@tycho.nsa.gov</a>.<br>
</font></span></blockquote></div><br></div>
Nicolas Iooss Aug. 19, 2018, 8:53 a.m. UTC | #2
On Sat, Aug 18, 2018 at 8:43 PM William Roberts
<bill.c.roberts@gmail.com> wrote:
>
> Im assuming with your attention on the python side of the house we're going to see a lot of
> formatting change patches heading the mailing list. I don't have any problems with them.
>
> Are you using some formatter for these, if so which one is it? Is it flake8 still?

I did not use a "formatter" here (I do not consider 2to3 to be a
formatter). I only looked at pep8 and pylint warnings and modified the
code with search-and-replace commands on the file (using regular
expressions). I usually do not like large changes which reindent a
file or add spaces, because it increases the amount of work needed to
backport a later bugfix to released versions, for package maintainers.
Nevertheless when the modified file is not used "in production" (only
when debugging issues or when testing things), as is the case here, I
prefer cleaning up the code.

> We should probably document that patches should be sent formatted, ie if a patch introduces a delta
> after applying the patch and running <formatter>, it's an issue.

I upstreamed scripts/run-flake8 with this in mind ;) (and this is why
I added it to Travis-CI tests too). And one of the reasons that led me
to disable many warnings was to preserve some flexibility in order not
to make submitting patches too hard for new contributors.

In the next days, I plan to send some more patches to fix some
formatting issues I consider important (for example removing
semicolons at the end of Python statements), but I will not send
patches which modify the spaces around operators in files where there
could be bugs which would need to be backported.

As always, thanks for your review!
Nicolas

PS: I am also playing with clang's static analyzer and I am currently
testing a CircleCI configuration which runs it on every push (using
scripts/run-scan-build) and publishes the results as HTML build
artifacts. I will submit a proper patch for this once it is stable
enough and once all the most important issues reported by the analyzer
are fixed.
William Roberts Aug. 19, 2018, 6:01 p.m. UTC | #3
On Sun, Aug 19, 2018 at 1:53 AM, Nicolas Iooss <nicolas.iooss@m4x.org>
wrote:

> On Sat, Aug 18, 2018 at 8:43 PM William Roberts
> <bill.c.roberts@gmail.com> wrote:
> >
> > Im assuming with your attention on the python side of the house we're
> going to see a lot of
> > formatting change patches heading the mailing list. I don't have any
> problems with them.
> >
> > Are you using some formatter for these, if so which one is it? Is it
> flake8 still?
>
> I did not use a "formatter" here (I do not consider 2to3 to be a
> formatter). I only looked at pep8 and pylint warnings and modified the
> code with search-and-replace commands on the file (using regular
> expressions). I usually do not like large changes which reindent a
> file or add spaces, because it increases the amount of work needed to
> backport a later bugfix to released versions, for package maintainers.
> Nevertheless when the modified file is not used "in production" (only
> when debugging issues or when testing things), as is the case here, I
> prefer cleaning up the code.
>

This seems reasonable. Clean up flake8 errors while ensuring we don't
introduce
new ones.


> > We should probably document that patches should be sent formatted, ie if
> a patch introduces a delta
> > after applying the patch and running <formatter>, it's an issue.
>
> I upstreamed scripts/run-flake8 with this in mind ;) (and this is why
> I added it to Travis-CI tests too). And one of the reasons that led me
> to disable many warnings was to preserve some flexibility in order not
> to make submitting patches too hard for new contributors.
>
> In the next days, I plan to send some more patches to fix some
> formatting issues I consider important (for example removing
> semicolons at the end of Python statements), but I will not send
> patches which modify the spaces around operators in files where there
> could be bugs which would need to be backported.
>

When I review these I am literally just applying the patches, running the
test and
making sure that flake8 errors go down. I'm thinking for these, since you
have
we have this integrated in the build, send the patches, but if no one
responds
id be ok with you applying them. Albeit this not 100% in line with agreed
practices
these patches are just mostly large noise changes. Does anyone rebuke this?


>
> As always, thanks for your review!
> Nicolas
>
> PS: I am also playing with clang's static analyzer and I am currently
> testing a CircleCI configuration which runs it on every push (using
> scripts/run-scan-build) and publishes the results as HTML build
> artifacts. I will submit a proper patch for this once it is stable
> enough and once all the most important issues reported by the analyzer
> are fixed.
>

Oh the HTML will be interesting. I have scan-build integrated in my Travis
for other projects. Its nice.
<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Aug 19, 2018 at 1:53 AM, Nicolas Iooss <span dir="ltr">&lt;<a href="mailto:nicolas.iooss@m4x.org" target="_blank">nicolas.iooss@m4x.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Sat, Aug 18, 2018 at 8:43 PM William Roberts<br>
&lt;<a href="mailto:bill.c.roberts@gmail.com">bill.c.roberts@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Im assuming with your attention on the python side of the house we&#39;re going to see a lot of<br>
&gt; formatting change patches heading the mailing list. I don&#39;t have any problems with them.<br>
&gt;<br>
&gt; Are you using some formatter for these, if so which one is it? Is it flake8 still?<br>
<br>
</span>I did not use a &quot;formatter&quot; here (I do not consider 2to3 to be a<br>
formatter). I only looked at pep8 and pylint warnings and modified the<br>
code with search-and-replace commands on the file (using regular<br>
expressions). I usually do not like large changes which reindent a<br>
file or add spaces, because it increases the amount of work needed to<br>
backport a later bugfix to released versions, for package maintainers.<br>
Nevertheless when the modified file is not used &quot;in production&quot; (only<br>
when debugging issues or when testing things), as is the case here, I<br>
prefer cleaning up the code.<br></blockquote><div><br></div><div>This seems reasonable. Clean up flake8 errors while ensuring we don&#39;t introduce</div><div>new ones.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
&gt; We should probably document that patches should be sent formatted, ie if a patch introduces a delta<br>
&gt; after applying the patch and running &lt;formatter&gt;, it&#39;s an issue.<br>
<br>
</span>I upstreamed scripts/run-flake8 with this in mind ;) (and this is why<br>
I added it to Travis-CI tests too). And one of the reasons that led me<br>
to disable many warnings was to preserve some flexibility in order not<br>
to make submitting patches too hard for new contributors.<br>
<br>
In the next days, I plan to send some more patches to fix some<br>
formatting issues I consider important (for example removing<br>
semicolons at the end of Python statements), but I will not send<br>
patches which modify the spaces around operators in files where there<br>
could be bugs which would need to be backported.<br></blockquote><div><br></div><div>When I review these I am literally just applying the patches, running the test and</div><div>making sure that flake8 errors go down. I&#39;m thinking for these, since you have</div><div>we have this integrated in the build, send the patches, but if no one responds</div><div>id be ok with you applying them. Albeit this not 100% in line with agreed practices</div><div>these patches are just mostly large noise changes. Does anyone rebuke this?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
As always, thanks for your review!<br>
Nicolas<br>
<br>
PS: I am also playing with clang&#39;s static analyzer and I am currently<br>
testing a CircleCI configuration which runs it on every push (using<br>
scripts/run-scan-build) and publishes the results as HTML build<br>
artifacts. I will submit a proper patch for this once it is stable<br>
enough and once all the most important issues reported by the analyzer<br>
are fixed.<br></blockquote><div><br></div><div>Oh the HTML will be interesting. I have scan-build integrated in my Travis</div><div>for other projects. Its nice. </div></div><br></div></div>
diff mbox series

Patch

diff --git a/libsemanage/src/pywrap-test.py b/libsemanage/src/pywrap-test.py
index 326034947aa5..5ac48f408380 100644
--- a/libsemanage/src/pywrap-test.py
+++ b/libsemanage/src/pywrap-test.py
@@ -1,8 +1,11 @@ 
-#!/usr/bin/python
+#!/usr/bin/env python
+from __future__ import print_function
+
 import sys
 import getopt
 import semanage
 
+
 usage = "\
 Choose one of the following tests:\n\
 -m for modules\n\
@@ -27,21 +30,25 @@  Other options:\n\
 -v for verbose output\
 "
 
+
 class Usage(Exception):
     def __init__(self, msg):
         Exception.__init__(self)
         self.msg = msg
 
+
 class Status(Exception):
     def __init__(self, msg):
         Exception.__init__(self)
         self.msg = msg
 
+
 class Error(Exception):
     def __init__(self, msg):
         Exception.__init__(self)
         self.msg = msg
 
+
 class Tests:
     def __init__(self):
         self.all = False
@@ -65,146 +72,164 @@  class Tests:
         self.verbose = False
 
     def selected(self):
-        return (self.all or self.users or self.modules or self.seusers or self.ports or self.fcontexts or self.interfaces or self.booleans or self.abooleans or self.writeuser or self.writeseuser or self.writeport or self.writefcontext or self.writeinterface or self.writeboolean or self.writeaboolean or self.nodes or self.writenode)
+        return (
+            self.all or
+            self.users or
+            self.modules or
+            self.seusers or
+            self.ports or
+            self.fcontexts or
+            self.interfaces or
+            self.booleans or
+            self.abooleans or
+            self.writeuser or
+            self.writeseuser or
+            self.writeport or
+            self.writefcontext or
+            self.writeinterface or
+            self.writeboolean or
+            self.writeaboolean or
+            self.nodes or
+            self.writenode)
 
     def run(self, handle):
-        if (self.users or self.all):
+        if self.users or self.all:
             self.test_users(handle)
-            print ""
-        if (self.seusers or self.all):
+            print("")
+        if self.seusers or self.all:
             self.test_seusers(handle)
-            print ""
-        if (self.ports or self.all):
+            print("")
+        if self.ports or self.all:
             self.test_ports(handle)
-            print ""
-        if (self.modules or self.all):
+            print("")
+        if self.modules or self.all:
             self.test_modules(handle)
-            print ""
-        if (self.fcontexts or self.all):
+            print("")
+        if self.fcontexts or self.all:
             self.test_fcontexts(handle)
-            print ""
-        if (self.interfaces or self.all):
+            print("")
+        if self.interfaces or self.all:
             self.test_interfaces(handle)
-            print ""
-        if (self.booleans or self.all):
+            print("")
+        if self.booleans or self.all:
             self.test_booleans(handle)
-            print ""
-        if (self.abooleans or self.all):
+            print("")
+        if self.abooleans or self.all:
             self.test_abooleans(handle)
-            print ""
-        if (self.nodes or self.all):
+            print("")
+        if self.nodes or self.all:
             self.test_nodes(handle)
-            print ""
-        if (self.writeuser or self.all):
+            print("")
+        if self.writeuser or self.all:
             self.test_writeuser(handle)
-            print ""
-        if (self.writeseuser or self.all):
+            print("")
+        if self.writeseuser or self.all:
             self.test_writeseuser(handle)
-            print ""
-        if (self.writeport or self.all):
+            print("")
+        if self.writeport or self.all:
             self.test_writeport(handle)
-            print ""
-        if (self.writefcontext or self.all):
+            print("")
+        if self.writefcontext or self.all:
             self.test_writefcontext(handle)
-            print ""
-        if (self.writeinterface or self.all):
+            print("")
+        if self.writeinterface or self.all:
             self.test_writeinterface(handle)
-            print ""
-        if (self.writeboolean or self.all):
+            print("")
+        if self.writeboolean or self.all:
             self.test_writeboolean(handle)
-            print ""
-        if (self.writeaboolean or self.all):
+            print("")
+        if self.writeaboolean or self.all:
             self.test_writeaboolean(handle)
-            print ""
-        if (self.writenode or self.all):
+            print("")
+        if self.writenode or self.all:
             self.test_writenode(handle)
-            print ""
+            print("")
 
-    def test_modules(self,sh):
-        print "Testing modules..."
+    def test_modules(self, sh):
+        print("Testing modules...")
 
         (trans_cnt, mlist, mlist_size) = semanage.semanage_module_list(sh)
 
-        print "Transaction number: ", trans_cnt
-        print "Module list size: ", mlist_size
+        print("Transaction number: %s" % trans_cnt)
+        print("Module list size: %s" % mlist_size)
         if self.verbose:
-            print "List reference: ", mlist
+            print("List reference: %s" % mlist)
 
-        if (mlist_size == 0):
-            print "No modules installed!"
-            print "This is not necessarily a test failure."
+        if mlist_size == 0:
+            print("No modules installed!")
+            print("This is not necessarily a test failure.")
             return
         for idx in range(mlist_size):
             module = semanage.semanage_module_list_nth(mlist, idx)
             if self.verbose:
-                print "Module reference: ", module
-            print "Module name: ", semanage.semanage_module_get_name(module)
+                print("Module reference: %s" % module)
+            print("Module name: %s" % semanage.semanage_module_get_name(module))
 
-    def test_seusers(self,sh):
-        print "Testing seusers..."
+    def test_seusers(self, sh):
+        print("Testing seusers...")
 
         (status, slist) = semanage.semanage_seuser_list(sh)
         if status < 0:
             raise Error("Could not list seusers")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if ( len(slist) == 0):
-            print "No seusers found!"
-            print "This is not necessarily a test failure."
+        if len(slist) == 0:
+            print("No seusers found!")
+            print("This is not necessarily a test failure.")
             return
         for seuser in slist:
             if self.verbose:
-                print "seseuser reference: ", seuser
-            print "seuser name: ", semanage.semanage_seuser_get_name(seuser)
-            print "   seuser mls range: ", semanage.semanage_seuser_get_mlsrange(seuser)
-            print "   seuser sename: ", semanage.semanage_seuser_get_sename(seuser)
+                print("seseuser reference: %s" % seuser)
+            print("seuser name: %s" % semanage.semanage_seuser_get_name(seuser))
+            print("   seuser mls range: %s" % semanage.semanage_seuser_get_mlsrange(seuser))
+            print("   seuser sename: %s" % semanage.semanage_seuser_get_sename(seuser))
             semanage.semanage_seuser_free(seuser)
 
-    def test_users(self,sh):
-        print "Testing users..."
+    def test_users(self, sh):
+        print("Testing users...")
 
         (status, ulist) = semanage.semanage_user_list(sh)
         if status < 0:
             raise Error("Could not list users")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if ( len(ulist) == 0):
-            print "No users found!"
-            print "This is not necessarily a test failure."
+        if len(ulist) == 0:
+            print("No users found!")
+            print("This is not necessarily a test failure.")
             return
         for user in ulist:
             if self.verbose:
-                print "User reference: ", user
-            print "User name: ", semanage.semanage_user_get_name(user)
-            print "   User labeling prefix: ", semanage.semanage_user_get_prefix(user)
-            print "   User mls level: ", semanage.semanage_user_get_mlslevel(user)
-            print "   User mls range: ", semanage.semanage_user_get_mlsrange(user)
-            print "   User number of roles: ", semanage.semanage_user_get_num_roles(user)
-            print "   User roles: "
+                print("User reference: %s" % user)
+            print("User name: %s" % semanage.semanage_user_get_name(user))
+            print("   User labeling prefix: %s" % semanage.semanage_user_get_prefix(user))
+            print("   User mls level: %s" % semanage.semanage_user_get_mlslevel(user))
+            print("   User mls range: %s" % semanage.semanage_user_get_mlsrange(user))
+            print("   User number of roles: %s" % semanage.semanage_user_get_num_roles(user))
+            print("   User roles: ")
             (status, rlist) = semanage.semanage_user_get_roles(sh, user)
             if status < 0:
                 raise Error("Could not get user roles")
 
             for role in rlist:
-                print "      ", role
+                print("      %s" % role)
 
             semanage.semanage_user_free(user)
 
-    def test_ports(self,sh):
-        print "Testing ports..."
+    def test_ports(self, sh):
+        print("Testing ports...")
 
         (status, plist) = semanage.semanage_port_list(sh)
         if status < 0:
             raise Error("Could not list ports")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if ( len(plist) == 0):
-            print "No ports found!"
-            print "This is not necessarily a test failure."
+        if len(plist) == 0:
+            print("No ports found!")
+            print("This is not necessarily a test failure.")
             return
         for port in plist:
             if self.verbose:
-                print "Port reference: ", port
+                print("Port reference: %s" % port)
             low = semanage.semanage_port_get_low(port)
             high = semanage.semanage_port_get_high(port)
             con = semanage.semanage_port_get_con(port)
@@ -214,26 +239,27 @@  class Tests:
                 range_str = str(low)
             else:
                 range_str = str(low) + "-" + str(high)
-            (rc, con_str) = semanage.semanage_context_to_string(sh,con)
-            if rc < 0: con_str = ""
-            print "Port: ", range_str, " ", proto_str, " Context: ", con_str
+            (rc, con_str) = semanage.semanage_context_to_string(sh, con)
+            if rc < 0:
+                con_str = ""
+            print("Port: %s %s Context: %s" % (range_str, proto_str, con_str))
             semanage.semanage_port_free(port)
 
-    def test_fcontexts(self,sh):
-        print "Testing file contexts..."
+    def test_fcontexts(self, sh):
+        print("Testing file contexts...")
 
         (status, flist) = semanage.semanage_fcontext_list(sh)
         if status < 0:
             raise Error("Could not list file contexts")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if (len(flist) == 0):
-            print "No file contexts found!"
-            print "This is not necessarily a test failure."
+        if len(flist) == 0:
+            print("No file contexts found!")
+            print("This is not necessarily a test failure.")
             return
         for fcon in flist:
             if self.verbose:
-                print "File Context reference: ", fcon
+                print("File Context reference: %s" % fcon)
             expr = semanage.semanage_fcontext_get_expr(fcon)
             type = semanage.semanage_fcontext_get_type(fcon)
             type_str = semanage.semanage_fcontext_get_type_str(type)
@@ -241,406 +267,413 @@  class Tests:
             if not con:
                 con_str = "<<none>>"
             else:
-                (rc, con_str) = semanage.semanage_context_to_string(sh,con)
-                if rc < 0: con_str = ""
-            print "File Expr: ", expr, " [", type_str, "] Context: ", con_str
+                (rc, con_str) = semanage.semanage_context_to_string(sh, con)
+                if rc < 0:
+                    con_str = ""
+            print("File Expr: %s [%s] Context: %s" % (expr, type_str, con_str))
             semanage.semanage_fcontext_free(fcon)
 
-    def test_interfaces(self,sh):
-        print "Testing network interfaces..."
+    def test_interfaces(self, sh):
+        print("Testing network interfaces...")
 
         (status, ilist) = semanage.semanage_iface_list(sh)
         if status < 0:
             raise Error("Could not list interfaces")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if (len(ilist) == 0):
-            print "No network interfaces found!"
-            print "This is not necessarily a test failure."
+        if len(ilist) == 0:
+            print("No network interfaces found!")
+            print("This is not necessarily a test failure.")
             return
         for iface in ilist:
             if self.verbose:
-                print "Interface reference: ", iface
+                print("Interface reference: %s" % iface)
             name = semanage.semanage_iface_get_name(iface)
             msg_con = semanage.semanage_iface_get_msgcon(iface)
             if_con = semanage.semanage_iface_get_ifcon(iface)
-            (rc, msg_con_str) = semanage.semanage_context_to_string(sh,msg_con)
-            if rc < 0: msg_con_str = ""
+            (rc, msg_con_str) = semanage.semanage_context_to_string(sh, msg_con)
+            if rc < 0:
+                msg_con_str = ""
             (rc, if_con_str) = semanage.semanage_context_to_string(sh, if_con)
-            if rc < 0: if_con_str = ""
-            print "Interface: ", name, " Context: ", if_con_str, " Message Context: ", msg_con_str
+            if rc < 0:
+                if_con_str = ""
+            print("Interface: %s Context: %s Message Context: %s" % (name, if_con_str, msg_con_str))
             semanage.semanage_iface_free(iface)
 
-    def test_booleans(self,sh):
-        print "Testing booleans..."
+    def test_booleans(self, sh):
+        print("Testing booleans...")
 
         (status, blist) = semanage.semanage_bool_list(sh)
         if status < 0:
             raise Error("Could not list booleans")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if (len(blist) == 0):
-            print "No booleans found!"
-            print "This is not necessarily a test failure."
+        if len(blist) == 0:
+            print("No booleans found!")
+            print("This is not necessarily a test failure.")
             return
         for pbool in blist:
             if self.verbose:
-                print "Boolean reference: ", pbool
+                print("Boolean reference: %s" % pbool)
             name = semanage.semanage_bool_get_name(pbool)
             value = semanage.semanage_bool_get_value(pbool)
-            print "Boolean: ", name, " Value: ", value
+            print("Boolean: %s Value: %s" % (name, value))
             semanage.semanage_bool_free(pbool)
 
-    def test_abooleans(self,sh):
-        print "Testing active booleans..."
+    def test_abooleans(self, sh):
+        print("Testing active booleans...")
 
         (status, ablist) = semanage.semanage_bool_list_active(sh)
         if status < 0:
             raise Error("Could not list active booleans")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if (len(ablist) == 0):
-            print "No active booleans found!"
-            print "This is not necessarily a test failure."
+        if len(ablist) == 0:
+            print("No active booleans found!")
+            print("This is not necessarily a test failure.")
             return
         for abool in ablist:
             if self.verbose:
-                print "Active boolean reference: ", abool
+                print("Active boolean reference: %s" % abool)
             name = semanage.semanage_bool_get_name(abool)
             value = semanage.semanage_bool_get_value(abool)
-            print "Active Boolean: ", name, " Value: ", value
+            print("Active Boolean: %s Value: %s" % (name, value))
             semanage.semanage_bool_free(abool)
 
-    def test_nodes(self,sh):
-        print "Testing network nodes..."
+    def test_nodes(self, sh):
+        print("Testing network nodes...")
 
         (status, nlist) = semanage.semanage_node_list(sh)
         if status < 0:
             raise Error("Could not list network nodes")
-        print "Query status (commit number): ", status
+        print("Query status (commit number): %s" % status)
 
-        if (len(nlist) == 0):
-            print "No network nodes found!"
-            print "This is not necessarily a test failure."
+        if len(nlist) == 0:
+            print("No network nodes found!")
+            print("This is not necessarily a test failure.")
             return
         for node in nlist:
             if self.verbose:
-                print "Network node reference: ", node
+                print("Network node reference: %s" % node)
 
             (status, addr) = semanage.semanage_node_get_addr(sh, node)
-            if status < 0: addr = ""
+            if status < 0:
+                addr = ""
 
             (status, mask) = semanage.semanage_node_get_mask(sh, node)
-            if status < 0: mask = ""
+            if status < 0:
+                mask = ""
 
             proto = semanage.semanage_node_get_proto(node)
             proto_str = semanage.semanage_node_get_proto_str(proto)
             con = semanage.semanage_node_get_con(node)
 
             (status, con_str) = semanage.semanage_context_to_string(sh, con)
-            if status < 0: con_str = ""
+            if status < 0:
+                con_str = ""
 
-            print "Network Node: ", addr, "/", mask, " (", proto_str, ")", "Context: ", con_str
+            print("Network Node: %s/%s (%s) Context: %s" % (addr, mask, proto_str, con_str))
             semanage.semanage_node_free(node)
 
-    def test_writeuser(self,sh):
-        print "Testing user write..."
+    def test_writeuser(self, sh):
+        print("Testing user write...")
 
         (status, user) = semanage.semanage_user_create(sh)
         if status < 0:
             raise Error("Could not create user object")
         if self.verbose:
-            print "User object created"
+            print("User object created")
 
-        status = semanage.semanage_user_set_name(sh,user, "testPyUser")
+        status = semanage.semanage_user_set_name(sh, user, "testPyUser")
         if status < 0:
             raise Error("Could not set user name")
         if self.verbose:
-            print "User name set: ", semanage.semanage_user_get_name(user)
+            print("User name set: %s" % semanage.semanage_user_get_name(user))
 
         status = semanage.semanage_user_add_role(sh, user, "user_r")
         if status < 0:
             raise Error("Could not add role")
 
-        status = semanage.semanage_user_set_prefix(sh,user, "user")
+        status = semanage.semanage_user_set_prefix(sh, user, "user")
         if status < 0:
             raise Error("Could not set labeling prefix")
         if self.verbose:
-            print "User prefix set: ", semanage.semanage_user_get_prefix(user)
+            print("User prefix set: %s" % semanage.semanage_user_get_prefix(user))
 
         status = semanage.semanage_user_set_mlsrange(sh, user, "s0")
         if status < 0:
             raise Error("Could not set MLS range")
         if self.verbose:
-            print "User mlsrange: ", semanage.semanage_user_get_mlsrange(user)
+            print("User mlsrange: %s" % semanage.semanage_user_get_mlsrange(user))
 
         status = semanage.semanage_user_set_mlslevel(sh, user, "s0")
         if status < 0:
             raise Error("Could not set MLS level")
         if self.verbose:
-            print "User mlslevel: ", semanage.semanage_user_get_mlslevel(user)
+            print("User mlslevel: %s" % semanage.semanage_user_get_mlslevel(user))
 
-        (status,key) = semanage.semanage_user_key_extract(sh,user)
+        (status, key) = semanage.semanage_user_key_extract(sh, user)
         if status < 0:
             raise Error("Could not extract user key")
         if self.verbose:
-            print "User key extracted: ", key
+            print("User key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_user_exists_local(sh,key)
+        (status, exists) = semanage.semanage_user_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if user exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_user) = semanage.semanage_user_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old user")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction.."
+        print("Starting transaction..")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_user_modify_local(sh,key,user)
+        status = semanage.semanage_user_modify_local(sh, key, user)
         if status < 0:
             raise Error("Could not modify user")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing user..."
+            print("Removing user...")
             status = semanage.semanage_user_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test user")
             if self.verbose:
-                print "User delete: ", status
+                print("User delete: %s" % status)
         else:
-            print "Resetting user..."
+            print("Resetting user...")
             status = semanage.semanage_user_modify_local(sh, key, old_user)
             if status < 0:
                 raise Error("Could not reset test user")
             if self.verbose:
-                print "User modify: ", status
+                print("User modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_user_key_free(key)
         semanage.semanage_user_free(user)
-        if exists: semanage.semanage_user_free(old_user)
+        if exists:
+            semanage.semanage_user_free(old_user)
 
-    def test_writeseuser(self,sh):
-        print "Testing seuser write..."
+    def test_writeseuser(self, sh):
+        print("Testing seuser write...")
 
         (status, seuser) = semanage.semanage_seuser_create(sh)
         if status < 0:
             raise Error("Could not create SEUser object")
         if self.verbose:
-            print "SEUser object created."
+            print("SEUser object created.")
 
-        status = semanage.semanage_seuser_set_name(sh,seuser, "testPySEUser")
+        status = semanage.semanage_seuser_set_name(sh, seuser, "testPySEUser")
         if status < 0:
             raise Error("Could not set name")
         if self.verbose:
-            print "SEUser name set: ", semanage.semanage_seuser_get_name(seuser)
+            print("SEUser name set: %s" % semanage.semanage_seuser_get_name(seuser))
 
         status = semanage.semanage_seuser_set_sename(sh, seuser, "root")
         if status < 0:
             raise Error("Could not set sename")
         if self.verbose:
-            print "SEUser seuser: ", semanage.semanage_seuser_get_sename(seuser)
+            print("SEUser seuser: %s" % semanage.semanage_seuser_get_sename(seuser))
 
         status = semanage.semanage_seuser_set_mlsrange(sh, seuser, "s0:c0.c255")
         if status < 0:
             raise Error("Could not set MLS range")
         if self.verbose:
-            print "SEUser mlsrange: ", semanage.semanage_seuser_get_mlsrange(seuser)
+            print("SEUser mlsrange: %s" % semanage.semanage_seuser_get_mlsrange(seuser))
 
-        (status,key) = semanage.semanage_seuser_key_extract(sh,seuser)
+        (status, key) = semanage.semanage_seuser_key_extract(sh, seuser)
         if status < 0:
             raise Error("Could not extract SEUser key")
         if self.verbose:
-            print "SEUser key extracted: ", key
+            print("SEUser key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_seuser_exists_local(sh,key)
+        (status, exists) = semanage.semanage_seuser_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SEUser exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_seuser) = semanage.semanage_seuser_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SEUser")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_seuser_modify_local(sh,key,seuser)
+        status = semanage.semanage_seuser_modify_local(sh, key, seuser)
         if status < 0:
             raise Error("Could not modify SEUser")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing seuser..."
+            print("Removing seuser...")
             status = semanage.semanage_seuser_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SEUser")
             if self.verbose:
-                print "Seuser delete: ", status
+                print("Seuser delete: %s" % status)
         else:
-            print "Resetting seuser..."
+            print("Resetting seuser...")
             status = semanage.semanage_seuser_modify_local(sh, key, old_seuser)
             if status < 0:
                 raise Error("Could not reset test SEUser")
             if self.verbose:
-                print "Seuser modify: ", status
+                print("Seuser modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_seuser_key_free(key)
         semanage.semanage_seuser_free(seuser)
         if exists:
             semanage.semanage_seuser_free(old_seuser)
 
-    def test_writeport(self,sh):
-        print "Testing port write..."
+    def test_writeport(self, sh):
+        print("Testing port write...")
 
         (status, port) = semanage.semanage_port_create(sh)
         if status < 0:
             raise Error("Could not create SEPort object")
         if self.verbose:
-            print "SEPort object created."
+            print("SEPort object created.")
 
-        semanage.semanage_port_set_range(port,150,200)
+        semanage.semanage_port_set_range(port, 150, 200)
         low = semanage.semanage_port_get_low(port)
         high = semanage.semanage_port_get_high(port)
         if self.verbose:
-            print "SEPort range set: ", low, "-", high
+            print("SEPort range set: %s-%s" % (low, high))
 
         semanage.semanage_port_set_proto(port, semanage.SEMANAGE_PROTO_TCP)
         if self.verbose:
-            print "SEPort protocol set: ", semanage.semanage_port_get_proto_str(semanage.SEMANAGE_PROTO_TCP)
+            print("SEPort protocol set: %s" % semanage.semanage_port_get_proto_str(semanage.SEMANAGE_PROTO_TCP))
 
         (status, con) = semanage.semanage_context_create(sh)
         if status < 0:
             raise Error("Could not create SEContext object")
         if self.verbose:
-            print "SEContext object created (for port)."
+            print("SEContext object created (for port).")
 
         status = semanage.semanage_context_set_user(sh, con, "system_u")
         if status < 0:
             raise Error("Could not set context user")
         if self.verbose:
-            print "SEContext user: ", semanage.semanage_context_get_user(con)
+            print("SEContext user: %s" % semanage.semanage_context_get_user(con))
 
         status = semanage.semanage_context_set_role(sh, con, "object_r")
         if status < 0:
             raise Error("Could not set context role")
         if self.verbose:
-            print "SEContext role: ", semanage.semanage_context_get_role(con)
+            print("SEContext role: %s" % semanage.semanage_context_get_role(con))
 
         status = semanage.semanage_context_set_type(sh, con, "http_port_t")
         if status < 0:
             raise Error("Could not set context type")
         if self.verbose:
-            print "SEContext type: ", semanage.semanage_context_get_type(con)
+            print("SEContext type: %s" % semanage.semanage_context_get_type(con))
 
         status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
         if status < 0:
             raise Error("Could not set context MLS fields")
         if self.verbose:
-            print "SEContext mls: ", semanage.semanage_context_get_mls(con)
+            print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
 
         status = semanage.semanage_port_set_con(sh, port, con)
         if status < 0:
             raise Error("Could not set SEPort context")
         if self.verbose:
-            print "SEPort context set: ", con
+            print("SEPort context set: %s" % con)
 
-        (status,key) = semanage.semanage_port_key_extract(sh,port)
+        (status, key) = semanage.semanage_port_key_extract(sh, port)
         if status < 0:
             raise Error("Could not extract SEPort key")
         if self.verbose:
-            print "SEPort key extracted: ", key
+            print("SEPort key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_port_exists_local(sh,key)
+        (status, exists) = semanage.semanage_port_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SEPort exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_port) = semanage.semanage_port_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SEPort")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_port_modify_local(sh,key,port)
+        status = semanage.semanage_port_modify_local(sh, key, port)
         if status < 0:
             raise Error("Could not modify SEPort")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing port range..."
+            print("Removing port range...")
             status = semanage.semanage_port_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SEPort")
             if self.verbose:
-                print "Port range delete: ", status
+                print("Port range delete: %s" % status)
         else:
-            print "Resetting port range..."
+            print("Resetting port range...")
             status = semanage.semanage_port_modify_local(sh, key, old_port)
             if status < 0:
                 raise Error("Could not reset test SEPort")
             if self.verbose:
-                print "Port range modify: ", status
+                print("Port range modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_context_free(con)
         semanage.semanage_port_key_free(key)
@@ -648,118 +681,118 @@  class Tests:
         if exists:
             semanage.semanage_port_free(old_port)
 
-    def test_writefcontext(self,sh):
-        print "Testing file context write..."
+    def test_writefcontext(self, sh):
+        print("Testing file context write...")
 
         (status, fcon) = semanage.semanage_fcontext_create(sh)
         if status < 0:
             raise Error("Could not create SEFcontext object")
         if self.verbose:
-            print "SEFcontext object created."
+            print("SEFcontext object created.")
 
         status = semanage.semanage_fcontext_set_expr(sh, fcon, "/test/fcontext(/.*)?")
         if status < 0:
             raise Error("Could not set expression")
         if self.verbose:
-            print "SEFContext expr set: ", semanage.semanage_fcontext_get_expr(fcon)
+            print("SEFContext expr set: %s" % semanage.semanage_fcontext_get_expr(fcon))
 
         semanage.semanage_fcontext_set_type(fcon, semanage.SEMANAGE_FCONTEXT_REG)
         if self.verbose:
             ftype = semanage.semanage_fcontext_get_type(fcon)
-            print "SEFContext type set: ", semanage.semanage_fcontext_get_type_str(ftype)
+            print("SEFContext type set: %s" % semanage.semanage_fcontext_get_type_str(ftype))
 
         (status, con) = semanage.semanage_context_create(sh)
         if status < 0:
             raise Error("Could not create SEContext object")
         if self.verbose:
-            print "SEContext object created (for file context)."
+            print("SEContext object created (for file context).")
 
         status = semanage.semanage_context_set_user(sh, con, "system_u")
         if status < 0:
             raise Error("Could not set context user")
         if self.verbose:
-            print "SEContext user: ", semanage.semanage_context_get_user(con)
+            print("SEContext user: %s" % semanage.semanage_context_get_user(con))
 
         status = semanage.semanage_context_set_role(sh, con, "object_r")
         if status < 0:
             raise Error("Could not set context role")
         if self.verbose:
-            print "SEContext role: ", semanage.semanage_context_get_role(con)
+            print("SEContext role: %s" % semanage.semanage_context_get_role(con))
 
         status = semanage.semanage_context_set_type(sh, con, "default_t")
         if status < 0:
             raise Error("Could not set context type")
         if self.verbose:
-            print "SEContext type: ", semanage.semanage_context_get_type(con)
+            print("SEContext type: %s" % semanage.semanage_context_get_type(con))
 
         status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
         if status < 0:
             raise Error("Could not set context MLS fields")
         if self.verbose:
-            print "SEContext mls: ", semanage.semanage_context_get_mls(con)
+            print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
 
         status = semanage.semanage_fcontext_set_con(sh, fcon, con)
         if status < 0:
             raise Error("Could not set SEFcontext context")
         if self.verbose:
-            print "SEFcontext context set: ", con
+            print("SEFcontext context set: %s" % con)
 
-        (status,key) = semanage.semanage_fcontext_key_extract(sh,fcon)
+        (status, key) = semanage.semanage_fcontext_key_extract(sh, fcon)
         if status < 0:
             raise Error("Could not extract SEFcontext key")
         if self.verbose:
-            print "SEFcontext key extracted: ", key
+            print("SEFcontext key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_fcontext_exists_local(sh,key)
+        (status, exists) = semanage.semanage_fcontext_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SEFcontext exists")
 
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
         if exists:
             (status, old_fcontext) = semanage.semanage_fcontext_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SEFcontext")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_fcontext_modify_local(sh,key,fcon)
+        status = semanage.semanage_fcontext_modify_local(sh, key, fcon)
         if status < 0:
             raise Error("Could not modify SEFcontext")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing file context..."
+            print("Removing file context...")
             status = semanage.semanage_fcontext_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SEFcontext")
             if self.verbose:
-                print "File context delete: ", status
+                print("File context delete: %s" % status)
         else:
-            print "Resetting file context..."
+            print("Resetting file context...")
             status = semanage.semanage_fcontext_modify_local(sh, key, old_fcontext)
             if status < 0:
                 raise Error("Could not reset test FContext")
             if self.verbose:
-                print "File context modify: ", status
+                print("File context modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_context_free(con)
         semanage.semanage_fcontext_key_free(key)
@@ -767,119 +800,119 @@  class Tests:
         if exists:
             semanage.semanage_fcontext_free(old_fcontext)
 
-    def test_writeinterface(self,sh):
-        print "Testing network interface write..."
+    def test_writeinterface(self, sh):
+        print("Testing network interface write...")
 
         (status, iface) = semanage.semanage_iface_create(sh)
         if status < 0:
             raise Error("Could not create SEIface object")
         if self.verbose:
-            print "SEIface object created."
+            print("SEIface object created.")
 
         status = semanage.semanage_iface_set_name(sh, iface, "test_iface")
         if status < 0:
             raise Error("Could not set SEIface name")
         if self.verbose:
-            print "SEIface name set: ", semanage.semanage_iface_get_name(iface)
+            print("SEIface name set: %s" % semanage.semanage_iface_get_name(iface))
 
         (status, con) = semanage.semanage_context_create(sh)
         if status < 0:
             raise Error("Could not create SEContext object")
         if self.verbose:
-            print "SEContext object created (for network interface)"
+            print("SEContext object created (for network interface)")
 
         status = semanage.semanage_context_set_user(sh, con, "system_u")
         if status < 0:
             raise Error("Could not set interface context user")
         if self.verbose:
-            print "SEContext user: ", semanage.semanage_context_get_user(con)
+            print("SEContext user: %s" % semanage.semanage_context_get_user(con))
 
         status = semanage.semanage_context_set_role(sh, con, "object_r")
         if status < 0:
             raise Error("Could not set interface context role")
         if self.verbose:
-            print "SEContext role: ", semanage.semanage_context_get_role(con)
+            print("SEContext role: %s" % semanage.semanage_context_get_role(con))
 
         status = semanage.semanage_context_set_type(sh, con, "default_t")
         if status < 0:
             raise Error("Could not set interface context type")
         if self.verbose:
-            print "SEContext type: ", semanage.semanage_context_get_type(con)
+            print("SEContext type: %s" % semanage.semanage_context_get_type(con))
 
         status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
         if status < 0:
             raise Error("Could not set interface context MLS fields")
         if self.verbose:
-            print "SEContext mls: ", semanage.semanage_context_get_mls(con)
+            print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
 
         status = semanage.semanage_iface_set_ifcon(sh, iface, con)
         if status < 0:
             raise Error("Could not set SEIface interface context")
         if self.verbose:
-            print "SEIface interface context set: ", con
+            print("SEIface interface context set: %s" % con)
 
         status = semanage.semanage_iface_set_msgcon(sh, iface, con)
         if status < 0:
             raise Error("Could not set SEIface message context")
         if self.verbose:
-            print "SEIface message context set: ", con
+            print("SEIface message context set: %s" % con)
 
-        (status,key) = semanage.semanage_iface_key_extract(sh,iface)
+        (status, key) = semanage.semanage_iface_key_extract(sh, iface)
         if status < 0:
             raise Error("Could not extract SEIface key")
         if self.verbose:
-            print "SEIface key extracted: ", key
+            print("SEIface key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_iface_exists_local(sh,key)
+        (status, exists) = semanage.semanage_iface_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SEIface exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_iface) = semanage.semanage_iface_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SEIface")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not begin semanage transaction")
 
-        status = semanage.semanage_iface_modify_local(sh,key,iface)
+        status = semanage.semanage_iface_modify_local(sh, key, iface)
         if status < 0:
             raise Error("Could not modify SEIface")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not begin semanage transaction")
 
         if not exists:
-            print "Removing interface..."
+            print("Removing interface...")
             status = semanage.semanage_iface_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SEIface")
             if self.verbose:
-                print "Interface delete: ", status
+                print("Interface delete: %s" % status)
         else:
-            print "Resetting interface..."
+            print("Resetting interface...")
             status = semanage.semanage_iface_modify_local(sh, key, old_iface)
             if status < 0:
                 raise Error("Could not reset test SEIface")
             if self.verbose:
-                print "Interface modify: ", status
+                print("Interface modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_context_free(con)
         semanage.semanage_iface_key_free(key)
@@ -887,45 +920,45 @@  class Tests:
         if exists:
             semanage.semanage_iface_free(old_iface)
 
-    def test_writeboolean(self,sh):
-        print "Testing boolean write..."
+    def test_writeboolean(self, sh):
+        print("Testing boolean write...")
 
         (status, pbool) = semanage.semanage_bool_create(sh)
         if status < 0:
             raise Error("Could not create SEBool object")
         if self.verbose:
-            print "SEBool object created."
+            print("SEBool object created.")
 
         status = semanage.semanage_bool_set_name(sh, pbool, "allow_execmem")
         if status < 0:
             raise Error("Could not set name")
         if self.verbose:
-            print "SEBool name set: ", semanage.semanage_bool_get_name(pbool)
+            print("SEBool name set: %s" % semanage.semanage_bool_get_name(pbool))
 
         semanage.semanage_bool_set_value(pbool, 0)
         if self.verbose:
-            print "SEbool value set: ", semanage.semanage_bool_get_value(pbool)
+            print("SEbool value set: %s" % semanage.semanage_bool_get_value(pbool))
 
-        (status,key) = semanage.semanage_bool_key_extract(sh, pbool)
+        (status, key) = semanage.semanage_bool_key_extract(sh, pbool)
         if status < 0:
             raise Error("Could not extract SEBool key")
         if self.verbose:
-            print "SEBool key extracted: ", key
+            print("SEBool key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_bool_exists_local(sh,key)
+        (status, exists) = semanage.semanage_bool_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SEBool exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_bool) = semanage.semanage_bool_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SEBool")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
@@ -938,110 +971,110 @@  class Tests:
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing boolean..."
+            print("Removing boolean...")
             status = semanage.semanage_bool_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SEBool")
             if self.verbose:
-                print "Boolean delete: ", status
+                print("Boolean delete: %s" % status)
         else:
-            print "Resetting boolean..."
+            print("Resetting boolean...")
             status = semanage.semanage_bool_modify_local(sh, key, old_bool)
             if status < 0:
                 raise Error("Could not reset test SEBool")
             if self.verbose:
-                print "Boolean modify: ", status
+                print("Boolean modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_bool_key_free(key)
         semanage.semanage_bool_free(pbool)
-        if exists: semanage.semanage_bool_free(old_bool)
+        if exists:
+            semanage.semanage_bool_free(old_bool)
 
-    def test_writeaboolean(self,sh):
-        print "Testing active boolean write..."
+    def test_writeaboolean(self, sh):
+        print("Testing active boolean write...")
 
         (status, key) = semanage.semanage_bool_key_create(sh, "allow_execmem")
         if status < 0:
             raise Error("Could not create SEBool key")
         if self.verbose:
-            print "SEBool key created: ", key
+            print("SEBool key created: %s" % key)
 
         (status, old_bool) = semanage.semanage_bool_query_active(sh, key)
         if status < 0:
             raise Error("Could not query old SEBool")
         if self.verbose:
-            print "Query status (commit number): ", status
+            print("Query status (commit number): %s" % status)
 
         (status, abool) = semanage.semanage_bool_create(sh)
         if status < 0:
             raise Error("Could not create SEBool object")
         if self.verbose:
-            print "SEBool object created."
+            print("SEBool object created.")
 
         status = semanage.semanage_bool_set_name(sh, abool, "allow_execmem")
         if status < 0:
             raise Error("Could not set name")
         if self.verbose:
-            print "SEBool name set: ", semanage.semanage_bool_get_name(abool)
+            print("SEBool name set: %s" % semanage.semanage_bool_get_name(abool))
 
         semanage.semanage_bool_set_value(abool, 0)
         if self.verbose:
-            print "SEbool value set: ", semanage.semanage_bool_get_value(abool)
+            print("SEbool value set: %s" % semanage.semanage_bool_get_value(abool))
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_bool_set_active(sh,key,abool)
+        status = semanage.semanage_bool_set_active(sh, key, abool)
         if status < 0:
             raise Error("Could not modify SEBool")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
-        print "Resetting old active boolean..."
+        print("Resetting old active boolean...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_bool_set_active(sh, key,old_bool)
+        status = semanage.semanage_bool_set_active(sh, key, old_bool)
         if status < 0:
             raise Error("Could not reset test SEBool")
         if self.verbose:
-            print "SEBool active reset: ", status
+            print("SEBool active reset: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_bool_key_free(key)
         semanage.semanage_bool_free(abool)
         semanage.semanage_bool_free(old_bool)
 
-
-    def test_writenode(self,sh):
-        print "Testing network node write..."
+    def test_writenode(self, sh):
+        print("Testing network node write...")
 
         (status, node) = semanage.semanage_node_create(sh)
         if status < 0:
             raise Error("Could not create SENode object")
         if self.verbose:
-            print "SENode object created."
+            print("SENode object created.")
 
         status = semanage.semanage_node_set_addr(sh, node, semanage.SEMANAGE_PROTO_IP6, "ffee:dddd::bbbb")
         if status < 0:
@@ -1053,100 +1086,100 @@  class Tests:
 
         semanage.semanage_node_set_proto(node, semanage.SEMANAGE_PROTO_IP6)
         if self.verbose:
-            print "SENode protocol set: ", semanage.semanage_node_get_proto_str(semanage.SEMANAGE_PROTO_IP6)
+            print("SENode protocol set: %s" % semanage.semanage_node_get_proto_str(semanage.SEMANAGE_PROTO_IP6))
 
         (status, con) = semanage.semanage_context_create(sh)
         if status < 0:
             raise Error("Could not create SEContext object")
         if self.verbose:
-            print "SEContext object created (for node)."
+            print("SEContext object created (for node).")
 
         status = semanage.semanage_context_set_user(sh, con, "system_u")
         if status < 0:
             raise Error("Could not set context user")
         if self.verbose:
-            print "SEContext user: ", semanage.semanage_context_get_user(con)
+            print("SEContext user: %s" % semanage.semanage_context_get_user(con))
 
         status = semanage.semanage_context_set_role(sh, con, "object_r")
         if status < 0:
             raise Error("Could not set context role")
         if self.verbose:
-            print "SEContext role: ", semanage.semanage_context_get_role(con)
+            print("SEContext role: %s" % semanage.semanage_context_get_role(con))
 
         status = semanage.semanage_context_set_type(sh, con, "lo_node_t")
         if status < 0:
             raise Error("Could not set context type")
         if self.verbose:
-            print "SEContext type: ", semanage.semanage_context_get_type(con)
+            print("SEContext type: %s" % semanage.semanage_context_get_type(con))
 
         status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
         if status < 0:
             raise Error("Could not set context MLS fields")
         if self.verbose:
-            print "SEContext mls: ", semanage.semanage_context_get_mls(con)
+            print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
 
         status = semanage.semanage_node_set_con(sh, node, con)
         if status < 0:
             raise Error("Could not set SENode context")
         if self.verbose:
-            print "SENode context set: ", con
+            print("SENode context set: %s" % con)
 
-        (status,key) = semanage.semanage_node_key_extract(sh, node)
+        (status, key) = semanage.semanage_node_key_extract(sh, node)
         if status < 0:
             raise Error("Could not extract SENode key")
         if self.verbose:
-            print "SENode key extracted: ", key
+            print("SENode key extracted: %s" % key)
 
-        (status,exists) = semanage.semanage_node_exists_local(sh,key)
+        (status, exists) = semanage.semanage_node_exists_local(sh, key)
         if status < 0:
             raise Error("Could not check if SENode exists")
         if self.verbose:
-            print "Exists status (commit number): ", status
+            print("Exists status (commit number): %s" % status)
 
         if exists:
             (status, old_node) = semanage.semanage_node_query_local(sh, key)
             if status < 0:
                 raise Error("Could not query old SENode")
             if self.verbose:
-                print "Query status (commit number): ", status
+                print("Query status (commit number): %s" % status)
 
-        print "Starting transaction..."
+        print("Starting transaction...")
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
-        status = semanage.semanage_node_modify_local(sh,key, node)
+        status = semanage.semanage_node_modify_local(sh, key, node)
         if status < 0:
             raise Error("Could not modify SENode")
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit test transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         status = semanage.semanage_begin_transaction(sh)
         if status < 0:
             raise Error("Could not start semanage transaction")
 
         if not exists:
-            print "Removing network node..."
+            print("Removing network node...")
             status = semanage.semanage_node_del_local(sh, key)
             if status < 0:
                 raise Error("Could not delete test SENode")
             if self.verbose:
-                print "Network node delete: ", status
+                print("Network node delete: %s" % status)
         else:
-            print "Resetting network node..."
+            print("Resetting network node...")
             status = semanage.semanage_node_modify_local(sh, key, old_node)
             if status < 0:
                 raise Error("Could not reset test SENode")
             if self.verbose:
-                print "Network node modify: ", status
+                print("Network node modify: %s" % status)
 
         status = semanage.semanage_commit(sh)
         if status < 0:
             raise Error("Could not commit reset transaction")
-        print "Commit status (transaction number): ", status
+        print("Commit status (transaction number): %s" % status)
 
         semanage.semanage_context_free(con)
         semanage.semanage_node_key_free(key)
@@ -1154,17 +1187,41 @@  class Tests:
         if exists:
             semanage.semanage_node_free(old_node)
 
+
 def main(argv=None):
     if argv is None:
         argv = sys.argv
     try:
         try:
-            opts, args = getopt.getopt(argv[1:], "hvmuspfibcUSPFIBCanN", ["help", "verbose", "modules", "users", "seusers", "ports", "file contexts", "network interfaces", "booleans", "active booleans", "network nodes", "writeuser", "writeseuser", "writeport", "writefcontext", "writeinterface", "writeboolean", "writeaboolean", "writenode", "all"])
+            opts, args = getopt.getopt(
+                argv[1:], "hvmuspfibcUSPFIBCanN",
+                [
+                    "help",
+                    "verbose",
+                    "modules",
+                    "users",
+                    "seusers",
+                    "ports",
+                    "file contexts",
+                    "network interfaces",
+                    "booleans",
+                    "active booleans",
+                    "network nodes",
+                    "writeuser",
+                    "writeseuser",
+                    "writeport",
+                    "writefcontext",
+                    "writeinterface",
+                    "writeboolean",
+                    "writeaboolean",
+                    "writenode",
+                    "all",
+                ])
             tests = Tests()
             for o, a in opts:
                 if o == "-v":
                     tests.verbose = True
-                    print "Verbose output selected."
+                    print("Verbose output selected.")
                 if o == "-a":
                     tests.all = True
                 if o == "-u":
@@ -1207,12 +1264,12 @@  def main(argv=None):
             if not tests.selected():
                 raise Usage("Please select a valid test.")
 
-        except getopt.error, msg:
+        except getopt.error as msg:
             raise Usage(msg)
 
-        sh=semanage.semanage_handle_create()
+        sh = semanage.semanage_handle_create()
 
-        if (semanage.semanage_is_managed(sh) != 1):
+        if semanage.semanage_is_managed(sh) != 1:
             raise Status("Unmanaged!")
 
         status = semanage.semanage_connect(sh)
@@ -1227,14 +1284,15 @@  def main(argv=None):
 
         semanage.semanage_handle_destroy(sh)
 
-    except Usage, err:
-        print >>sys.stderr, err.msg
-    except Status, err:
-        print >>sys.stderr, err.msg
-    except Error, err:
-        print >>sys.stderr, err.msg
+    except Usage as err:
+        print(err.msg, file=sys.stderr)
+    except Status as err:
+        print(err.msg, file=sys.stderr)
+    except Error as err:
+        print(err.msg, file=sys.stderr)
 
     return 2
 
+
 if __name__ == "__main__":
     sys.exit(main())