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

Side by Side Diff: scripts/slave/recipe_util.py

Issue 23889036: Refactor the way that TestApi works so that it is actually useful. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: rebase Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 import functools
2 import os
3
4
5 SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
6 BUILD_ROOT = os.path.dirname(os.path.dirname(SCRIPT_PATH))
7 ROOT_PATH = os.path.abspath(os.path.join(
8 SCRIPT_PATH, os.pardir, os.pardir, os.pardir))
9 BASE_DIRS = [
10 SCRIPT_PATH,
11 os.path.join(ROOT_PATH, 'build_internal', 'scripts', 'slave'),
12 os.path.join(ROOT_PATH, 'build_internal', 'scripts', 'slave-internal')
13 ]
14 MODULE_DIRS = lambda: [os.path.join(x, 'recipe_modules') for x in BASE_DIRS]
15 RECIPE_DIRS = lambda: [os.path.join(x, 'recipes') for x in BASE_DIRS]
16
17
18 class ModuleInjectionSite(object):
19 pass
20
21
22 class Placeholder(object):
23 """Base class for json placeholders. Do not use directly."""
24 def __init__(self, name, mod_name):
25 self._name_pieces = (mod_name, name)
26 self._name = "%s.%s" % self._name_pieces
27
28 def render(self, test): # pragma: no cover
29 """Return [cmd items]*"""
30 raise NotImplementedError
31
32 def result(self, presentation, test):
33 """Called after step completion.
34
35 Args:
36 presentation (StepPresentation) - for the current step.
37 test (PlaceholderTestData) - test data for this placeholder.
38
39 Returns value to add to step result.
40
41 May optionally modify presentation as a side-effect.
42 """
43 pass
44
45 @property
46 def name(self):
47 return self._name
agable 2013/09/21 02:05:31 _name should always be a function of name_pieces,
iannucci 2013/09/21 03:12:34 Yeah, ok, good point. Done.
48
49 @property
50 def name_pieces(self):
51 return self._name_pieces
52
53
54 def wrap_followup(kwargs, pre=False):
55 """
56 Decorator for a new followup_fn.
57
58 Will pop the existing fn out of kwargs (if any), and return a decorator for
59 the new folloup_fn.
60
61 Args:
62 kwargs - dictionary possibly containing folloup_fn
63 pre - If true, the old folloup_fn is called before the wrapped function.
64 Otherwise, the old followup_fn is called after the wrapped function.
65 """
66 null_fn = lambda _: None
67 old_followup = kwargs.pop('followup_fn', null_fn)
68 def decorator(f):
69 @functools.wraps(f)
70 def _inner(step_result):
71 if pre:
72 old_followup(step_result)
73 f(step_result)
74 else:
75 f(step_result)
76 old_followup(step_result)
77 if old_followup is not null_fn:
78 _inner.__name__ += '[%s]' % old_followup.__name__
79 return _inner
80 return decorator
81
82
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698