Home | History | Annotate | Download | only in endpoint
      1 # Copyright 2017 Google Inc. All rights reserved.
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 
     15 """Schedule Info APIs implemented using Google Cloud Endpoints."""
     16 
     17 import datetime
     18 import endpoints
     19 
     20 from protorpc import remote
     21 
     22 from google.appengine.ext import ndb
     23 
     24 from webapp.src.proto import model
     25 
     26 
     27 SCHEDULE_INFO_RESOURCE = endpoints.ResourceContainer(
     28     model.ScheduleInfoMessage)
     29 
     30 
     31 @endpoints.api(name="schedule_info", version="v1")
     32 class ScheduleInfoApi(remote.Service):
     33     """Endpoint API for schedule_info."""
     34 
     35     @endpoints.method(
     36         SCHEDULE_INFO_RESOURCE,
     37         model.DefaultResponse,
     38         path="clear",
     39         http_method="POST",
     40         name="clear")
     41     def clear(self, request):
     42         """Clears test schedule info in DB."""
     43         schedule_query = model.ScheduleModel.query(
     44             model.ScheduleModel.schedule_type != "green"
     45         )
     46         existing_schedules = schedule_query.fetch(keys_only=True)
     47         if existing_schedules and len(existing_schedules) > 0:
     48             ndb.delete_multi(existing_schedules)
     49         return model.DefaultResponse(return_code=model.ReturnCodeMessage.SUCCESS)
     50 
     51     @endpoints.method(
     52         SCHEDULE_INFO_RESOURCE,
     53         model.DefaultResponse,
     54         path="set",
     55         http_method="POST",
     56         name="set")
     57     def set(self, request):
     58         """Sets the schedule info based on `request`."""
     59         schedule = model.ScheduleModel()
     60         schedule.manifest_branch = request.manifest_branch
     61         schedule.build_storage_type = request.build_storage_type
     62         if request.get_assigned_value("device_pab_account_id"):
     63             schedule.device_pab_account_id = request.device_pab_account_id
     64         schedule.build_target = request.build_target
     65         schedule.test_name = request.test_name
     66         schedule.require_signed_device_build = (
     67             request.require_signed_device_build)
     68         schedule.period = request.period
     69         schedule.priority = request.priority
     70         schedule.device = request.device
     71         schedule.shards = request.shards
     72         schedule.param = request.param
     73         schedule.retry_count = request.retry_count
     74         schedule.gsi_storage_type = request.gsi_storage_type
     75         schedule.gsi_branch = request.gsi_branch
     76         schedule.gsi_build_target = request.gsi_build_target
     77         schedule.gsi_pab_account_id = request.gsi_pab_account_id
     78         schedule.test_storage_type = request.test_storage_type
     79         schedule.test_branch = request.test_branch
     80         schedule.test_build_target = request.test_build_target
     81         schedule.test_pab_account_id = request.test_pab_account_id
     82         schedule.timestamp = datetime.datetime.now()
     83         schedule.schedule_type = "test"
     84         schedule.put()
     85 
     86         return model.DefaultResponse(
     87             return_code=model.ReturnCodeMessage.SUCCESS)
     88 
     89 
     90 @endpoints.api(name="green_schedule_info", version="v1")
     91 class GreenScheduleInfoApi(remote.Service):
     92     """Endpoint API for green_schedule_info."""
     93 
     94     @endpoints.method(
     95         SCHEDULE_INFO_RESOURCE,
     96         model.DefaultResponse,
     97         path="clear",
     98         http_method="POST",
     99         name="clear")
    100     def clear(self, request):
    101         """Clears green build schedule info in DB."""
    102         schedule_query = model.ScheduleModel.query(
    103             model.ScheduleModel.schedule_type == "green"
    104         )
    105         existing_schedules = schedule_query.fetch(keys_only=True)
    106         if existing_schedules and len(existing_schedules) > 0:
    107             ndb.delete_multi(existing_schedules)
    108         return model.DefaultResponse(return_code=model.ReturnCodeMessage.SUCCESS)
    109 
    110     @endpoints.method(
    111         SCHEDULE_INFO_RESOURCE,
    112         model.DefaultResponse,
    113         path="set",
    114         http_method="POST",
    115         name="set")
    116     def set(self, request):
    117         """Sets the green build schedule info based on `request`."""
    118         schedule = model.ScheduleModel()
    119         schedule.name = request.name
    120         schedule.manifest_branch = request.manifest_branch
    121         schedule.build_target = request.build_target
    122         schedule.device_pab_account_id = request.device_pab_account_id
    123         schedule.test_name = request.test_name
    124         schedule.schedule = request.schedule
    125         schedule.priority = request.priority
    126         schedule.device = request.device
    127         schedule.shards = request.shards
    128         schedule.gsi_branch = request.gsi_branch
    129         schedule.gsi_build_target = request.gsi_build_target
    130         schedule.gsi_pab_account_id = request.gsi_pab_account_id
    131         schedule.test_branch = request.test_branch
    132         schedule.test_build_target = request.test_build_target
    133         schedule.test_pab_account_id = request.test_pab_account_id
    134         schedule.timestamp = datetime.datetime.now()
    135         schedule.schedule_type = "green"
    136         schedule.put()
    137 
    138         return model.DefaultResponse(
    139             return_code=model.ReturnCodeMessage.SUCCESS)
    140