Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013-2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2013-2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import contextlib | 5 import contextlib |
| 6 import functools | 6 import functools |
| 7 import os | 7 import os |
| 8 import sys | 8 import sys |
| 9 import traceback | 9 import traceback |
| 10 import urllib | 10 import urllib |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 27 if self.owner_module is None: | 27 if self.owner_module is None: |
| 28 raise ModuleInjectionError( | 28 raise ModuleInjectionError( |
| 29 "RecipeApi has no dependency %r. (Add it to DEPS?)" % (key,)) | 29 "RecipeApi has no dependency %r. (Add it to DEPS?)" % (key,)) |
| 30 else: | 30 else: |
| 31 raise ModuleInjectionError( | 31 raise ModuleInjectionError( |
| 32 "Recipe Module %r has no dependency %r. (Add it to __init__.py:DEPS?)" | 32 "Recipe Module %r has no dependency %r. (Add it to __init__.py:DEPS?)" |
| 33 % (self.owner_module.name, key)) | 33 % (self.owner_module.name, key)) |
| 34 | 34 |
| 35 | 35 |
| 36 class Placeholder(object): | 36 class Placeholder(object): |
| 37 DEFAULT_ID = object() | |
| 38 | |
| 37 """Base class for json placeholders. Do not use directly.""" | 39 """Base class for json placeholders. Do not use directly.""" |
| 38 def __init__(self): | 40 def __init__(self, id=None): |
|
iannucci
2016/03/10 03:17:42
I think you can do
id=DEFAULT_ID
or maybe
stgao
2016/03/10 20:34:23
No. We can't do that, because subclasses will call
| |
| 39 self.name_pieces = None | 41 self.name_pieces = None |
| 42 self.id = id or Placeholder.DEFAULT_ID | |
| 40 | 43 |
| 41 @property | 44 @property |
| 42 def backing_file(self): # pragma: no cover | 45 def backing_file(self): # pragma: no cover |
| 43 """Return path to a temp file that holds or receives the data. | 46 """Return path to a temp file that holds or receives the data. |
| 44 | 47 |
| 45 Valid only after 'render' has been called. | 48 Valid only after 'render' has been called. |
| 46 """ | 49 """ |
| 47 raise NotImplementedError | 50 raise NotImplementedError |
| 48 | 51 |
| 49 def render(self, test): # pragma: no cover | 52 def render(self, test): # pragma: no cover |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 61 | 64 |
| 62 May optionally modify presentation as a side-effect. | 65 May optionally modify presentation as a side-effect. |
| 63 """ | 66 """ |
| 64 pass | 67 pass |
| 65 | 68 |
| 66 @property | 69 @property |
| 67 def name(self): | 70 def name(self): |
| 68 assert self.name_pieces | 71 assert self.name_pieces |
| 69 return "%s.%s" % self.name_pieces | 72 return "%s.%s" % self.name_pieces |
| 70 | 73 |
| 74 @property | |
| 75 def id_name(self): | |
| 76 if self.id == self.DEFAULT_ID: | |
|
iannucci
2016/03/10 03:17:42
use the `is` keyword for comparison (compares poin
stgao
2016/03/10 20:34:23
Done.
| |
| 77 return self.name | |
| 78 else: | |
| 79 return "%s.%s" % (self.id, self.name) | |
| 71 | 80 |
| 72 def static_wraps(func): | 81 def static_wraps(func): |
| 73 wrapped_fn = func | 82 wrapped_fn = func |
| 74 if isinstance(func, staticmethod): | 83 if isinstance(func, staticmethod): |
| 75 # __get__(obj) is the way to get the function contained in the staticmethod. | 84 # __get__(obj) is the way to get the function contained in the staticmethod. |
| 76 # python 2.7+ has a __func__ member, but previous to this the attribute | 85 # python 2.7+ has a __func__ member, but previous to this the attribute |
| 77 # doesn't exist. It doesn't matter what the obj is, as long as it's not | 86 # doesn't exist. It doesn't matter what the obj is, as long as it's not |
| 78 # None. | 87 # None. |
| 79 wrapped_fn = func.__get__(object) | 88 wrapped_fn = func.__get__(object) |
| 80 return functools.wraps(wrapped_fn) | 89 return functools.wraps(wrapped_fn) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 self.lines[-1].write(s) | 173 self.lines[-1].write(s) |
| 165 break | 174 break |
| 166 self.lines[-1].write(s[:i]) | 175 self.lines[-1].write(s[:i]) |
| 167 self.lines[-1] = self.lines[-1].getvalue() | 176 self.lines[-1] = self.lines[-1].getvalue() |
| 168 self.lines.append(StringIO()) | 177 self.lines.append(StringIO()) |
| 169 s = s[i+1:] | 178 s = s[i+1:] |
| 170 | 179 |
| 171 def close(self): | 180 def close(self): |
| 172 if not isinstance(self.lines[-1], basestring): | 181 if not isinstance(self.lines[-1], basestring): |
| 173 self.lines[-1] = self.lines[-1].getvalue() | 182 self.lines[-1] = self.lines[-1].getvalue() |
| OLD | NEW |