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

Unified Diff: gm/rebaseline_server/writable_expectations.py

Issue 856103002: Revert "Revert "delete old things!"" (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 11 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/writable_expectations.py
diff --git a/gm/rebaseline_server/writable_expectations.py b/gm/rebaseline_server/writable_expectations.py
deleted file mode 100644
index 09b9cf76896906786b2e86861201778c437f26ca..0000000000000000000000000000000000000000
--- a/gm/rebaseline_server/writable_expectations.py
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/python
-
-"""
-Copyright 2014 Google Inc.
-
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
-
-Expectations on local disk that we can modify.
-"""
-
-# System-level imports
-import logging
-import os
-import re
-
-# Must fix up PYTHONPATH before importing from within Skia
-import rs_fixpypath # pylint: disable=W0611
-
-# Imports from within Skia
-from py.utils import git_utils
-import compare_rendered_pictures
-import gm_json
-import imagepair
-import results
-
-FILEPATH_RE = re.compile('.+/' + gm_json.IMAGE_FILENAME_PATTERN)
-
-SKIA_REPO = os.path.abspath(os.path.join(
- os.path.dirname(__file__), os.pardir, os.pardir, '.git'))
-
-
-class WritableExpectations(git_utils.NewGitCheckout):
- """Expectations on local disk that we can modify."""
-
- def __init__(self, set_descriptions):
- """Creates a sandbox on local disk containing writable expectations.
-
- You must use the 'with' statement to create this object in such a way that
- it cleans up after itself:
-
- with WritableExpectations(*args) as writable_expectations:
- # make modifications
- # use the modified results
- # the sandbox on local disk is automatically cleaned up here
-
- Args:
- set_descriptions: SET_DESCRIPTIONS dict describing the set we want to
- update expectations within; this tells us the subdirectory within the
- Skia repo where we keep these expectations, and the commithash at
- which the user evaluated new baselines.
- """
- file_section = set_descriptions[results.KEY__SET_DESCRIPTIONS__SECTION]
- assert file_section == gm_json.JSONKEY_EXPECTEDRESULTS
-
- source_dir = _unicode_to_ascii(
- set_descriptions[results.KEY__SET_DESCRIPTIONS__DIR])
- assert source_dir.startswith(compare_rendered_pictures.REPO_URL_PREFIX)
- repo_subdir = source_dir[len(compare_rendered_pictures.REPO_URL_PREFIX):]
- repo_revision = _unicode_to_ascii(
- set_descriptions[results.KEY__SET_DESCRIPTIONS__REPO_REVISION])
-
- logging.info('Creating a writable Skia checkout at revision "%s"...' %
- repo_revision)
- super(WritableExpectations, self).__init__(
- repository=SKIA_REPO, commit=repo_revision, subdir=repo_subdir)
-
- def modify(self, modifications):
- """Modify the contents of the checkout, using modifications from the UI.
-
- Args:
- modifications: data[KEY__LIVE_EDITS__MODIFICATIONS] coming back from the
- rebaseline_server UI frontend
- """
- logging.info('Reading in dicts from writable Skia checkout in %s ...' %
- self.root)
- dicts = results.BaseComparisons.read_dicts_from_root(self.root)
-
- # Make sure we have expected-results sections in all our output dicts.
- for pathname, adict in dicts.iteritems():
- if not adict:
- adict = {
- # TODO(stephana): These values should be defined as constants
- # somewhere, to be kept in sync between this file and
- # compare_rendered_pictures.py.
- gm_json.JSONKEY_HEADER: {
- gm_json.JSONKEY_HEADER_TYPE: 'ChecksummedImages',
- gm_json.JSONKEY_HEADER_REVISION: 1,
- }
- }
- if not adict.get(gm_json.JSONKEY_EXPECTEDRESULTS, None):
- adict[gm_json.JSONKEY_EXPECTEDRESULTS] = {}
- dicts[pathname] = adict
-
- for modification in modifications:
- expectations = modification[imagepair.KEY__IMAGEPAIRS__EXPECTATIONS]
- _add_image_info_to_expectations(
- expectations=expectations,
- filepath=modification[imagepair.KEY__IMAGEPAIRS__IMAGE_B_URL])
- extra_columns = modification[imagepair.KEY__IMAGEPAIRS__EXTRACOLUMNS]
- dictname = modification[imagepair.KEY__IMAGEPAIRS__SOURCE_JSON_FILE]
- dict_to_modify = dicts[dictname][gm_json.JSONKEY_EXPECTEDRESULTS]
- test_name = extra_columns[compare_rendered_pictures.COLUMN__SOURCE_SKP]
- test_record = dict_to_modify.get(test_name, {})
- if (extra_columns[compare_rendered_pictures.COLUMN__TILED_OR_WHOLE] ==
- compare_rendered_pictures.COLUMN__TILED_OR_WHOLE__TILED):
- test_tiles_list = test_record.get(
- gm_json.JSONKEY_SOURCE_TILEDIMAGES, [])
- tilenum = int(extra_columns[compare_rendered_pictures.COLUMN__TILENUM])
- _replace_list_item(test_tiles_list, tilenum, expectations)
- test_record[gm_json.JSONKEY_SOURCE_TILEDIMAGES] = test_tiles_list
- else:
- test_record[gm_json.JSONKEY_SOURCE_WHOLEIMAGE] = expectations
- dict_to_modify[test_name] = test_record
-
- # Write the modified files back to disk.
- self._write_dicts_to_root(meta_dict=dicts, root=self.root)
-
- def get_diffs(self):
- """Return patchfile describing any modifications to this checkout."""
- return self._run_in_git_root(args=[git_utils.GIT, 'diff'])
-
- @staticmethod
- def _write_dicts_to_root(meta_dict, root):
- """Write out multiple dictionaries in JSON format.
-
- Args:
- meta_dict: a builder-keyed meta-dictionary containing all the JSON
- dictionaries we want to write out
- root: path to root of directory tree within which to write files
- """
- if not os.path.isdir(root):
- raise IOError('no directory found at path %s' % root)
-
- for rel_path in meta_dict.keys():
- full_path = os.path.join(root, rel_path)
- gm_json.WriteToFile(meta_dict[rel_path], full_path)
-
-
-def _unicode_to_ascii(unicode_string):
- """Returns the plain ASCII form of a unicode string.
-
- TODO(stephana): We created this because we get unicode strings out of the
- JSON file, while the git filenames and revision tags are plain ASCII.
- There may be a better way to handle this... maybe set the JSON util to just
- return ASCII strings?
- """
- return unicode_string.encode('ascii', 'ignore')
-
-
-def _replace_list_item(a_list, index, value):
- """Replaces value at index "index" within a_list.
-
- Args:
- a_list: a list
- index: index indicating which item in a_list to replace
- value: value to set a_list[index] to
-
- If a_list does not contain this index, it will be extended with None entries
- to that length.
- """
- length = len(a_list)
- while index >= length:
- a_list.append(None)
- length += 1
- a_list[index] = value
-
-
-def _add_image_info_to_expectations(expectations, filepath):
- """Add JSONKEY_IMAGE_* info to an existing expectations dictionary.
-
- TODO(stephana): This assumes that the checksumAlgorithm and checksumValue
- can be derived from the filepath, which is currently true but may not always
- be true.
-
- Args:
- expectations: the expectations dict to augment
- filepath: relative path to the image file
- """
- (checksum_algorithm, checksum_value) = FILEPATH_RE.match(filepath).groups()
- expectations[gm_json.JSONKEY_IMAGE_CHECKSUMALGORITHM] = checksum_algorithm
- expectations[gm_json.JSONKEY_IMAGE_CHECKSUMVALUE] = checksum_value
- expectations[gm_json.JSONKEY_IMAGE_FILEPATH] = filepath

Powered by Google App Engine
This is Rietveld 408576698