NAK this. I just noticed the problem still exists with this patch
On Fri, May 31, 2013 at 4:51 PM, Dylan Baker <[email protected]>wrote: > The checking in TestrunResult to determine if a file was proper json or > not is very fragile: it assumes that the last line of the file will be > }. Sometimes this triggers and rebuilds a valid json file, dropping the > last test and resulting in python overhead. > > This patch replaces that check with a try/except block. This block > attempts to load the json file with json.loads, and on failure attempts > to fix the json. > > Signed-off-by: Dylan Baker <[email protected]> > --- > framework/core.py | 42 ++++++++++++++++++++++++------------------ > 1 file changed, 24 insertions(+), 18 deletions(-) > > diff --git a/framework/core.py b/framework/core.py > index 14a8161..2c06d5e 100644 > --- a/framework/core.py > +++ b/framework/core.py > @@ -301,11 +301,6 @@ class TestrunResult: > lines = file.readlines() > file.seek(saved_position) > > - if lines[-1] == '}': > - # JSON object was closed properly. No repair is > - # necessary. > - return file > - > # JSON object was not closed properly. > # > # To repair the file, we execute these steps: > @@ -353,19 +348,30 @@ class TestrunResult: > json.dump(raw_dict, file, indent=JSONWriter.INDENT) > > def parseFile(self, file): > - file = self.__repairFile(file) > - raw_dict = json.load(file) > - > - # Check that only expected keys were unserialized. > - for key in raw_dict: > - if key not in self.serialized_keys: > - raise Exception('unexpected key in results file: ' + > str(key)) > - > - self.__dict__.update(raw_dict) > - > - # Replace each raw dict in self.tests with a TestResult. > - for (path, result) in self.tests.items(): > - self.tests[path] = TestResult(result) > + # Attempt to open the json file raw, if it fails then attempt to > repair > + # it. > + try: > + results = json.loads(file) > + self.name = results.name > + self.glxinfo = results.glxinfo > + self.lspci = results.lspci > + self.time_elapsed = results.time_elapsed > + self.tests = results.tests > + except TypeError: > + file = self.__repairFile(file) > + raw_dict = json.load(file) > + > + # Check that only expected keys were unserialized. > + for key in raw_dict: > + if key not in self.serialized_keys: > + raise Exception('unexpected key in results file: ', > + str(key)) > + > + self.__dict__.update(raw_dict) > + > + # Replace each raw dict in self.tests with a TestResult. > + for (path, result) in self.tests.items(): > + self.tests[path] = TestResult(result) > > > ############################################################################# > ##### Generic Test classes > -- > 1.8.1.4 > >
_______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
