[Piglit] [PATCH 1/2] framework: fix unicode input for python 2.x

Dylan Baker baker.dylan.c at gmail.com
Fri Mar 25 21:28:27 UTC 2016


In python 3.x input is unicode by default, but in python 2.x everything
is a byte string by default, this includes input. Currently when running
with python 3.x it's possible to use unicode for input, but python 2.x
will choke when it tries to encode the bytes into unicode using the
ascii codec.

For example, this will work with python 3.x but no with python 2.x:
(The character is yuki, Japanese for snow, if memory serves)
./piglit run quick 雪 -c

This is actually pretty easy to fix, when runnging with python 2.x
decode each input element into unicode using utf-8 as soon as the input
is received.

Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
 piglit                   | 17 +++++++++++++----
 piglit-print-commands.py |  7 +++++--
 piglit-resume.py         |  6 +++++-
 piglit-run.py            |  6 +++++-
 piglit-summary-html.py   |  6 +++++-
 piglit-summary.py        |  6 +++++-
 6 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/piglit b/piglit
index 514dd3f..cc05bcc 100755
--- a/piglit
+++ b/piglit
@@ -31,12 +31,16 @@ capture -h/--help and the results will not be useful.
 
 """
 
-from __future__ import print_function
-
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
+import argparse
 import os
 import os.path as path
 import sys
-import argparse
+
+import six
+
 
 def setup_module_search_path():
     """Add Piglit's data directory to Python's module search path.
@@ -110,6 +114,11 @@ import framework.programs.summary as summary
 
 def main():
     """ Parse argument and call other executables """
+    if six.PY2:
+        input_ = [i.decode('utf-8') for i in sys.argv[1:]]
+    elif six.PY3:
+        input_ = sys.argv[1:]
+
     parser = argparse.ArgumentParser()
     subparsers = parser.add_subparsers()
 
@@ -147,7 +156,7 @@ def main():
     # Parse the known arguments (piglit run or piglit summary html for
     # example), and then pass the arguments that this parser doesn't know about
     # to that executable
-    parsed, args = parser.parse_known_args()
+    parsed, args = parser.parse_known_args(input_)
     returncode = parsed.func(args)
     sys.exit(returncode)
 
diff --git a/piglit-print-commands.py b/piglit-print-commands.py
index c891e8e..793ffae 100755
--- a/piglit-print-commands.py
+++ b/piglit-print-commands.py
@@ -22,7 +22,9 @@
 # DEALINGS IN THE SOFTWARE.
 
 
-from __future__ import print_function
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
 import argparse
 import sys
 import os
@@ -36,6 +38,7 @@ from framework.test import Test, GleanTest
 
 
 def main():
+    input_ = [i.decode('utf-8') for i in sys.argv[1:]]
     parser = argparse.ArgumentParser(parents=[parsers.CONFIG])
     parser.add_argument("-t", "--include-tests",
                         default=[],
@@ -52,7 +55,7 @@ def main():
     parser.add_argument("testProfile",
                         metavar="<Path to testfile>",
                         help="Path to results folder")
-    args = parser.parse_args()
+    args = parser.parse_args(input_)
 
     options.OPTIONS.exclude_filter = args.exclude_tests
     options.OPTIONS.include_filter = args.include_tests
diff --git a/piglit-resume.py b/piglit-resume.py
index 6b78529..c8f0fe2 100755
--- a/piglit-resume.py
+++ b/piglit-resume.py
@@ -26,7 +26,11 @@ Deprecated compatability wrapper
 
 """
 
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
 import sys
+
 from framework.programs.run import resume
 
-resume(sys.argv[1:])
+resume([i.decode('utf-8') for i in sys.argv[1:]])
diff --git a/piglit-run.py b/piglit-run.py
index 4c0f878..7f6cf1a 100755
--- a/piglit-run.py
+++ b/piglit-run.py
@@ -26,7 +26,11 @@ Deprecated compatability wrapper
 
 """
 
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
 import sys
+
 from framework.programs.run import run
 
-run(sys.argv[1:])
+run([i.decode('utf-8') for i in sys.argv[1:]])
diff --git a/piglit-summary-html.py b/piglit-summary-html.py
index 4b5278e..163d006 100755
--- a/piglit-summary-html.py
+++ b/piglit-summary-html.py
@@ -22,7 +22,11 @@
 
 """ Deprecated compatability wrapper for html summary """
 
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
 import sys
+
 from framework.programs.summary import html
 
-html(sys.argv[1:])
+html([i.decode('utf-8') for i in sys.argv[1:]])
diff --git a/piglit-summary.py b/piglit-summary.py
index d1294be..62f29ce 100755
--- a/piglit-summary.py
+++ b/piglit-summary.py
@@ -22,7 +22,11 @@
 
 """ Deprecated compatability wrapper for console summary """
 
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
 import sys
+
 from framework.programs.summary import console
 
-console(sys.argv[1:])
+console([i.decode('utf-8') for i in sys.argv[1:]])
-- 
2.7.4



More information about the Piglit mailing list