Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Unified Diff: gm/rebaseline_server/results.py

Issue 265793013: make compare_rendered_pictures process render_pictures's new JSON output format (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add Eric's idea as comment Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gm/rebaseline_server/results.py
diff --git a/gm/rebaseline_server/results.py b/gm/rebaseline_server/results.py
index 255dfa31e2f7e55f1540f5e95b7bc200a196db2f..461e7463a6dd281d0ca16820d4070b4ce365107f 100755
--- a/gm/rebaseline_server/results.py
+++ b/gm/rebaseline_server/results.py
@@ -190,20 +190,25 @@ class BaseComparisons(object):
return False
return True
- def _read_dicts_from_root(self, root, pattern='*.json'):
+ def _read_builder_dicts_from_root(self, root, pattern='*.json'):
"""Read all JSON dictionaries within a directory tree.
+ Skips any dictionaries belonging to a builder we have chosen to ignore.
+
Args:
root: path to root of directory tree
pattern: which files to read within root (fnmatch-style pattern)
Returns:
A meta-dictionary containing all the JSON dictionaries found within
- the directory tree, keyed by the builder name of each dictionary.
+ the directory tree, keyed by builder name (the basename of the directory
+ where each JSON dictionary was found).
Raises:
IOError if root does not refer to an existing directory
"""
+ # I considered making this call _read_dicts_from_root(), but I decided
+ # it was better to prune out the ignored builders within the os.walk().
if not os.path.isdir(root):
raise IOError('no directory found at path %s' % root)
meta_dict = {}
@@ -212,8 +217,34 @@ class BaseComparisons(object):
builder = os.path.basename(dirpath)
if self._ignore_builder(builder):
continue
- fullpath = os.path.join(dirpath, matching_filename)
- meta_dict[builder] = gm_json.LoadFromFile(fullpath)
+ full_path = os.path.join(dirpath, matching_filename)
+ meta_dict[builder] = gm_json.LoadFromFile(full_path)
+ return meta_dict
+
+ def _read_dicts_from_root(self, root, pattern='*.json'):
+ """Read all JSON dictionaries within a directory tree.
+
+ Args:
+ root: path to root of directory tree
+ pattern: which files to read within root (fnmatch-style pattern)
+
+ Returns:
+ A meta-dictionary containing all the JSON dictionaries found within
+ the directory tree, keyed by the pathname (relative to root) of each JSON
+ dictionary.
+
+ Raises:
+ IOError if root does not refer to an existing directory
+ """
+ if not os.path.isdir(root):
+ raise IOError('no directory found at path %s' % root)
+ meta_dict = {}
+ for abs_dirpath, dirnames, filenames in os.walk(root):
+ rel_dirpath = os.path.relpath(abs_dirpath, root)
+ for matching_filename in fnmatch.filter(filenames, pattern):
+ abs_path = os.path.join(abs_dirpath, matching_filename)
+ rel_path = os.path.join(rel_dirpath, matching_filename)
+ meta_dict[rel_path] = gm_json.LoadFromFile(abs_path)
return meta_dict
@staticmethod
@@ -240,18 +271,18 @@ class BaseComparisons(object):
Input:
{
- "failed" : {
- "changed.png" : [ "bitmap-64bitMD5", 8891695120562235492 ],
+ KEY_A1 : {
+ KEY_B1 : VALUE_B1,
},
- "no-comparison" : {
- "unchanged.png" : [ "bitmap-64bitMD5", 11092453015575919668 ],
+ KEY_A2 : {
+ KEY_B2 : VALUE_B2,
}
}
Output:
{
- "changed.png" : [ "bitmap-64bitMD5", 8891695120562235492 ],
- "unchanged.png" : [ "bitmap-64bitMD5", 11092453015575919668 ],
+ KEY_B1 : VALUE_B1,
+ KEY_B2 : VALUE_B2,
}
If this would result in any repeated keys, it will raise an Exception.
@@ -263,3 +294,13 @@ class BaseComparisons(object):
raise Exception('duplicate key %s in combine_subdicts' % subdict_key)
output_dict[subdict_key] = subdict_value
return output_dict
+
+ @staticmethod
+ def get_multilevel(input_dict, *keys):
+ """ Returns input_dict[key1][key2][...], or None if any key is not found.
+ """
+ for key in keys:
+ if input_dict == None:
+ return None
+ input_dict = input_dict.get(key, None)
+ return input_dict

Powered by Google App Engine
This is Rietveld 408576698