[Piglit] [PATCH 4/4] Python: Remove code duplication
Dylan Baker
baker.dylan.c at gmail.com
Fri Aug 16 09:21:36 PDT 2013
Actually, this patch breaks a bunch of stuff. I'll rework this and send it
out later. The rest of the patches are fine.
On Fri, Aug 16, 2013 at 9:09 AM, Dylan Baker <baker.dylan.c at gmail.com>wrote:
> This patch removes the Result class from Summary, and the
> loadTestResults function from core. It does this by integrating the
> functionality into TestrunResult.
>
> Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
> ---
> framework/core.py | 62
> ++++++++++++++++++++++++-------------------------
> framework/summary.py | 34 +++------------------------
> piglit-summary-junit.py | 2 +-
> 3 files changed, 34 insertions(+), 64 deletions(-)
>
> diff --git a/framework/core.py b/framework/core.py
> index 680f3ab..2714bbf 100644
> --- a/framework/core.py
> +++ b/framework/core.py
> @@ -261,7 +261,7 @@ class GroupResult(dict):
>
>
> class TestrunResult:
> - def __init__(self):
> + def __init__(self, file):
> self.serialized_keys = ['options',
> 'name',
> 'tests',
> @@ -275,6 +275,32 @@ class TestrunResult:
> self.time_elapsed = None
> self.tests = {}
>
> + self._load(file)
> + self._parseFile()
> +
> + def _load(self, result):
> + """
> + Private: Load a result file, and store that file object as an
> + attribute.
> + """
> + # First assume that result is a main.zip file, if that fails
> assume
> + # that it is a main file. If that fails, try the same file order,
> but
> + # looking in a directory
> + try:
> + try:
> + zip = zipfile.ZipFile(result, 'r')
> + self.file = zip.open('main', 'r')
> + except zipfile.BadZipfile:
> + with open(result, 'r') as file:
> + self.file = file
> + except IOError:
> + try:
> + zip = zipfile.ZipFile(os.path.join(result, 'main.zip'),
> 'r')
> + self.file = zip.open('main', 'r')
> + except zipfile.BadZipfile:
> + with open(os.path.join(result, 'main'), 'r') as file:
> + self.file = file
> +
> def __repairFile(self, file):
> '''
> Reapair JSON file if necessary
> @@ -343,13 +369,13 @@ class TestrunResult:
> raw_dict = dict([(k, self.__dict__[k]) for k in keys])
> json.dump(raw_dict, file, indent=JSONWriter.INDENT)
>
> - def parseFile(self, file):
> + def _parseFile(self):
> # Attempt to open the json file normally, if it fails then
> attempt to
> # repair it.
> try:
> - raw_dict = json.load(file)
> + raw_dict = json.load(self.file)
> except ValueError:
> - raw_dict = json.load(self.__repairFile(file))
> + raw_dict = json.load(self.__repairFile(self.file))
>
> # Check that only expected keys were unserialized.
> for key in raw_dict:
> @@ -598,34 +624,6 @@ def loadTestProfile(filename):
> return ns['profile']
>
>
> -def loadTestResults(relativepath):
> - """
> - Takes a result file as an argument, opens it, and creates a
> TestrunResult
> - object out of it, which it returns
> - """
> - path = os.path.realpath(relativepath)
> - testrun = TestrunResult()
> -
> - try:
> - try:
> - zip = zipfile.ZipFile(os.path.join(path, 'main.zip'), 'r')
> - file = zip.open('main', 'r')
> - except zipfile.BadZipfile:
> - with open(os.path.join(path, 'main')) as f:
> - file = f
> - except IOError:
> - try:
> - zip = zipfile.ZipFile(path, 'r')
> - file = zip.open('main', 'r')
> - except zipfile.BadZipfile:
> - with open(path) as f:
> - file = f
> -
> - testrun.parseFile(file)
> - assert(testrun.name)
> - return testrun
> -
> -
> # Error messages to be ignored
> Test.ignoreErrors = map(re.compile,
> ["couldn't open libtxc_dxtn.so",
> diff --git a/framework/summary.py b/framework/summary.py
> index 49b53b9..8e4871a 100644
> --- a/framework/summary.py
> +++ b/framework/summary.py
> @@ -22,7 +22,6 @@
> import os
> import os.path as path
> import string
> -import zipfile
> from itertools import izip_longest
> from shutil import copy
> from json import loads
> @@ -35,33 +34,6 @@ __all__ = [
> ]
>
>
> -class Result(core.TestrunResult):
> - """
> - Object that opens, reads, and stores the data in a resultfile.
> - """
> - def __init__(self, resultfile):
> - # Run the init from TestrunResult
> - core.TestrunResult.__init__(self)
> -
> - # Attempt to load the json file, first looke for a zipped
> version, and
> - # if that doesn't exist look for an unziped version. Assume first
> that
> - # a directory was prvided, and then that a file was provided
> - try:
> - try:
> - zip = zipfile.ZipFile(resultfile)
> - result = self.parseFile(zip.open('main', 'r'))
> - except zipfile.BadZipfile:
> - with open(resultfile, 'r') as file:
> - result = self.parseFile(file)
> - except IOError:
> - try:
> - zip = zipfile.ZipFile(path.join(resultfile, 'main.zip'))
> - result = self.parseFile(zip.open('main', 'r'))
> - except IOError:
> - with open(path.join(resultfile, 'main'), 'r') as file:
> - result = self.parseFile(file)
> -
> -
> class HTMLIndex(list):
> """
> Builds HTML output to be passed to the index mako template, which
> will be
> @@ -387,9 +359,9 @@ class Summary:
>
> return counts, status
>
> - # Create a Result object for each piglit result and append it to
> the
> - # results list
> - self.results = [Result(i) for i in resultfiles]
> + # Create a TestrunResult object for each piglit result and append
> it to
> + # the results list
> + self.results = [core.TestrunResult(i) for i in resultfiles]
>
> self.status = {}
> self.fractions = {}
> diff --git a/piglit-summary-junit.py b/piglit-summary-junit.py
> index d9e4b9c..247de9b 100755
> --- a/piglit-summary-junit.py
> +++ b/piglit-summary-junit.py
> @@ -267,7 +267,7 @@ class Writer:
> self.path = []
>
> def write(self, arg):
> - results = [core.loadTestResults(arg)]
> + results = [core.TestrunResult(arg)]
> summary = Summary(results)
>
> self.report.start()
> --
> 1.8.1.5
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20130816/8076d9f3/attachment-0001.html>
More information about the Piglit
mailing list