eapp#

Absl app/flag utils.

eapp.make_flags_parser#

Dataclass flag parser for absl. This allow to define CLI flags through dataclasses.

Usage:

from absl import app
from etils import eapp


@dataclasses.dataclass
class Args:  # Define `--user=some_user --verbose` CLI flags
  user: str
  verbose: bool = False


def main(args: Args):
  if args.verbose:
    print(args.user)


if __name__ == '__main__':
  app.run(main, flags_parser=eapp.make_flags_parser(Args))

This is a wrapper around simple_parsing. See documentation for details.

This is compatible with absl.flags, so you can mix dataclasses with FLAGS on the same program.

eapp.better_logging#

Improve Python logging when running locally.

  • Display Python logs by default (even when user forgot --logtostderr), without being polluted by hundreds of C++ logs.

  • Cleaner minimal log format (e.g. I 15:04:05 [main.py:24]:)

  • Avoid visual artifacts between TQDM & logging

  • Clickable file.py hyperlinks redirecting to code search (require terminal support)

Usage:

if __name__ == '__main__':
  eapp.better_logging()
  app.run(main)

Note this has only effect when user run locally and without --logtostderr.