def main(args=None): parser = argparse.ArgumentParser( description="Releng API Command Line Tool") parser.add_argument("--quiet", '-q', action='store_true', help="Silence all logging below WARNING level") parser.add_argument("--disable-logging", '-Q', action='store_true', help="Silence all logging") subparsers = parser.add_subparsers(help='sub-command help') # each of the Subcommand subclasses was loaded when the blueprints were # imported in relengapi.app cmds = [cls() for cls in subcommands.Subcommand.__subclasses__()] for cmd in cmds: subparser = cmd.make_parser(subparsers) subparser.set_defaults(_subcommand=cmd) args = parser.parse_args(args) if args._subcommand and args._subcommand.want_logging and not args.disable_logging: setupConsoleLogging(args.quiet) else: # blueprints.slaveloan.bugzilla complains about not having a handler logging.getLogger().addHandler(logging.NullHandler()) # make the RELENGAPI_SETTINGS env var an absolute path; without this, Flask # uses the application's root_dir, which isn't especially helpful in a # development context. var_name = 'RELENGAPI_SETTINGS' if var_name in os.environ: os.environ[var_name] = os.path.abspath(os.environ[var_name]) app = relengapi.app.create_app(cmdline=True) with app.app_context(): args._subcommand.run(parser, args)
def test_setupConsoleLogging_loud(app): relengapi_logging.setupConsoleLogging(False) root = logging.getLogger("") stdout_log = relengapi_logging.stdout_log assert stdout_log in root.handlers eq_(root.level, logging.NOTSET)
def test_setupConsoleLogging_quiet(app): relengapi_logging.setupConsoleLogging(True) root = logging.getLogger("") stdout_log = relengapi_logging.stdout_log assert stdout_log in root.handlers eq_(root.level, logging.WARNING)