Exemplo n.º 1
0
 def _is_short_option(s: str):
     """ Returns whether s is an option (starts with -) and is not a negative number)"""
     if not s.startswith("-") or len(s) <= 1:
         return False
     # Might be a negative number...
     try:
         to_int(s[1:], raise_exceptions=True)
         return False  # is a negative number
     except ValueError:
         return True
Exemplo n.º 2
0
def easyshare_setup(default_verbosity: int = VERBOSITY_NONE):
    """
    Configures easyshare: initializes the colors and the logging.
    """

    global easyshare_setup_done
    if easyshare_setup_done:
        return
    easyshare_setup_done = True

    from easyshare.styling import init_styling
    from easyshare.settings import set_setting, Settings

    # disable colors when redirection is involved or if colors are disabled
    env_ansi_disabled = os.getenv(ENV_ANSI_COLORS_DISABLED)
    env_starting_verbosity = os.getenv(ENV_EASYSHARE_VERBOSITY)

    init_styling()
    set_setting(Settings.COLORS,
                is_styling_supported() and not env_ansi_disabled)

    # Init logging manually now, after enable_colors call
    starting_verbosity = to_int(env_starting_verbosity,
                                raise_exceptions=False,
                                default=default_verbosity)

    set_setting(Settings.VERBOSITY, starting_verbosity)
Exemplo n.º 3
0
    def parse(location: str) -> Optional['ServerLocation']:
        """ Parses the location string representing a server location"""

        if not location:
            log.d("ServerLocation.parse() -> None")
            return None

        server_name_or_ip, _, server_port = location.partition(":")

        server_ip = None
        server_name = None

        if server_name_or_ip:
            if is_valid_ip(server_name_or_ip):
                server_ip = server_name_or_ip
            elif is_server_name(server_name_or_ip):
                server_name = server_name_or_ip

        server_port = to_int(server_port)

        if not is_valid_port(server_port):
            server_port = None

        if not server_name and not server_ip:
            log.w(f"Invalid server location for '{location}'")
            return None

        server_location = ServerLocation(name=server_name,
                                         ip=server_ip,
                                         port=server_port)

        log.d(f"ServerLocation.parse() -> {server_location}")

        return server_location
Exemplo n.º 4
0
def _to_port(o):
    p = to_int(o)
    if 0 <= p <= 65535:
        return p
    raise ValueError("Invalid port number")
Exemplo n.º 5
0
_settings_values: Dict[str, SettingValue] = {
    Settings.VERBOSITY: VERBOSITY_NONE,
    Settings.TRACING: TRACING_NONE,
    Settings.DISCOVER_PORT: DEFAULT_DISCOVER_PORT,
    Settings.DISCOVER_WAIT: DEFAULT_DISCOVER_WAIT,
    Settings.SHELL_PASSTHROUGH: False,
    Settings.COLORS: True,
}

_settings_callbacks: List[Tuple[Callable, List[str], bool]] = [
]  # list of (callback, keys_filter, lazy)

_SETTINGS_PARSERS: Dict[str, Callable[[SettingValue], SettingValue]] = {
    Settings.VERBOSITY:
    lambda o: rangify(to_int(o, raise_exceptions=True), VERBOSITY_MIN,
                      VERBOSITY_MAX),
    Settings.TRACING:
    lambda o: rangify(to_int(o, raise_exceptions=True), TRACING_MIN,
                      TRACING_MAX),
    Settings.DISCOVER_PORT:
    _to_port,
    Settings.DISCOVER_WAIT:
    lambda v: to_float(v, raise_exceptions=True),
    Settings.SHELL_PASSTHROUGH:
    lambda v: to_bool(v, raise_exceptions=True),
    Settings.COLORS:
    lambda v: to_bool(v, raise_exceptions=True),
}

Exemplo n.º 6
0
 def __init__(self, mandatory_count: int, optional_count: int = 0):
     super().__init__(
         mandatory_count, optional_count,
         lambda ps: [to_int(p.strip(), raise_exceptions=True) for p in ps])
Exemplo n.º 7
0
from easyshare.logging import get_logger
from easyshare.utils.json import j
from easyshare.utils.types import to_int

log = get_logger(__name__)

class ConfParseError(Exception):
    pass

KeyValParser = Callable[[Union[str, None], str, str], Any] # section, key, val => parsed value
SectionContent = Dict[str, Any] # key => parsed value
Section = Tuple[Union[str, None], SectionContent] # str => section content

STR_VAL = lambda sec, key, val: val.strip('"\'') if val else val # strip quotes
INT_VAL = lambda sec, key, val: to_int(val, raise_exceptions=True)
BOOL_VAL = lambda sec, key, val: True if (val.lower() == "true" or
                                         val.lower() == "y" or
                                         val.lower() == "yes" or
                                         val.lower == "enable") else False


class Conf:
    """
    Represents a parsed configuration file.
    Provides the 'parse' method for create a new 'Conf'.
    """
    def __init__(self, parsed: List[Tuple[str, Dict[str, Any]]]):
        self.parsed = parsed

    def __str__(self):