import logging
from pathlib import Path
+import textwrap
from typing import Dict, Optional
LOG_FORMAT = "%(asctime)s %(levelname)7s:%(name)s %(message)s"
+LOG_INDENT = 4
LOGGERS = {
"conftest": None,
LOGGERS["test"] = None
+def indent_message(msg):
+ lines = msg.splitlines()
+ first = lines[0] + "\n"
+ to_indent = "\n".join(lines[1:])
+ return first + textwrap.indent(to_indent, " " * LOG_INDENT)
+
+
def log(lvl: int, msg: str, *args, **kwargs):
"""Log message with the most-specific logger currently available."""
logger = LOGGERS["test"]
if logger is None:
logger = LOGGERS["conftest"]
assert logger is not None
+ if "\n" in msg:
+ msg = indent_message(msg)
logger.log(lvl, msg, *args, **kwargs)
env: Optional[dict] = None,
):
"""Execute a command with given args as subprocess."""
- isctest.log.debug(f"command: {' '.join(args)}")
+ isctest.log.debug(f"isctest.run.cmd(): {' '.join(args)}")
def print_debug_logs(procdata):
if procdata:
if log_stdout and procdata.stdout:
isctest.log.debug(
- f"~~~ cmd stdout ~~~\n{procdata.stdout.decode('utf-8')}\n~~~~~~~~~~~~~~~~~~"
+ f"isctest.run.cmd(): (stdout)\n{procdata.stdout.decode('utf-8')}"
)
if log_stderr and procdata.stderr:
isctest.log.debug(
- f"~~~ cmd stderr ~~~\n{procdata.stderr.decode('utf-8')}\n~~~~~~~~~~~~~~~~~~"
+ f"isctest.run.cmd(): (stderr)\n{procdata.stderr.decode('utf-8')}"
)
if env is None:
return proc
except subprocess.CalledProcessError as exc:
print_debug_logs(exc)
- isctest.log.debug(f" return code: {exc.returncode}")
+ isctest.log.debug(f"isctest.run.cmd(): (return code) {exc.returncode}")
if raise_on_exception:
raise exc
return exc