liyujie
2025-08-28 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env python
#
# Copyright 2018 - The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
r"""BaseAVDCreate class.
 
Parent class that will hold common logic for AVD creation use cases.
"""
 
from acloud.internal import constants
from acloud.internal.lib import utils
 
 
class BaseAVDCreate(object):
    """Base class for all AVD intance creation classes."""
 
    def _CreateAVD(self, avd_spec, no_prompts):
        """Do the actual creation work, should be overridden by child classes.
 
        Args:
            avd_spec: AVDSpec object that tells us what we're going to create.
            no_prompts: Boolean, True to skip all prompts.
        """
        raise NotImplementedError
 
    def Create(self, avd_spec, no_prompts):
        """Create the AVD.
 
        Args:
            avd_spec: AVDSpec object that tells us what we're going to create.
            no_prompts: Boolean, True to skip all prompts.
        """
        self.PrintAvdDetails(avd_spec)
        results = self._CreateAVD(avd_spec, no_prompts)
        utils.PrintDeviceSummary(results)
        return results
 
    @staticmethod
    def PrintAvdDetails(avd_spec):
        """Display spec information to user.
 
        Example:
            Creating remote AVD instance with the following details:
            Image:
              aosp/master - aosp_cf_x86_phone-userdebug [1234]
            hw config:
              cpu - 2
              ram - 2GB
              disk - 10GB
              display - 1024x862 (224 DPI)
 
        Args:
            avd_spec: AVDSpec object that tells us what we're going to create.
        """
        utils.PrintColorString(
            "Creating %s AVD instance with the following details:" %
            avd_spec.instance_type)
        if avd_spec.image_source == constants.IMAGE_SRC_LOCAL:
            utils.PrintColorString("Image (local):")
            utils.PrintColorString("  %s" % (avd_spec.local_image_dir or
                                             avd_spec.local_image_artifact))
        elif avd_spec.image_source == constants.IMAGE_SRC_REMOTE:
            utils.PrintColorString("Image:")
            utils.PrintColorString(
                "  %s - %s [%s]" %
                (avd_spec.remote_image[constants.BUILD_BRANCH],
                 avd_spec.remote_image[constants.BUILD_TARGET],
                 avd_spec.remote_image[constants.BUILD_ID]))
        utils.PrintColorString("hw config:")
        utils.PrintColorString("  cpu - %s" % (avd_spec.hw_property[constants.HW_ALIAS_CPUS]))
        utils.PrintColorString("  ram - %dGB" % (
            int(avd_spec.hw_property[constants.HW_ALIAS_MEMORY]) / 1024))
        utils.PrintColorString("  disk - %dGB" % (
            int(avd_spec.hw_property[constants.HW_ALIAS_DISK]) / 1024))
        utils.PrintColorString(
            "  display - %sx%s (%s DPI)" %
            (avd_spec.hw_property[constants.HW_X_RES],
             avd_spec.hw_property[constants.HW_Y_RES],
             avd_spec.hw_property[constants.HW_ALIAS_DPI]))
        utils.PrintColorString("\n")