[Piglit] [PATCH 4/7] status.py: Adds a new status class and subclasses

Kenneth Graunke kenneth at whitecape.org
Mon Oct 14 08:13:48 CEST 2013


On 09/27/2013 02:39 PM, Dylan Baker wrote:
> These status classes are intended to replace the string statuses
> currently used by piglit summary.
> 
> They give a couple of very nice advantages, first, they can be directly
> compared to each other to determine whether a status is worse than
> another status. These statuses can also be compared to any object
> implementing the __int__ magic method.
> 
> This will allow us to remove a number of special functions for sorting
> representations of statuses.
> 
> v2: - Use larger numbers for the statuses, this should make adding
>       addtional statuses easier, since there is room between the
>       statuses.
>     - Add a class for the "Not Run" status
>     - Adds classes for dmesg-warn and dmesg-fail
>     - Change statuses to match the standard set in the framework test
> 
> Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
> ---
>  framework/status.py | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 118 insertions(+)
>  create mode 100644 framework/status.py
> 
> diff --git a/framework/status.py b/framework/status.py
> new file mode 100644
> index 0000000..43b807b
> --- /dev/null
> +++ b/framework/status.py
> @@ -0,0 +1,118 @@
> +# Copyright (c) 2013 Intel Corporation
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the "Software"),
> +# to deal in the Software without restriction, including without limitation
> +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +# and/or sell copies of the Software, and to permit persons to whom the
> +# Software is furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> +# IN THE SOFTWARE.
> +
> +
> +class Status(object):
> +    """
> +    A simple class for representing the output values of tests.
> +
> +    This is a base class, and should not be directly called. Instead a child
> +    class should be created and called. This module provides 5 of them: Skip,
> +    Pass, Warn, Fail, and Crash.

There are actually 8 with the dmesg ones :)

> +    """
> +
> +    # Using __slots__ allows us to implement the flyweight method, limiting the
> +    # memory consumed for creating tens of thousands of these objects.
> +    __slots__ = ['name', 'value']
> +
> +    def __init__(self):
> +        raise NotImplementedError
> +
> +    def split(self, spliton):
> +        return (self.name.split(spliton))
> +
> +    def __repr__(self):
> +        return self.name
> +
> +    def __str__(self):
> +        return str(self.name)
> +
> +    def __unicode__(self):
> +        return unicode(self.name)
> +
> +    def __lt__(self, other):
> +        return int(self) < int(other)
> +
> +    def __le__(self, other):
> +        return int(self) <= int(other)
> +
> +    def __eq__(self, other):
> +        return int(self) == int(other)
> +
> +    def __ne__(self, other):
> +        return int(self) != int(other)
> +
> +    def __ge__(self, other):
> +        return int(self) >= int(other)
> +
> +    def __gt__(self, other):
> +        return int(self) > int(other)
> +
> +    def __int__(self):
> +        return self.value

Since these somewhat arbitrary looking numbers determine the ordering
from best to worst, you might want to import your comment from patch 1,
which lists them in order.

With the trivial comment fix, this is
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

> +
> +class NotRun(Status):
> +    def __init__(self):
> +        self.name = 'Not Run'
> +        self.value = 0
> +
> +
> +class Pass(Status):
> +    def __init__(self):
> +        self.name = 'pass'
> +        self.value = 10
> +
> +
> +class DmesgWarn(Status):
> +    def __init__(self):
> +        self.name = 'dmesg-warn'
> +        self.value = 20
> +
> +
> +class Warn(Status):
> +    def __init__(self):
> +        self.name = 'warn'
> +        self.value = 25
> +
> +
> +class DmesgFail(Status):
> +    def __init__(self):
> +        self.name = 'dmesg-fail'
> +        self.value = 30
> +
> +
> +class Fail(Status):
> +    def __init__(self):
> +        self.name = 'fail'
> +        self.value = 35
> +
> +
> +class Crash(Status):
> +    def __init__(self):
> +        self.name = 'crash'
> +        self.value = 40
> +
> +
> +class Skip(Status):
> +    def __init__(self):
> +        self.name = 'skip'
> +        self.value = 50
> 



More information about the Piglit mailing list