| 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 """Base class for json placeholders. Do not use directly.""" | 37 """Base class for command line argument placeholders. Do not use directly.""" |
| 38 def __init__(self): | 38 def __init__(self): |
| 39 self.name_pieces = None | 39 self.name_pieces = None |
| 40 | 40 |
| 41 @property | 41 @property |
| 42 def backing_file(self): # pragma: no cover | 42 def backing_file(self): # pragma: no cover |
| 43 """Return path to a temp file that holds or receives the data. | 43 """Return path to a temp file that holds or receives the data. |
| 44 | 44 |
| 45 Valid only after 'render' has been called. | 45 Valid only after 'render' has been called. |
| 46 """ | 46 """ |
| 47 raise NotImplementedError | 47 raise NotImplementedError |
| 48 | 48 |
| 49 def render(self, test): # pragma: no cover | 49 def render(self, test): # pragma: no cover |
| 50 """Return [cmd items]*""" | 50 """Return [cmd items]*""" |
| 51 raise NotImplementedError | 51 raise NotImplementedError |
| 52 | 52 |
| 53 def result(self, presentation, test): | 53 def result(self, presentation, test): |
| 54 """Called after step completion. | 54 """Called after step completion. |
| 55 | 55 |
| 56 Args: | 56 Args: |
| 57 presentation (StepPresentation) - for the current step. | 57 presentation (StepPresentation) - for the current step. |
| 58 test (PlaceholderTestData) - test data for this placeholder. | 58 test (PlaceholderTestData) - test data for this placeholder. |
| 59 | 59 |
| 60 Returns value to add to step result. | |
| 61 | |
| 62 May optionally modify presentation as a side-effect. | 60 May optionally modify presentation as a side-effect. |
| 63 """ | 61 """ |
| 64 pass | 62 pass |
| 65 | 63 |
| 66 @property | 64 @property |
| 67 def name(self): | 65 def name(self): |
| 68 assert self.name_pieces | 66 assert self.name_pieces |
| 69 return "%s.%s" % self.name_pieces | 67 return "%s.%s" % self.name_pieces |
| 70 | 68 |
| 71 | 69 |
| 70 class InputPlaceholder(Placeholder): |
| 71 """Base class for json/raw_io input placeholders. Do not use directly.""" |
| 72 def result(self, presentation, test): |
| 73 """Returned value will be discarded.""" |
| 74 pass |
| 75 result.__doc__ = Placeholder.result.__doc__ |
| 76 |
| 77 |
| 78 class OutputPlaceholder(Placeholder): |
| 79 """Base class for json/raw_io output placeholders. Do not use directly.""" |
| 80 def result(self, presentation, test): |
| 81 """Returned value will be added to the step result.""" |
| 82 pass |
| 83 result.__doc__ = Placeholder.result.__doc__ |
| 84 |
| 85 |
| 72 def static_wraps(func): | 86 def static_wraps(func): |
| 73 wrapped_fn = func | 87 wrapped_fn = func |
| 74 if isinstance(func, staticmethod): | 88 if isinstance(func, staticmethod): |
| 75 # __get__(obj) is the way to get the function contained in the staticmethod. | 89 # __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 | 90 # 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 | 91 # doesn't exist. It doesn't matter what the obj is, as long as it's not |
| 78 # None. | 92 # None. |
| 79 wrapped_fn = func.__get__(object) | 93 wrapped_fn = func.__get__(object) |
| 80 return functools.wraps(wrapped_fn) | 94 return functools.wraps(wrapped_fn) |
| 81 | 95 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 self.lines[-1].write(s) | 178 self.lines[-1].write(s) |
| 165 break | 179 break |
| 166 self.lines[-1].write(s[:i]) | 180 self.lines[-1].write(s[:i]) |
| 167 self.lines[-1] = self.lines[-1].getvalue() | 181 self.lines[-1] = self.lines[-1].getvalue() |
| 168 self.lines.append(StringIO()) | 182 self.lines.append(StringIO()) |
| 169 s = s[i+1:] | 183 s = s[i+1:] |
| 170 | 184 |
| 171 def close(self): | 185 def close(self): |
| 172 if not isinstance(self.lines[-1], basestring): | 186 if not isinstance(self.lines[-1], basestring): |
| 173 self.lines[-1] = self.lines[-1].getvalue() | 187 self.lines[-1] = self.lines[-1].getvalue() |
| OLD | NEW |