[Piglit] [PATCH 2/2] framework: Provide more helpful error message when loading results fails

Brian Paul brianp at vmware.com
Fri Nov 4 20:18:21 UTC 2016


On 11/04/2016 01:49 PM, Dylan Baker wrote:
> Currently if there is a typo in a filename (which piglit uses to
> determine if a particular result can be loaded) then a message about
> an unsupported backend will be generated. Obviously, the more common
> reason for this error is a typo or pointing at the wrong directory, not
> that you've tried to load a result format piglit doesn't understand.
>
> With that in mind this patch catches that exception in every case and
> raises a PiglitFatalError, appending a message that this is probably a
> typo or that you've pointed at the wrong directory.
>
> cc: Brian Paul <brianp at vmware.com>
> Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
> ---
>   framework/programs/summary.py | 10 +++++++++-
>   framework/summary/console_.py | 10 +++++++++-
>   framework/summary/html_.py    | 19 ++++++++++++++++---
>   3 files changed, 34 insertions(+), 5 deletions(-)
>
> diff --git a/framework/programs/summary.py b/framework/programs/summary.py
> index e400d9a..784e084 100644
> --- a/framework/programs/summary.py
> +++ b/framework/programs/summary.py
> @@ -186,7 +186,15 @@ def csv(input_):
>                           help="JSON results file to be converted")
>       args = parser.parse_args(unparsed)
>
> -    testrun = backends.load(args.testResults)
> +    try:
> +        testrun = backends.load(args.testResults)
> +    except backends.BackendError as e:
> +        raise exceptions.PiglitFatalError(
> +            six.text_type(e) + \
> +            '\n'
> +            'This might mean that you pointed at the wrong directory or a '
> +            'typo in your file extension.')
> +
>
>       def write_results(output):
>           for name, result in six.iteritems(testrun.tests):
> diff --git a/framework/summary/console_.py b/framework/summary/console_.py
> index e17a1d8..b8cdafb 100644
> --- a/framework/summary/console_.py
> +++ b/framework/summary/console_.py
> @@ -30,6 +30,7 @@ import textwrap
>   import six
>
>   from framework import grouptools, backends
> +from framework import exceptions
>   from .common import Results
>
>   __all__ = [
> @@ -100,7 +101,14 @@ def _print_result(results, list_):
>   def console(results, mode):
>       """ Write summary information to the console """
>       assert mode in ['summary', 'diff', 'incomplete', 'all'], mode
> -    results = Results([backends.load(r) for r in results])
> +    try:
> +        results = Results([backends.load(r) for r in results])
> +    except backends.BackendError as e:
> +        raise exceptions.PiglitFatalError(
> +            six.text_type(e) + \
> +            '\n'
> +            'This might mean that you pointed at the wrong directory or a '
> +            'typo in your file extension.')
>
>       # Print the name of the test and the status from each test run
>       if mode == 'all':
> diff --git a/framework/summary/html_.py b/framework/summary/html_.py
> index f7fdc85..4983b62 100644
> --- a/framework/summary/html_.py
> +++ b/framework/summary/html_.py
> @@ -172,7 +172,14 @@ def html(results, destination, exclude):
>       heavy lifting, this method just passes it a bunch of dicts and lists
>       of dicts, which mako turns into pretty HTML.
>       """
> -    results = Results([backends.load(i) for i in results])
> +    try:
> +        results = Results([backends.load(r) for r in results])
> +    except backends.BackendError as e:
> +        raise exceptions.PiglitFatalError(
> +            six.text_type(e) + \
> +            '\n'
> +            'This might mean that you pointed at the wrong directory or a '
> +            'typo in your file extension.')
>
>       _copy_static_files(destination)
>       _make_testrun_info(results, destination, exclude)
> @@ -181,8 +188,14 @@ def html(results, destination, exclude):
>
>   def feat(results, destination, feat_desc):
>       """Produce HTML feature readiness summary."""
> -
> -    feat_res = FeatResults([backends.load(i) for i in results], feat_desc)
> +    try:
> +        feat_res = FeatResults([backends.load(i) for i in results], feat_desc)
> +    except backends.BackendError as e:
> +        raise exceptions.PiglitFatalError(
> +            six.text_type(e) + \
> +            '\n'
> +            'This might mean that you pointed at the wrong directory or a '
> +            'typo in your file extension.')
>
>       _copy_static_files(destination)
>       _make_testrun_info(feat_res, destination)
>

This works, but
1. seems like a lot of duplicated code.
2. How about a simpler error message like: "Unable to open '%s'"

Thanks.

-Brian




More information about the Piglit mailing list