Google Chromium, sans integration with Google https://ungoogled-software.github.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

161 lines
4.7 KiB

# -*- coding: UTF-8 -*-
# Copyright (c) 2020 The ungoogled-chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Common code and constants"""
import argparse
import enum
import logging
import platform
from pathlib import Path
# Constants
ENCODING = 'UTF-8' # For config files and patches
USE_REGISTRY = '_use_registry'
LOGGER_NAME = 'ungoogled'
# Public classes
class PlatformEnum(enum.Enum):
"""Enum for platforms that need distinction for certain functionality"""
UNIX = 'unix' # Currently covers anything that isn't Windows
WINDOWS = 'windows'
class ExtractorEnum: #pylint: disable=too-few-public-methods
"""Enum for extraction binaries"""
SEVENZIP = '7z'
TAR = 'tar'
WINRAR = 'winrar'
class SetLogLevel(argparse.Action): #pylint: disable=too-few-public-methods
"""Sets logging level based on command line arguments it receives"""
def __init__(self, option_strings, dest, nargs=None, **kwargs):
super(SetLogLevel, self).__init__(option_strings, dest, nargs=nargs, **kwargs)
def __call__(self, parser, namespace, value, option_string=None):
if option_string in ('--verbose', '-v'):
value = logging.DEBUG
elif option_string in ('--quiet', '-q'):
value = logging.ERROR
else:
levels = {
'FATAL': logging.FATAL,
'ERROR': logging.ERROR,
'WARNING': logging.WARNING,
'INFO': logging.INFO,
'DEBUG': logging.DEBUG
}
value = levels[value]
set_logging_level(value)
# Public methods
def get_logger(initial_level=logging.INFO):
"""Gets the named logger"""
logger = logging.getLogger(LOGGER_NAME)
if logger.level == logging.NOTSET:
logger.setLevel(initial_level)
if not logger.hasHandlers():
console_handler = logging.StreamHandler()
console_handler.setLevel(initial_level)
format_string = '%(levelname)s: %(message)s'
formatter = logging.Formatter(format_string)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
def set_logging_level(logging_level):
"""Sets logging level of logger and all its handlers"""
if not logging_level:
logging_level = logging.INFO
logger = get_logger()
logger.setLevel(logging_level)
if logger.hasHandlers():
for hdlr in logger.handlers:
hdlr.setLevel(logging_level)
return logger
def get_running_platform():
"""
Returns a PlatformEnum value indicating the platform that utils is running on.
NOTE: Platform detection should only be used when no cross-platform alternative is available.
"""
uname = platform.uname()
# detect native python and WSL
if uname.system == 'Windows' or 'Microsoft' in uname.release:
return PlatformEnum.WINDOWS
# Only Windows and UNIX-based platforms need to be distinguished right now.
return PlatformEnum.UNIX
def get_chromium_version():
"""Returns the Chromium version."""
return (Path(__file__).parent.parent / 'chromium_version.txt').read_text().strip()
def parse_series(series_path):
"""
Returns an iterator of paths over the series file
series_path is a pathlib.Path to the series file
"""
with series_path.open(encoding=ENCODING) as series_file:
series_lines = series_file.read().splitlines()
# Filter blank lines
series_lines = filter(len, series_lines)
# Filter comment lines
series_lines = filter((lambda x: not x.startswith('#')), series_lines)
# Strip in-line comments
series_lines = map((lambda x: x.strip().split(' #')[0]), series_lines)
return series_lines
def add_common_params(parser):
"""
Adds common command line arguments to a parser.
"""
# Logging levels
logging_group = parser.add_mutually_exclusive_group()
logging_group.add_argument(
'--log-level',
action=SetLogLevel,
choices=['FATAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'],
help="Set logging level of current script. Only one of 'log-level', 'verbose',"
" 'quiet' can be set at a time.")
logging_group.add_argument(
'--quiet',
'-q',
action=SetLogLevel,
nargs=0,
help="Display less outputs to console. Only one of 'log-level', 'verbose',"
" 'quiet' can be set at a time.")
logging_group.add_argument(
'--verbose',
'-v',
action=SetLogLevel,
nargs=0,
help="Increase logging verbosity to include DEBUG messages. Only one of "
"'log-level', 'verbose', 'quiet' can be set at a time.")