Make Config's ctor accept strings as values for glob_paths, as opposed to lists. This covers the canonical case of one configuration file being passed.
The parsed args container is passed to the run() function and friends for convenient use. Sometimes, though, the base classes or umbrella commands need to make use of it, too, even more so as they may define command line arguments via add_arguments(). However, run() or _run() or whatever is never called on them, neither any other callback, so make args available to them as a member variable.
monkeytype run jw-acc.py --log-level debug db import --format mdb-json-dir dbs
monkeytype list-modules | grep ^jw | while read m; do
monkeytype apply $m
done
Add only_printable keyword argument to slog(). It defaults to False. If it's true, non-printable characters are not logged but replaced with a printable character.
As opposed to the C++ variant, StringTree.value() doesn't take a path argument, but only returns the value of the node it's called on. Change this. Returns None if the path is not found.
Add a kwargs keyword argument. This should allow a kwargs containing a "caller=" argument to be passed to the function and just do the right thing. Badly tested.
jwutils.Cmd.add_subcommands() had two issues. First, it failed for more than one command, and with that fixed, it only added the first command of a list of commands passed as an argument. This commit fixes both issues and leaves some logging and cleanup in place, which was used during debugging.
StringTree.__getitem__() returned the node, now return its value child instead. That's nicer and closer to the expected behaviour, as it supports StringTree usage as a key-value store for configuration or so. It breaks the existing API, but I think I have fixed the only pace where it was used: jw-grammar/grammar.py.
Cmds.cmds was sometimes empty, so fix that and make sure it points to the Cmds instance it was crated by. Actually the name of the Cmds class is a bad pick, should have been App or something, so to add .app, too, as a path for future compatibility.
jwutils.log.set_flags() and .set_level() is not set until after all commands are loaded. This can make debugging complicated. OTOH, command-line parsing is also not done until all commands are loaded, because they define the command line options. This commit adds some poor man's command line parsing for fetching --log-level and --log-flags only, and applying them before the commands are all loaded.
Add support for adding children of type StringTree. If a StringTree argument is passed to .add(), this should do the right thing. It makes use of the newly added .__add_children() method and involves quite a bit of hairy case distinctions.
parse() and read() up to present automatically set the root content of a StringTree object to "root". This can now be optionally defined by the "root_content" keyword argument.