1#!/usr/bin/env python3
2#
3# Copyright 2018 - The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17"""An enum class to provide the running platform OS info.
18
19AndroidDevOS provides 2 functions to get info from current platform type, it
20maps strings got from python standard library method 'platform.system()' to 3
21types of OS platform, i.e., Linux, Mac, and Windows.
22
23    Class functions:
24        get_os_type, which returns a relevant enum object for current platform.
25        get_os_name, which returns the platform OS name in upper case.
26"""
27
28from enum import Enum, unique
29
30import platform
31
32
33@unique
34class AndroidDevOS(str, Enum):
35    """The string enum class identifies the OS for Android development.
36
37    Currently, it can identify 3 types of OS, e.g., Mac, Linux, and Windows.
38    And transform the os name into a meaningful platform name.
39    """
40
41    MAC = 'Darwin'
42    LINUX = 'Linux'
43    WINDOWS = 'Windows'
44
45    @classmethod
46    def get_os_name(cls):
47        """Get the actual OS name.
48
49        Return:
50            AndroidDevOS enum, the os type name for current environment.
51        """
52        return cls.get_os_type().name
53
54    @classmethod
55    def get_os_type(cls):
56        """get current OS type.
57
58        Return:
59            AndroidDevOS enum object, mapped to relevant platform.
60        """
61        return {
62            'Darwin': cls.MAC,
63            'Linux': cls.LINUX,
64            'Windows': cls.WINDOWS
65        }.get(platform.system(), cls.LINUX)
66