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

Unified Diff: appengine/swarming/message_conversion.py

Issue 2926713004: Add support for repeated keys in TaskRequest. (Closed)
Patch Set: rebase Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/swarming/local_smoke_test.py ('k') | appengine/swarming/server/task_queues.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/swarming/message_conversion.py
diff --git a/appengine/swarming/message_conversion.py b/appengine/swarming/message_conversion.py
index 1c299d1bda1bfece36a4262f95658f89a57248df..bee7ad3b4fc898aa746ee041200b14ef08ec4619 100644
--- a/appengine/swarming/message_conversion.py
+++ b/appengine/swarming/message_conversion.py
@@ -25,13 +25,17 @@ from server import task_result
### Private API.
-def _string_pairs_from_dict(dictionary):
+def _string_pairs_from_list_of_tuples(dictionary):
return [
swarming_rpcs.StringPair(key=k, value=v)
- for k, v in sorted((dictionary or {}).iteritems())
+ for k, v in sorted((dictionary or []))
]
+def _string_pairs_from_dict(dictionary):
+ return _string_pairs_from_list_of_tuples((dictionary or {}).iteritems())
+
+
def _string_list_pairs_from_dict(dictionary):
return [
swarming_rpcs.StringListPair(key=k, value=v)
@@ -125,7 +129,7 @@ def task_request_to_rpc(entity):
caches=[_ndb_to_rpc(swarming_rpcs.CacheEntry, c) for c in props.caches],
cipd_input=cipd_input,
secret_bytes='<REDACTED>' if props.has_secret_bytes else None,
- dimensions=_string_pairs_from_dict(props.dimensions),
+ dimensions=_string_pairs_from_list_of_tuples(props.dimensions),
env=_string_pairs_from_dict(props.env),
inputs_ref=inputs_ref)
@@ -171,8 +175,11 @@ def new_task_request_from_rpc(msg, now):
if props.secret_bytes:
secret_bytes = task_request.SecretBytes(secret_bytes=props.secret_bytes)
- if len(set(i.key for i in props.dimensions)) != len(props.dimensions):
- raise ValueError('same dimension key cannot be specified twice')
+ # keys with ':' would corrupt the data. Rest of validation is done in
+ # TaskProperties.
+ if any(':' in i.key for i in props.dimensions):
+ raise ValueError('dimension key cannot contain ":"')
+ # Repeated keys would be lost. Rest of validation is done in TaskProperties.
if len(set(i.key for i in props.env)) != len(props.env):
raise ValueError('same environment variable key cannot be specified twice')
@@ -186,8 +193,8 @@ def new_task_request_from_rpc(msg, now):
has_secret_bytes=secret_bytes is not None,
secret_bytes=None, # ignore this, it's handled out of band
dimensions=None,
- dimensions_dict={i.key: i.value for i in props.dimensions},
- dimensions_flat=[],
+ dimensions_flat=sorted(
+ u'%s:%s' % (i.key, i.value) for i in props.dimensions),
env={i.key: i.value for i in props.env},
inputs_ref=inputs_ref)
« no previous file with comments | « appengine/swarming/local_smoke_test.py ('k') | appengine/swarming/server/task_queues.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698