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/binhost.py b/api/controller/binhost.py
index a80e8d5..679c467 100644
--- a/api/controller/binhost.py
+++ b/api/controller/binhost.py
@@ -9,6 +9,7 @@
 
 import urlparse
 
+from chromite.api import validate
 from chromite.api.controller import controller_util
 from chromite.api.gen.chromite.api import binhost_pb2
 from chromite.lib import build_target_util
@@ -26,13 +27,10 @@
 }
 
 
+@validate.require('build_target.name')
 def GetBinhosts(input_proto, output_proto):
   """Get a list of binhosts."""
-  target_name = input_proto.build_target.name
-  if not target_name:
-    cros_build_lib.Die('BuildTarget.name is required.')
-
-  build_target = build_target_util.BuildTarget(target_name)
+  build_target = build_target_util.BuildTarget(input_proto.build_target.name)
 
   binhosts = binhost.GetBinhosts(build_target)
 
@@ -42,13 +40,10 @@
     new_binhost.package_index = 'Packages'
 
 
+@validate.require('build_target.name')
 def GetPrivatePrebuiltAclArgs(input_proto, output_proto):
   """Get the ACL args from the files in the private overlays."""
-  build_target_name = input_proto.build_target.name
-  if not build_target_name:
-    cros_build_lib.Die('Build target name is required.')
-
-  build_target = build_target_util.BuildTarget(build_target_name)
+  build_target = build_target_util.BuildTarget(input_proto.build_target.name)
 
   try:
     args = binhost.GetPrebuiltAclArgs(build_target)
@@ -109,6 +104,7 @@
     output_proto.upload_targets.add().path = upload_target.strip('/')
 
 
+@validate.require('build_target.name', 'uri')
 def SetBinhost(input_proto, output_proto):
   """Set the URI for a given binhost key and build target.