1#
2# Copyright (C) 2017 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17from host_controller.tfc import api_message
18
19
20class Request(api_message.ApiMessage):
21    """The requests defined by TFC API.
22
23    Attributes:
24        _BODY: The requests.new parameters that are put into http message body.
25        _PARAMETERS: The requests.new parameters put into http parameters.
26        _ALL_KEYS: Union of above.
27    """
28    _BODY = {
29            "command_line",
30            "user"}
31    _PARAMETERS = {
32            "branch",
33            "build_flavor",
34            "build_id",
35            "build_os",
36            "cluster",
37            "no_build_args",
38            "run_target",
39            "shard_count"
40            "run_count"}
41    _ALL_KEYS = (_BODY | _PARAMETERS)
42
43    def __init__(self, cluster, command_line, run_target, user, **kwargs):
44        """Initializes the attributes.
45
46        Args:
47            cluster: The ID of the cluster to send this request to.
48            command_line: The command to execute on a host.
49            run_target: The target device to run the command.
50            user: The name of the user sending this request.
51            **kwargs: The optional attributes.
52        """
53        super(Request, self).__init__(self._ALL_KEYS,
54                                      cluster=cluster,
55                                      command_line=command_line,
56                                      run_target=run_target,
57                                      user=user,
58                                      **kwargs)
59
60    def GetBody(self):
61        """Returns the http message body.
62
63        Returns:
64            A JSON object.
65        """
66        return self.ToJson(self._BODY)
67
68    def GetParameters(self):
69        """Returns the http parameters.
70
71        Returns:
72            A dict of strings.
73        """
74        return self.ToJson(self._PARAMETERS)
75