[Piglit] [PATCH 1/2] framework/results.py: Copy 'tests' internally to OrderedDict

Dylan Baker dylan at pnwbakers.com
Thu Feb 9 16:34:47 UTC 2017


First, thanks for doing this it's a nice improvement.

I have a few comments below, and a few on the next patch as well.

Quoting Tomi Sarvela (2017-02-09 03:07:04)
> To preserve the original test running order, use OrderedDict
> when copying 'tests' values over.
> ---
>  framework/results.py | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/framework/results.py b/framework/results.py
> index 1a73c11..45a5727 100644
> --- a/framework/results.py
> +++ b/framework/results.py
> @@ -24,7 +24,9 @@
>  from __future__ import (
>      absolute_import, division, print_function, unicode_literals
>  )
> -import collections

First, this is an unrelated change since we already have collections imported,
and creates a lot of churn in the patch. Second, I don't think this is an
improvement, since it puts more things in the root namespace which are not local
functions or frequently used.

> +from collections import defaultdict
> +from collections import OrderedDict
> +from collections import MutableMapping
>  import copy
>  import datetime
>  
> @@ -38,7 +40,7 @@ __all__ = [
>  ]
>  
>  
> -class Subtests(collections.MutableMapping):
> +class Subtests(MutableMapping):
>      """A dict-like object that stores Statuses as values."""
>      def __init__(self, dict_=None):
>          self.__container = {}
> @@ -301,8 +303,8 @@ class TestrunResult(object):
>          self.clinfo = None
>          self.lspci = None
>          self.time_elapsed = TimeAttribute()
> -        self.tests = collections.OrderedDict()
> -        self.totals = collections.defaultdict(Totals)
> +        self.tests = OrderedDict()
> +        self.totals = defaultdict(Totals)
>  
>      def get_result(self, key):
>          """Get the result of a test or subtest.
> @@ -350,7 +352,7 @@ class TestrunResult(object):
>          if not self.totals:
>              self.calculate_group_totals()
>          rep = copy.copy(self.__dict__)
> -        rep['tests'] = {k: t.to_json() for k, t in six.iteritems(self.tests)}
> +        rep['tests'] = OrderedDict([ ( k, t.to_json() ) for k, t in six.iteritems(self.tests)] )

This is not an "OrderedDict comprehension", what this actually does is create a
list in memeory, and then copy that into an OrderedDict. It should be sufficient
to do:
OrderedDict(k, t.to_json() for k, t in six.iteritems(self.tests))

Please also note that we use PEP8 style in the python portion of the code, there
are no spaces around braces or parens.

>          rep['__type__'] = 'TestrunResult'
>          return rep
>  
> @@ -378,8 +380,8 @@ class TestrunResult(object):
>          if 'time_elapsed' in dict_:
>              setattr(res, 'time_elapsed',
>                      TimeAttribute.from_dict(dict_['time_elapsed']))
> -        res.tests = {n: TestResult.from_dict(t)
> -                     for n, t in six.iteritems(dict_['tests'])}
> +        res.tests = OrderedDict([ (n, TestResult.from_dict(t))
> +                     for n, t in six.iteritems(dict_['tests']) ])

The same here as above

>  
>          if not 'totals' in dict_ and not _no_totals:
>              res.calculate_group_totals()
> -- 
> 2.9.3
> 
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/piglit
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20170209/ad85b4c6/attachment.sig>


More information about the Piglit mailing list