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

Side by Side Diff: appengine/swarming/handlers_bot.py

Issue 1778083002: Enforce users to specify a 'pool' dimension when triggering a task. (Closed) Base URL: git@github.com:luci/luci-py.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « no previous file | appengine/swarming/server/task_request.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Swarming Authors. All rights reserved. 1 # Copyright 2015 The Swarming Authors. All rights reserved.
2 # Use of this source code is governed by the Apache v2.0 license that can be 2 # Use of this source code is governed by the Apache v2.0 license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Internal bot API handlers.""" 5 """Internal bot API handlers."""
6 6
7 import base64 7 import base64
8 import json 8 import json
9 import logging 9 import logging
10 import textwrap 10 import textwrap
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 quarantined. 149 quarantined.
150 150
151 Does one DB synchronous GET. 151 Does one DB synchronous GET.
152 152
153 Returns: 153 Returns:
154 tuple(request, bot_id, version, state, dimensions, quarantined_msg) 154 tuple(request, bot_id, version, state, dimensions, quarantined_msg)
155 """ 155 """
156 request = self.parse_body() 156 request = self.parse_body()
157 version = request.get('version', None) 157 version = request.get('version', None)
158 158
159 dimensions = request.get('dimensions', {}) 159 dimensions = request.get('dimensions') or {}
160 state = request.get('state', {}) 160 state = request.get('state') or {}
161 bot_id = None 161 bot_id = None
162 if dimensions.get('id'): 162 if dimensions.get('id'):
163 dimension_id = dimensions['id'] 163 dimension_id = dimensions['id']
164 if (isinstance(dimension_id, list) and len(dimension_id) == 1 164 if (isinstance(dimension_id, list) and len(dimension_id) == 1
165 and isinstance(dimension_id[0], unicode)): 165 and isinstance(dimension_id[0], unicode)):
166 bot_id = dimensions['id'][0] 166 bot_id = dimensions['id'][0]
167 167
168 # The bot may decide to "self-quarantine" itself. Accept both via 168 # The bot may decide to "self-quarantine" itself. Accept both via
169 # dimensions or via state. See bot_management._BotCommon.quarantined for 169 # dimensions or via state. See bot_management._BotCommon.quarantined for
170 # more details. 170 # more details.
(...skipping 11 matching lines...) Expand all
182 break 182 break
183 183
184 quarantined_msg = has_missing_keys( 184 quarantined_msg = has_missing_keys(
185 self.REQUIRED_STATE_KEYS, state, 'state') 185 self.REQUIRED_STATE_KEYS, state, 'state')
186 if quarantined_msg: 186 if quarantined_msg:
187 break 187 break
188 188
189 if not bot_id: 189 if not bot_id:
190 quarantined_msg = 'Missing bot id' 190 quarantined_msg = 'Missing bot id'
191 break 191 break
192 if not dimensions.get('pool'):
193 quarantined_msg = 'Missing \'pool\' dimension'
194 break
192 195
193 if not all( 196 if not all(
194 isinstance(key, unicode) and 197 isinstance(key, unicode) and
195 isinstance(values, list) and 198 isinstance(values, list) and
196 all(isinstance(value, unicode) for value in values) 199 all(isinstance(value, unicode) for value in values)
197 for key, values in dimensions.iteritems()): 200 for key, values in dimensions.iteritems()):
198 quarantined_msg = ( 201 quarantined_msg = (
199 'Invalid dimensions type:\n%s' % json.dumps(dimensions, 202 'Invalid dimensions type:\n%s' % json.dumps(dimensions,
200 sort_keys=True, indent=2, separators=(',', ': '))) 203 sort_keys=True, indent=2, separators=(',', ': ')))
201 break 204 break
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 ('/swarming/api/v1/bot/poll', BotPollHandler), 611 ('/swarming/api/v1/bot/poll', BotPollHandler),
609 ('/swarming/api/v1/bot/server_ping', ServerPingHandler), 612 ('/swarming/api/v1/bot/server_ping', ServerPingHandler),
610 ('/swarming/api/v1/bot/task_update', BotTaskUpdateHandler), 613 ('/swarming/api/v1/bot/task_update', BotTaskUpdateHandler),
611 ('/swarming/api/v1/bot/task_update/<task_id:[a-f0-9]+>', 614 ('/swarming/api/v1/bot/task_update/<task_id:[a-f0-9]+>',
612 BotTaskUpdateHandler), 615 BotTaskUpdateHandler),
613 ('/swarming/api/v1/bot/task_error', BotTaskErrorHandler), 616 ('/swarming/api/v1/bot/task_error', BotTaskErrorHandler),
614 ('/swarming/api/v1/bot/task_error/<task_id:[a-f0-9]+>', 617 ('/swarming/api/v1/bot/task_error/<task_id:[a-f0-9]+>',
615 BotTaskErrorHandler), 618 BotTaskErrorHandler),
616 ] 619 ]
617 return [webapp2.Route(*i) for i in routes] 620 return [webapp2.Route(*i) for i in routes]
OLDNEW
« no previous file with comments | « no previous file | appengine/swarming/server/task_request.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698