PackageService: add NeedsChromeSource.
Add endpoint to allow the build to check if it needs the chrome
source to avoid callers needing to understand which packages
have that dependency.
BUG=chromium:1086714
TEST=manual
Change-Id: I960a00d122efaa5fe831e6f960179c1878016b5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2411177
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/field_handler.py b/api/field_handler.py
index 0eff8c8..ae3571f 100644
--- a/api/field_handler.py
+++ b/api/field_handler.py
@@ -42,7 +42,7 @@
def __init__(self, clear_field):
self.clear_field = clear_field
- def handle(self, message):
+ def handle(self, message, recurse=True):
"""Parse a message for a chroot field."""
# Find the Chroot field. Search for the field by type to prevent it being
# tied to a naming convention.
@@ -54,6 +54,17 @@
message.ClearField(descriptor.name)
return self.parse_chroot(chroot)
+ # Recurse down one level. This is handy for meta-endpoints that use another
+ # endpoint's request to produce data for or about the second endpoint.
+ # e.g. PackageService/NeedsChromeSource.
+ if recurse:
+ for descriptor in message.DESCRIPTOR.fields:
+ field = getattr(message, descriptor.name)
+ if isinstance(field, protobuf_message.Message):
+ chroot = self.handle(field, recurse=False)
+ if chroot:
+ return chroot
+
return None
def parse_chroot(self, chroot_message):