Skip to content

utils

This module provides general purpose utilities that are not specific to any subsystem.

execute_command_sync(*, command, logger_name=None, allow_char=None)

Execute arbitrary command

If the command returns a return code different from zero, a RuntimeError is raised.

Parameters:

Name Type Description Default
command str

Command to be executed.

required
logger_name str | None

Name of the logger.

None
allow_char str | None

Argument propagated to validate_cmd.

None
Source code in fractal_server/utils.py
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
def execute_command_sync(
    *,
    command: str,
    logger_name: str | None = None,
    allow_char: str | None = None,
) -> str:
    """
    Execute arbitrary command

    If the command returns a return code different from zero, a `RuntimeError`
    is raised.

    Arguments:
        command: Command to be executed.
        logger_name: Name of the logger.
        allow_char: Argument propagated to `validate_cmd`.
    """
    logger = get_logger(logger_name)
    logger.debug(f"START subprocess call to '{command}'")
    validate_cmd(command=command, allow_char=allow_char)
    res = subprocess.run(  # nosec
        shlex.split(command),
        capture_output=True,
        encoding="utf-8",
    )
    returncode = res.returncode
    stdout = res.stdout
    stderr = res.stderr
    if res.returncode != 0:
        logger.debug(f"ERROR in subprocess call to '{command}'")
        raise RuntimeError(
            f"Command {command} failed.\n"
            f"returncode={res.returncode}\n"
            "STDOUT:\n"
            f"{stdout}\n"
            "STDERR:\n"
            f"{stderr}\n"
        )
    logger.debug(f"{returncode=}")
    logger.debug("STDOUT:")
    logger.debug(stdout)
    logger.debug("STDERR:")
    logger.debug(stderr)
    logger.debug(f"END   subprocess call to '{command}'")
    return stdout

get_timestamp()

Get timezone aware timestamp.

Source code in fractal_server/utils.py
25
26
27
28
29
def get_timestamp() -> datetime:
    """
    Get timezone aware timestamp.
    """
    return datetime.now(tz=timezone.utc)