All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Srb <msrb@redhat.com>
To: Stephen Smalley <sds@tycho.nsa.gov>, selinux@tycho.nsa.gov
Subject: Re: [PATCH 3/4] policycoreutils/semanage: improve compatibility with Python 3
Date: Wed, 22 Jul 2015 16:10:25 +0200	[thread overview]
Message-ID: <55AFA451.3060204@redhat.com> (raw)
In-Reply-To: <55AF9BFF.1000101@tycho.nsa.gov>



On 07/22/2015 03:34 PM, Stephen Smalley wrote:
> On 07/20/2015 08:38 PM, Michal Srb wrote:
>> - gettext.install() only takes "unicode" keyword argument in Python 2
>> - __builtin__ module has been renamed to "builtins" in Python 3
>> - use reserved word `as` in try-except
>> - replace print statement with print function
>>
>> Signed-off-by: Michal Srb <msrb@redhat.com>
>> ---
>>   policycoreutils/semanage/semanage         | 59 +++++++++++++++++--------------
>>   policycoreutils/semanage/test-semanage.py |  4 +--
>>   2 files changed, 35 insertions(+), 28 deletions(-)
>>
>> diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
>> index dd1010a..515cef3 100644
>> --- a/policycoreutils/semanage/semanage
>> +++ b/policycoreutils/semanage/semanage
>> @@ -29,13 +29,20 @@ import sys
>>   import gettext
>>   PROGNAME="policycoreutils"
>>   try:
>> -       gettext.install(PROGNAME,
>> -                       localedir="/usr/share/locale",
>> -                       unicode=True,
>> -                       codeset = 'utf-8')
>> +    kwargs = {}
>> +    if sys.version_info < (3,):
>> +        kwargs['unicode'] = True
>> +    gettext.install(PROGNAME,
>> +                    localedir="/usr/share/locale",
>> +                    codeset = 'utf-8',
>> +                    **kwarg)
> I had to fix this (kwarg -> kwargs).  Not tested?

Oops, sorry about that. I remember doing minor changes in this part just 
before sending the patches - and I probably forgot to run tests on it 
after editing :/

Michal

>
>>   except IOError:
>> -       import __builtin__
>> -       __builtin__.__dict__['_'] = unicode
>> +    try:
>> +        import builtins
>> +        builtins.__dict__['_'] = str
>> +    except ImportError:
>> +        import __builtin__
>> +        __builtin__.__dict__['_'] = unicode
>>   
>>   # define custom usages for selected main actions
>>   usage_login = "semanage login [-h] [-n] [-N] [-s STORE] ["
>> @@ -103,7 +110,7 @@ class SetImportFile(argparse.Action):
>>           if values and values is not "-":
>>                  try:
>>                         sys.stdin = open(values, 'r')
>> -               except IOError,e:
>> +               except IOError as e:
>>                         sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>                         sys.exit(1)
>>           setattr(namespace, self.dest, values)
>> @@ -207,7 +214,7 @@ def handleLogin(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "login %s" % (str(i))
>> +            print("login %s" % (str(i)))
>>   
>>   def parser_add_store(parser, name):
>>       parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage"))
>> @@ -323,7 +330,7 @@ def handleFcontext(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "fcontext %s" % str(i)
>> +            print("fcontext %s" % str(i))
>>   
>>   def setupFcontextParser(subparsers):
>>       ftype_help = '''
>> @@ -381,7 +388,7 @@ def handleUser(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "user %s" % str(i)
>> +            print("user %s" % str(i))
>>   
>>   def setupUserParser(subparsers):
>>       generated_usage = generate_custom_usage(usage_user, usage_user_dict)
>> @@ -430,7 +437,7 @@ def handlePort(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "port %s" % str(i)
>> +            print("port %s" % str(i))
>>   
>>   def setupPortParser(subparsers):
>>       generated_usage = generate_custom_usage(usage_port, usage_port_dict)
>> @@ -473,7 +480,7 @@ def handleInterface(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "interface %s" % str(i)
>> +            print("interface %s" % str(i))
>>   
>>   def setupInterfaceParser(subparsers):
>>       generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
>> @@ -512,7 +519,7 @@ def handleModule(args):
>>           OBJECT.list(args.noheading, args.locallist)
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "module %s" % str(i)
>> +            print("module %s" % str(i))
>>   
>>   def setupModuleParser(subparsers):
>>       moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules'))
>> @@ -552,7 +559,7 @@ def handleNode(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "node %s" % str(i)
>> +            print("node %s" % str(i))
>>   
>>   def setupNodeParser(subparsers):
>>       generated_usage = generate_custom_usage(usage_node, usage_node_dict)
>> @@ -584,10 +591,10 @@ def handleBoolean(args):
>>           sys.exit(2)
>>       # TODO: should be added to handle_opts logic
>>       elif args.action is "modify" and not args.boolean:
>> -        print "boolean name required "
>> +        print("boolean name required ")
>>           sys.exit(1)
>>       elif args.action is "modify" and args.boolean and not args.state:
>> -        print "state option is needed"
>> +        print("state option is needed")
>>           sys.exit(1)
>>       else:
>>           handle_opts(args,boolean_args,args.action)
>> @@ -604,7 +611,7 @@ def handleBoolean(args):
>>           OBJECT.deleteall()
>>       if args.action is "extract":
>>           for i in OBJECT.customized():
>> -            print "boolean %s" % str(i)
>> +            print("boolean %s" % str(i))
>>   
>>   def setupBooleanParser(subparsers):
>>       generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
>> @@ -670,11 +677,11 @@ def setupDontauditParser(subparsers):
>>   def handleExport(args):
>>       manageditems=[ "boolean", "login", "interface", "user", "port", "node", "fcontext", "module"]
>>       for i in manageditems:
>> -        print "%s -D" % i
>> +        print("%s -D" % i)
>>       for i in manageditems:
>>           OBJECT = object_dict[i]()
>>           for c in OBJECT.customized():
>> -            print "%s %s" % (i, str(c))
>> +            print("%s %s" % (i, str(c)))
>>   
>>       sys.exit(0)
>>   
>> @@ -743,10 +750,10 @@ def handleImport(args):
>>               commandParser = createCommandParser()
>>               args = commandParser.parse_args(mkargv(l))
>>               args.func(args)
>> -        except ValueError,e:
>> +        except ValueError as e:
>>               sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>               sys.exit(1)
>> -        except IOError,e:
>> +        except IOError as e:
>>               sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>               sys.exit(1)
>>           except KeyboardInterrupt:
>> @@ -822,21 +829,21 @@ def do_parser():
>>           args = commandParser.parse_args(make_args(sys.argv))
>>           args.func(args)
>>           sys.exit(0)
>> -    except IOError,e:
>> +    except IOError as e:
>>           sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>           sys.exit(1)
>>       except KeyboardInterrupt:
>>           sys.exit(0)
>> -    except ValueError, e:
>> +    except ValueError as e:
>>           sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>>           sys.exit(1)
>> -    except KeyError, e:
>> +    except KeyError as e:
>>           sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>>           sys.exit(1)
>> -    except OSError, e:
>> +    except OSError as e:
>>           sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1]))
>>           sys.exit(1)
>> -    except RuntimeError, e:
>> +    except RuntimeError as e:
>>           sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>>           sys.exit(1)
>>   
>> diff --git a/policycoreutils/semanage/test-semanage.py b/policycoreutils/semanage/test-semanage.py
>> index d39013e..fc8368e 100644
>> --- a/policycoreutils/semanage/test-semanage.py
>> +++ b/policycoreutils/semanage/test-semanage.py
>> @@ -273,10 +273,10 @@ if __name__ == "__main__":
>>               args = parser.parse_args()
>>               args.func(args)
>>               sys.exit(0)
>> -        except ValueError,e:
>> +        except ValueError as e:
>>               sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>               sys.exit(1)
>> -        except IOError,e:
>> +        except IOError as e:
>>               sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>>               sys.exit(1)
>>           except KeyboardInterrupt:
>>

  reply	other threads:[~2015-07-22 14:10 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-21  0:38 Improve Python 3 support in policycoreutils Michal Srb
2015-07-21  0:38 ` [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3 Michal Srb
2015-07-21  0:38 ` [PATCH 2/4] policycoreutils/sandbox: " Michal Srb
2015-07-21  0:38 ` [PATCH 3/4] policycoreutils/semanage: " Michal Srb
2015-07-22 13:34   ` Stephen Smalley
2015-07-22 14:10     ` Michal Srb [this message]
2015-07-21  0:38 ` [PATCH 4/4] policycoreutils/scripts: " Michal Srb
2015-07-22 13:29 ` Improve Python 3 support in policycoreutils Stephen Smalley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55AFA451.3060204@redhat.com \
    --to=msrb@redhat.com \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.