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

Unified Diff: appengine/cr-buildbucket/api.py

Issue 1082303002: buildbucket: put_batch endpoint (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years, 8 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 | « no previous file | appengine/cr-buildbucket/errors.py » ('j') | appengine/cr-buildbucket/service.py » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/cr-buildbucket/api.py
diff --git a/appengine/cr-buildbucket/api.py b/appengine/cr-buildbucket/api.py
index d85b79b59388e617c16e92b724d292ae04938237..ad913997f2ea62c8c1f4366ce4874fc3886cde03 100644
--- a/appengine/cr-buildbucket/api.py
+++ b/appengine/cr-buildbucket/api.py
@@ -43,6 +43,21 @@ class ErrorMessage(messages.Message):
message = messages.StringField(2, required=True)
+def exception_to_error_message(ex):
+ assert isinstance(ex, errors.Error)
+ return ErrorMessage(
+ reason=ERROR_REASON_MAP[type(ex)],
+ message=ex.message,
+ )
+
+
+class PutRequestMessage(messages.Message):
+ bucket = messages.StringField(1, required=True)
+ tags = messages.StringField(2, repeated=True)
+ parameters_json = messages.StringField(3)
+ lease_expiration_ts = messages.IntegerField(4)
+
+
class BuildMessage(messages.Message):
"""Describes model.Build, see its docstring."""
id = messages.IntegerField(1, required=True)
@@ -156,10 +171,7 @@ def buildbucket_api_method(
return fn(*args, **kwargs)
except errors.Error as ex:
assert hasattr(response_message_class, 'error')
- return response_message_class(error=ErrorMessage(
- reason=ERROR_REASON_MAP[type(ex)],
- message=ex.message,
- ))
+ return response_message_class(error=exception_to_error_message(ex))
return endpoints_decorator(decorated)
return decorator
@@ -218,20 +230,11 @@ class BuildBucketApi(remote.Service):
################################### PUT ####################################
- class PutRequestMessage(messages.Message):
- bucket = messages.StringField(1, required=True)
- tags = messages.StringField(2, repeated=True)
- parameters_json = messages.StringField(3)
- lease_expiration_ts = messages.IntegerField(4)
-
@buildbucket_api_method(
PutRequestMessage, BuildResponseMessage,
path='builds', http_method='PUT')
def put(self, request):
"""Creates a new build."""
- if not request.bucket:
- raise errors.InvalidInputError('Bucket not specified')
-
build = self.service.add(
bucket=request.bucket,
tags=request.tags,
@@ -240,6 +243,36 @@ class BuildBucketApi(remote.Service):
)
return build_to_response_message(build, include_lease_key=True)
+ ################################ PUT_BATCH #################################
+
+ class PutBatchRequestMessage(messages.Message):
+ builds = messages.MessageField(PutRequestMessage, 1, repeated=True)
+
+ class PutBatchResponseMessage(messages.Message):
+ builds = messages.MessageField(BuildMessage, 1, repeated=True)
+ error = messages.MessageField(ErrorMessage, 2)
+
+ @buildbucket_api_method(
+ PutBatchRequestMessage, PutBatchResponseMessage,
+ path='builds/batch', http_method='PUT')
+ def put_batch(self, request):
Vadim Sh. 2015/04/14 18:56:40 btw, apiary APIs exposed by Google support batchin
nodir 2015/04/14 22:13:05 It cannot
+ """Creates up to 25 new builds transactionally."""
+ builds = self.service.add_batch([
+ {
+ 'bucket': build_req.bucket,
+ 'tags': build_req.tags,
+ 'parameters': parse_json(
+ build_req.parameters_json, 'parameters_json'),
+ 'lease_expiration_date': parse_datetime(
+ build_req.lease_expiration_ts),
+ }
+ for build_req in request.builds
+ ])
+ return self.PutBatchResponseMessage(
+ builds=[build_to_message(b, include_lease_key=True) for b in builds],
+ )
+
+
################################## SEARCH #################################
SEARCH_REQUEST_RESOURCE_CONTAINER = endpoints.ResourceContainer(
« no previous file with comments | « no previous file | appengine/cr-buildbucket/errors.py » ('j') | appengine/cr-buildbucket/service.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698