Build API: Add validation decorators.
Simplify the easy proto validation tasks by providing decorators
that can handle the simple validation cases.
BUG=None
TEST=run_tests
Change-Id: Ib799d43c7d0dca5312a58771ff67b610e9ff4f2c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1669636
Reviewed-by: Alex Klein <saklein@chromium.org>
Tested-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/image.py b/api/controller/image.py
index 9b6880b..aaa505b 100644
--- a/api/controller/image.py
+++ b/api/controller/image.py
@@ -13,6 +13,7 @@
import os
from chromite.api import controller
+from chromite.api import validate
from chromite.api.gen.chromiumos import common_pb2
from chromite.lib import cros_build_lib
from chromite.lib import constants
@@ -42,6 +43,7 @@
}
+@validate.require('build_target.name')
def Create(input_proto, output_proto):
"""Build an image.
@@ -50,8 +52,6 @@
output_proto (image_pb2.CreateImageResult): The output message.
"""
board = input_proto.build_target.name
- if not board:
- cros_build_lib.Die('build_target.name is required.')
# Build the base image if no images provided.
to_build = input_proto.image_types or [_BASE_ID]
@@ -158,6 +158,8 @@
new_image.build_target.name = board
+@validate.require('build_target.name', 'result.directory')
+@validate.exists('image.path')
def Test(input_proto, output_proto):
"""Run image tests.
@@ -169,13 +171,6 @@
board = input_proto.build_target.name
result_directory = input_proto.result.directory
- if not board:
- cros_build_lib.Die('The build_target.name is required.')
- if not result_directory:
- cros_build_lib.Die('The result.directory is required.')
- if not image_path:
- cros_build_lib.Die('The image.path is required.')
-
if not os.path.isfile(image_path) or not image_path.endswith('.bin'):
cros_build_lib.Die(
'The image.path must be an existing image file with a .bin extension.')