blob: 03fa82a60c3db0df60bf8e24ee6ce94b25be1cc1 [file] [log] [blame]
Benjamin Shai80317fc2023-08-22 19:33:41 +00001# Copyright 2023 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""DLC API Service."""
6
7from typing import List, Optional, TYPE_CHECKING
8
9from chromite.api import controller
10from chromite.api import faux
11from chromite.api import validate
12from chromite.api.controller import controller_util
13from chromite.service import image
14
15
16if TYPE_CHECKING:
17 from chromite.api import api_config
18 from chromite.api.gen.chromite.api import dlc_pb2
19
20
21def _GenerateDlcArtifactsResponse(_input_proto, output_proto, _config):
22 """Set output_proto success field on a successful SignerTest response."""
23 artifact = output_proto.dlc_artifacts.add()
24 artifact.image_hash = (
25 "88d54cb6b5bba15a71ffda3ca75446eb453bf7fe393e3595d3bc52beb3b61711"
26 )
27 artifact.image_name = "dlc.img"
28 artifact.gs_uri_path = "gs://some/uri/prefix/for/dlc-1"
Benjamin Shai1adc3262023-08-25 18:27:06 +000029 artifact.id = "dlc-1"
Benjamin Shai80317fc2023-08-22 19:33:41 +000030 return controller.RETURN_CODE_SUCCESS
31
32
33@faux.success(_GenerateDlcArtifactsResponse)
34@faux.empty_error
35@validate.require("sysroot")
36@validate.validation_complete
37def GenerateDlcArtifactsList(
38 input_proto: "dlc_pb2.GenerateDlcArtifactsListRequest",
39 output_proto: "dlc_pb2.GenerateDlcArtifactsListResponse",
40 _config: "api_config.ApiConfig",
41) -> Optional[int]:
42 """Generate DLC Artifacts List.
43
44 Args:
45 input_proto: the input message.
46 output_proto: the output message.
47 config: the API call config.
48
49 Returns:
50 Return code (from __init__.py).
51 """
52 sysroot = controller_util.ParseSysroot(input_proto.sysroot)
53
54 dlc_artifacts = image.generate_dlc_artifacts_metadata_list(sysroot.path)
55 _parse_dlc_artifacts_to_response(output_proto, dlc_artifacts)
56
57 return controller.RETURN_CODE_SUCCESS
58
59
60def _parse_dlc_artifacts_to_response(
61 output: "dlc_pb2.GenerateDlcArtifactsListResponse",
62 dlc_artifacts: List[image.DlcArtifactsMetadata],
63):
64 """Parse the DLC artifacts into the output proto.
65
66 Args:
67 output: the output message.
68 dlc_artifacts: the list of DLC artifacts.
69 """
70 for dlc_artifact in dlc_artifacts:
71 artifact = output.dlc_artifacts.add()
72 artifact.image_hash = dlc_artifact.image_hash
73 artifact.image_name = dlc_artifact.image_name
74 artifact.gs_uri_path = dlc_artifact.uri_path
Benjamin Shai1adc3262023-08-25 18:27:06 +000075 artifact.id = dlc_artifact.identifier