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

Side by Side Diff: recipe_engine/recipe_api.py

Issue 2265673002: Add LogDog / annotation protobuf support. (Closed) Base URL: https://github.com/luci/recipes-py@step-formal-struct
Patch Set: Code review comments. Created 4 years, 2 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
OLDNEW
1 # Copyright 2016 The LUCI Authors. All rights reserved. 1 # Copyright 2016 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0 2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file. 3 # that can be found in the LICENSE file.
4 4
5 from __future__ import absolute_import 5 from __future__ import absolute_import
6 import contextlib 6 import contextlib
7 import collections 7 import collections
8 import keyword 8 import keyword
9 import re 9 import re
10 import types 10 import types
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 ) 58 )
59 59
60 def _render_to_dict(self): 60 def _render_to_dict(self):
61 d = dict((k, v) for k, v in self._asdict().iteritems() if v) 61 d = dict((k, v) for k, v in self._asdict().iteritems() if v)
62 if d['critical']: 62 if d['critical']:
63 d.pop('critical') 63 d.pop('critical')
64 return d 64 return d
65 65
66 66
67 _StepConfig = collections.namedtuple('_StepConfig', 67 _StepConfig = collections.namedtuple('_StepConfig',
68 ('name', 'cmd', 'cwd', 'env', 'allow_subannotations', 'trigger_specs', 68 ('name', 'base_name', 'cmd', 'cwd', 'env', 'allow_subannotations',
69 'timeout', 'infra_step', 'stdout', 'stderr', 'stdin', 'ok_ret', 69 'trigger_specs', 'timeout', 'infra_step', 'stdout', 'stderr', 'stdin',
70 'step_test_data', 'nest_level')) 70 'ok_ret', 'step_test_data', 'nest_level'))
71 71
72 class StepConfig(_StepConfig): 72 class StepConfig(_StepConfig):
73 """ 73 """
74 StepConfig is the representation of a raw step as the recipe_engine sees it. 74 StepConfig is the representation of a raw step as the recipe_engine sees it.
75 You should use the standard 'step' recipe module, which will construct and 75 You should use the standard 'step' recipe module, which will construct and
76 pass this data to the engine for you, instead. The only reason why you would 76 pass this data to the engine for you, instead. The only reason why you would
77 need to worry about this object is if you're modifying the step module itself. 77 need to worry about this object is if you're modifying the step module itself.
78 78
79 The optional "env" parameter provides optional overrides for environment 79 The optional "env" parameter provides optional overrides for environment
80 variables. Each value is % formatted with the entire existing os.environ. A 80 variables. Each value is % formatted with the entire existing os.environ. A
81 value of `None` will remove that envvar from the environ. e.g. 81 value of `None` will remove that envvar from the environ. e.g.
82 82
83 { 83 {
84 "envvar": "%(envvar)s;%(envvar2)s;extra", 84 "envvar": "%(envvar)s;%(envvar2)s;extra",
85 "delete_this": None, 85 "delete_this": None,
86 "static_value": "something", 86 "static_value": "something",
87 } 87 }
88 """ 88 """
89 89
90 _RENDER_WHITELIST=frozenset(( 90 _RENDER_WHITELIST=frozenset((
91 'cmd', 91 'cmd',
92 )) 92 ))
93 93
94 _RENDER_BLACKLIST=frozenset(( 94 _RENDER_BLACKLIST=frozenset((
95 'base_name',
95 'nest_level', 96 'nest_level',
96 'ok_ret', 97 'ok_ret',
97 'infra_step', 98 'infra_step',
98 'step_test_data', 99 'step_test_data',
99 )) 100 ))
100 101
101 @classmethod 102 @classmethod
102 def create(cls, name, cmd=None, cwd=None, env=None, 103 def create(cls, name, base_name=None, cmd=None, cwd=None, env=None,
103 allow_subannotations=None, trigger_specs=None, timeout=None, 104 allow_subannotations=None, trigger_specs=None, timeout=None,
104 infra_step=None, stdout=None, stderr=None, stdin=None, 105 infra_step=None, stdout=None, stderr=None, stdin=None,
105 ok_ret=None, step_test_data=None, step_nest_level=None): 106 ok_ret=None, step_test_data=None, step_nest_level=None):
106 """ 107 """
107 Initializes a new StepConfig step API dictionary. 108 Initializes a new StepConfig step API dictionary.
108 109
109 Args: 110 Args:
110 name (str): name of the step, will appear in buildbots waterfall 111 name (str): name of the step, will appear in buildbots waterfall
112 base_name (str): the base name of the step. If the step has a derived
113 name (e.g., nested may be concatenated with its parent), this is the
114 name component of just this step. If None, this will be set to "name".
111 cmd: command to run. Acceptable types: str, Path, Placeholder, or None. 115 cmd: command to run. Acceptable types: str, Path, Placeholder, or None.
112 cwd (str or None): absolute path to working directory for the command 116 cwd (str or None): absolute path to working directory for the command
113 env (dict): overrides for environment variables, described above. 117 env (dict): overrides for environment variables, described above.
114 allow_subannotations (bool): if True, lets the step emit its own 118 allow_subannotations (bool): if True, lets the step emit its own
115 annotations. NOTE: Enabling this can cause some buggy behavior. Please 119 annotations. NOTE: Enabling this can cause some buggy behavior. Please
116 strongly consider using step_result.presentation instead. If you have 120 strongly consider using step_result.presentation instead. If you have
117 questions, please contact infra-dev@chromium.org. 121 questions, please contact infra-dev@chromium.org.
118 trigger_specs: a list of trigger specifications, see also _trigger_builds. 122 trigger_specs: a list of trigger specifications, see also _trigger_builds.
119 timeout: if not None, a datetime.timedelta for the step timeout. 123 timeout: if not None, a datetime.timedelta for the step timeout.
120 infra_step: if True, this is an infrastructure step. Failures will raise 124 infra_step: if True, this is an infrastructure step. Failures will raise
121 InfraFailure instead of StepFailure. 125 InfraFailure instead of StepFailure.
122 stdout: Placeholder to put step stdout into. If used, stdout won't appear 126 stdout: Placeholder to put step stdout into. If used, stdout won't appear
123 in annotator's stdout (and |allow_subannotations| is ignored). 127 in annotator's stdout (and |allow_subannotations| is ignored).
124 stderr: Placeholder to put step stderr into. If used, stderr won't appear 128 stderr: Placeholder to put step stderr into. If used, stderr won't appear
125 in annotator's stderr. 129 in annotator's stderr.
126 stdin: Placeholder to read step stdin from. 130 stdin: Placeholder to read step stdin from.
127 ok_ret (iter): set of return codes allowed. If the step process returns 131 ok_ret (iter): set of return codes allowed. If the step process returns
128 something not on this list, it will raise a StepFailure (or 132 something not on this list, it will raise a StepFailure (or
129 InfraFailure if infra_step is True). If omitted, {0} will be used. 133 InfraFailure if infra_step is True). If omitted, {0} will be used.
130 step_test_data (func -> recipe_test_api.StepTestData): A factory which 134 step_test_data (func -> recipe_test_api.StepTestData): A factory which
131 returns a StepTestData object that will be used as the default test 135 returns a StepTestData object that will be used as the default test
132 data for this step. The recipe author can override/augment this object 136 data for this step. The recipe author can override/augment this object
133 in the GenTests function. 137 in the GenTests function.
134 step_nest_level (int): the step's nesting level. 138 step_nest_level (int): the step's nesting level.
135 """ 139 """
136 return cls( 140 return cls(
137 name=name, 141 name=name,
142 base_name=(base_name or name),
138 cmd=cmd, 143 cmd=cmd,
139 cwd=cwd, 144 cwd=cwd,
140 env=env, 145 env=env,
141 allow_subannotations=bool(allow_subannotations), 146 allow_subannotations=bool(allow_subannotations),
142 trigger_specs=[TriggerSpec._create(**trig) 147 trigger_specs=[TriggerSpec._create(**trig)
143 for trig in (trigger_specs or ())], 148 for trig in (trigger_specs or ())],
144 timeout=timeout, 149 timeout=timeout,
145 infra_step=bool(infra_step), 150 infra_step=bool(infra_step),
146 stdout=stdout, 151 stdout=stdout,
147 stderr=stderr, 152 stderr=stderr,
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 """ 811 """
807 Gets the BoundProperty version of this Property. Requires a name. 812 Gets the BoundProperty version of this Property. Requires a name.
808 """ 813 """
809 return BoundProperty( 814 return BoundProperty(
810 self._default, self.help, self.kind, name, property_type, module, 815 self._default, self.help, self.kind, name, property_type, module,
811 self.param_name) 816 self.param_name)
812 817
813 class UndefinedPropertyException(TypeError): 818 class UndefinedPropertyException(TypeError):
814 pass 819 pass
815 820
OLDNEW
« no previous file with comments | « recipe_engine/arguments_pb2.py ('k') | recipe_engine/stream.py » ('j') | recipe_engine/stream.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698