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

Side by Side Diff: gm/rebaseline_server/imagepair.py

Issue 157593006: rebaseline_server: add ImagePair class, a step towards new intermediate JSON schema (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: style fix Created 6 years, 10 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 unified diff | Download patch
« no previous file with comments | « gm/rebaseline_server/imagediffdb_test.py ('k') | gm/rebaseline_server/imagepair_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2
3 """
4 Copyright 2014 Google Inc.
5
6 Use of this source code is governed by a BSD-style license that can be
7 found in the LICENSE file.
8
9 ImagePair class (see class docstring for details)
10 """
11
12 import posixpath
13
14 # Keys used within ImagePair dictionary representations.
15 KEY_DIFFERENCE_DATA = 'differenceData'
16 KEY_EXPECTATIONS_DATA = 'expectationsData'
17 KEY_EXTRA_COLUMN_VALUES = 'extraColumnValues'
18 KEY_IMAGE_A_URL = 'imageAUrl'
19 KEY_IMAGE_B_URL = 'imageBUrl'
20 KEY_IS_DIFFERENT = 'isDifferent'
21
22
23 class ImagePair(object):
24 """
25 Describes a pair of images, along with optional metadata (pixel difference
26 metrics, whether to ignore mismatches, etc.)
27 """
28
29 def __init__(self, image_diff_db,
30 base_url, imageA_relative_url, imageB_relative_url,
31 expectations=None, extra_columns=None):
32 """
33 Args:
34 image_diff_db: ImageDiffDB instance we use to generate/store image diffs
35 base_url: base of all image URLs
36 imageA_relative_url: URL pointing at an image, relative to base_url
37 imageB_relative_url: URL pointing at an image, relative to base_url
38 expectations: optional dictionary containing expectations-specific
39 metadata (ignore-failure, bug numbers, etc.)
40 extra_columns: optional dictionary containing more metadata (test name,
41 builder name, etc.)
42 """
43 self.base_url = base_url
44 self.imageA_relative_url = imageA_relative_url
45 self.imageB_relative_url = imageB_relative_url
46 self.expectations_dict = expectations
47 self.extra_columns_dict = extra_columns
48 if imageA_relative_url == imageB_relative_url:
49 self.diff_record = None
50 else:
51 # TODO(epoger): Rather than blocking until image_diff_db can read in
52 # the image pair and generate diffs, it would be better to do it
53 # asynchronously: tell image_diff_db to download a bunch of file pairs,
54 # and only block later if we're still waiting for diff_records to come
55 # back.
56 image_diff_db.add_image_pair(
57 expected_image_locator=imageA_relative_url,
58 expected_image_url=posixpath.join(base_url, imageA_relative_url),
59 actual_image_locator=imageB_relative_url,
60 actual_image_url=posixpath.join(base_url, imageB_relative_url))
61 self.diff_record = image_diff_db.get_diff_record(
62 expected_image_locator=imageA_relative_url,
63 actual_image_locator=imageB_relative_url)
64
65 def as_dict(self):
66 """
67 Return a dictionary describing this ImagePair, as needed when constructing
68 the JSON representation. Uses the KEY_* constants as keys.
69 """
70 asdict = {
71 KEY_IMAGE_A_URL: self.imageA_relative_url,
72 KEY_IMAGE_B_URL: self.imageB_relative_url,
73 }
74 if self.expectations_dict:
75 asdict[KEY_EXPECTATIONS_DATA] = self.expectations_dict
76 if self.extra_columns_dict:
77 asdict[KEY_EXTRA_COLUMN_VALUES] = self.extra_columns_dict
78 if self.diff_record and (self.diff_record.get_num_pixels_differing() > 0):
79 asdict[KEY_IS_DIFFERENT] = True
80 asdict[KEY_DIFFERENCE_DATA] = self.diff_record.as_dict()
81 else:
82 asdict[KEY_IS_DIFFERENT] = False
83 return asdict
OLDNEW
« no previous file with comments | « gm/rebaseline_server/imagediffdb_test.py ('k') | gm/rebaseline_server/imagepair_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698