diff options
Diffstat (limited to 'gae/webapp/src/endpoint/build_info.py')
-rw-r--r-- | gae/webapp/src/endpoint/build_info.py | 78 |
1 files changed, 49 insertions, 29 deletions
diff --git a/gae/webapp/src/endpoint/build_info.py b/gae/webapp/src/endpoint/build_info.py index c1dfdb7..0ba77bb 100644 --- a/gae/webapp/src/endpoint/build_info.py +++ b/gae/webapp/src/endpoint/build_info.py @@ -11,24 +11,20 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - """Build Info APIs implemented using Google Cloud Endpoints.""" import datetime import endpoints import logging -from protorpc import remote - +from webapp.src.endpoint import endpoint_base from webapp.src.proto import model - -BUILD_INFO_RESOURCE = endpoints.ResourceContainer( - model.BuildInfoMessage) +BUILD_INFO_RESOURCE = endpoints.ResourceContainer(model.BuildInfoMessage) -@endpoints.api(name="build_info", version="v1") -class BuildInfoApi(remote.Service): +@endpoints.api(name="build", version="v1") +class BuildInfoApi(endpoint_base.EndpointBase): """Endpoint API for build_info.""" @endpoints.method( @@ -42,34 +38,58 @@ class BuildInfoApi(remote.Service): build_query = model.BuildModel.query( model.BuildModel.build_id == request.build_id, model.BuildModel.build_target == request.build_target, - model.BuildModel.build_type == request.build_type - ) + model.BuildModel.build_type == request.build_type, + model.BuildModel.artifact_type == request.artifact_type) existing_builds = build_query.fetch() if existing_builds and len(existing_builds) > 1: - logging.warning("Duplicated builds found for [build_id]{} " - "[build_target]{} [build_type]{}".format( - request.build_id, request.build_target, request.build_type)) + logging.warning( + "Duplicated builds found for [build_id]{} " + "[build_target]{} [build_type]{} [artifact_type]{}".format( + request.build_id, request.build_target, request.build_type, + request.artifact_type)) - if request.signed and existing_builds: - # only signed builds need to overwrite the exist entities. + if existing_builds: build = existing_builds[0] - elif not existing_builds: - build = model.BuildModel() + if request.signed: + # only signed builds need to overwrite the exist entities. + build.signed = request.signed else: - # the same build existed and request is not signed build. - build = None + build = model.BuildModel() + common_attributes = self.GetCommonAttributes(request, + model.BuildModel) + for attr in common_attributes: + setattr(build, attr, getattr(request, attr)) - if build: - build.manifest_branch = request.manifest_branch - build.build_id = request.build_id - build.build_target = request.build_target - build.build_type = request.build_type - build.artifact_type = request.artifact_type - build.artifacts = request.artifacts - build.timestamp = datetime.datetime.now() - build.signed = request.signed - build.put() + build.timestamp = datetime.datetime.now() + build.put() return model.DefaultResponse( return_code=model.ReturnCodeMessage.SUCCESS) + + @endpoints.method( + endpoint_base.GET_REQUEST_RESOURCE, + model.BuildResponseMessage, + path="get", + http_method="POST", + name="get") + def get(self, request): + """Gets the builds from datastore.""" + return_list, more = self.Get(request=request, + metaclass=model.BuildModel, + message=model.BuildInfoMessage) + return model.BuildResponseMessage(builds=return_list, has_next=more) + + @endpoints.method( + endpoint_base.COUNT_REQUEST_RESOURCE, + model.CountResponseMessage, + path="count", + http_method="POST", + name="count") + def count(self, request): + """Gets total number of BuildModel entities stored in datastore.""" + filters = self.CreateFilterList( + filter_string=request.filter, metaclass=model.BuildModel) + count = self.Count(metaclass=model.BuildModel, filters=filters) + + return model.CountResponseMessage(count=count) |