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