Blob Blame History Raw
"""Module providing information about the installed product."""
import logging

from pyanaconda.localization import find_best_locale_match
from pyanaconda.core.constants import DEFAULT_LANG
import os
import glob

RELEASE_STRING_FILE = "/etc/os-release"
LICENSE_FILE_GLOB = "/usr/share/redhat-release*/EULA*"

log = logging.getLogger("initial-setup")

def product_title():
    """
    Get product title.

    :return: product title
    :rtype: str

    """

    try:
        with open(RELEASE_STRING_FILE, "r") as fobj:
            for line in fobj:
                (key, _eq, value) = line.strip().partition("=")
                if not key or not _eq or not value:
                    continue
                if key == "PRETTY_NAME":
                    return value.strip('"')
    except IOError:
        log.exception("failed to check the release string file")

    return ""

def is_final():
    """
    Whether it is a final release of the product or not.

    :rtype: bool

    """

    # doesn't really matter for the Initial Setup
    return True

def get_license_file_name():
    """Get filename of the license file best matching current localization settings.

    :return: filename of the license file or None if no license file found
    :rtype: str or None
    """

    all_eulas = glob.glob(LICENSE_FILE_GLOB)
    non_localized_eulas = []
    langs = set()
    for eula in all_eulas:
        if "EULA_" in eula:
            # license file for a specific locale
            lang = eula.rsplit("EULA_", 1)[1]
            if lang:
                langs.add(lang)
        else:
            non_localized_eulas.append(eula)

    best_lang = find_best_locale_match(os.environ["LANG"], langs)
    if not best_lang:
        # nothing found for the current language, try the default one
        best_lang = find_best_locale_match(DEFAULT_LANG, langs)

    if not best_lang:
        # nothing found even for the default language, use non-localized or None
        if non_localized_eulas:
            best_eula = non_localized_eulas[0]
        else:
            return None
    else:
        # use first of the best-matching EULA files (there should be only one)
        best_eula = glob.glob(LICENSE_FILE_GLOB + ("_%s" % best_lang))[0]

    return best_eula

def eula_available():
    """ Report if it looks like there is an EULA available on the system.

    :return: True if an EULA seems to be available, False otherwise
    :rtype: bool
    """
    return bool(get_license_file_name())