• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from perf_insights.mre import failure as failure_module
6
7class DuplicateKeyError(Exception):
8  """Raised if an attempt is made to set a key more than once."""
9
10
11class MreResult(object):
12
13  def __init__(self, failures=None, pairs=None):
14    if failures is None:
15      failures = []
16    if pairs is None:
17      pairs = {}
18    self._failures = failures
19    self._pairs = pairs
20
21  @property
22  def failures(self):
23    return self._failures
24
25  @property
26  def pairs(self):
27    return self._pairs
28
29  def AsDict(self):
30    d = {
31        'pairs': self._pairs
32    }
33
34    if self.failures:
35      d['failures'] = [failure.AsDict() for failure in self._failures]
36
37    return d
38
39  def AddFailure(self, failure):
40    if not isinstance(failure, failure_module.Failure):
41      raise ValueError('Attempted to add %s as Failure', failure)
42
43    self._failures.append(failure)
44
45  def AddPair(self, key, value):
46    if key in self._pairs:
47      raise DuplicateKeyError('Key ' + key + 'already exists in result.')
48    self._pairs[key] = value
49