From 31b0e525c46f87c121f805695d7c2291aa6ca0ef Mon Sep 17 00:00:00 2001 From: Filip Valder Date: Fri, 4 Aug 2017 15:27:23 +0200 Subject: [PATCH] Fix #620: Support for log flags in mbs-manager and mbs-build --- contrib/mbs-build | 37 +++++++++++++++++++++++--------- module_build_service/__init__.py | 30 ++++++++++++++++++++------ module_build_service/logger.py | 6 ++++++ module_build_service/manage.py | 7 ++++-- 4 files changed, 62 insertions(+), 18 deletions(-) mode change 100644 => 100755 module_build_service/manage.py diff --git a/contrib/mbs-build b/contrib/mbs-build index 6d6fa197..c28aff12 100755 --- a/contrib/mbs-build +++ b/contrib/mbs-build @@ -263,7 +263,7 @@ def submit_module_build(scm_url, branch, server, id_provider, pyrpkg, verify=Tru return data['id'] return -3 -def do_local_build(scm_url, branch, skiptests): +def do_local_build(scm_url, branch, skiptests, log_flag=None): """ Starts the local build using the 'mbs-manager build_module_locally' command. Returns exit code of that command or None when scm_url or @@ -276,7 +276,10 @@ def do_local_build(scm_url, branch, skiptests): logging.info("Starting local build of %s, branch %s", scm_url, branch) - command = ['mbs-manager', 'build_module_locally'] + command = ['mbs-manager'] + if log_flag: + command.append(log_flag) + command.append('build_module_locally') if skiptests: command.append('--skiptests') logging.info("Tests will be skipped due to --skiptests option.") @@ -370,10 +373,17 @@ def main(): # Parse command line arguments parser = argparse.ArgumentParser(description="Submits and manages module builds.") subparsers = parser.add_subparsers(dest="cmd_name") - parser.add_argument('-v', dest='verbose', action='store_true', + # logging + flag_debug = '-d' + flag_verbose = '-v' + flag_quiet = '-q' + parser.add_argument(flag_debug, dest='debug', action='store_true', + help="shows debug output") + parser.add_argument(flag_verbose, dest='verbose', action='store_true', help="shows verbose output") - parser.add_argument('-q', dest='quiet', action='store_true', - help="shows only warnings and errors") + parser.add_argument(flag_quiet, dest='quiet', action='store_true', + help="shows only errors") + parser.add_argument('-k', '--insecure', dest='verify', action='store_false', help="allow connections to SSL sites without certs") parser.add_argument('-s', dest='server', action='store', @@ -434,12 +444,18 @@ def main(): args = parser.parse_args() # Initialize the logging. - if args.verbose: + log_flag = None + if args.debug: loglevel = logging.DEBUG - elif args.quiet: - loglevel = logging.WARNING - else: + log_flag = flag_debug + elif args.verbose: loglevel = logging.INFO + log_flag = flag_verbose + elif args.quiet: + loglevel = logging.ERROR + log_flag = flag_quiet + else: + loglevel = logging.WARNING logging.basicConfig(level=loglevel, format="%(levelname)s: %(message)s") if args.cmd_name == "submit": @@ -454,7 +470,8 @@ def main(): else: logging.info("Submitted module build %r" % build_id) elif args.cmd_name == "local": - sys.exit(do_local_build(args.scm_url, args.branch, args.skiptests)) + sys.exit(do_local_build(args.scm_url, args.branch, args.skiptests, + log_flag)) elif args.cmd_name == "watch": # Watch the module build. try: diff --git a/module_build_service/__init__.py b/module_build_service/__init__.py index a0a5d059..ea51ad20 100644 --- a/module_build_service/__init__.py +++ b/module_build_service/__init__.py @@ -44,7 +44,8 @@ from flask import Flask, has_app_context, url_for from flask_sqlalchemy import SQLAlchemy from logging import getLogger -from module_build_service.logger import init_logging, ModuleBuildLogs +from module_build_service.logger import ( + init_logging, ModuleBuildLogs, level_flags) from module_build_service.errors import ( ValidationError, Unauthorized, UnprocessableEntity, Conflict, NotFound, @@ -52,14 +53,32 @@ from module_build_service.errors import ( from module_build_service.config import init_config from module_build_service.proxy import ReverseProxy -app = Flask(__name__) -app.wsgi_app = ReverseProxy(app.wsgi_app) +def create_app(debug=False, verbose=False, quiet=False): + app = Flask(__name__) + app.wsgi_app = ReverseProxy(app.wsgi_app) + + # logging (intended for flask-script, see manage.py) + log = getLogger(__name__) + if debug: + log.setLevel(level_flags["debug"]) + elif verbose: + log.setLevel(level_flags["verbose"]) + elif quiet: + log.setLevel(level_flags["quiet"]) + + return app + +app = create_app() conf = init_config(app) - db = SQLAlchemy(app) +def load_views(): + from module_build_service import views + assert views + + @app.errorhandler(ValidationError) def validationerror_error(e): """Flask error handler for ValidationError exceptions""" @@ -122,5 +141,4 @@ def get_url_for(*args, **kwargs): "multiple session being used in the same time.") return url_for(*args, **kwargs) - -from module_build_service import views +load_views() diff --git a/module_build_service/logger.py b/module_build_service/logger.py index f5407d05..88059a69 100644 --- a/module_build_service/logger.py +++ b/module_build_service/logger.py @@ -51,6 +51,12 @@ levels["error"] = logging.ERROR levels["warning"] = logging.WARNING levels["info"] = logging.INFO +level_flags = {} +level_flags["debug"] = levels["debug"] +level_flags["verbose"] = levels["info"] +level_flags["quiet"] = levels["error"] + + log_format = '%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s' diff --git a/module_build_service/manage.py b/module_build_service/manage.py old mode 100644 new mode 100755 index 6357a088..42525d03 --- a/module_build_service/manage.py +++ b/module_build_service/manage.py @@ -30,7 +30,7 @@ import ssl from shutil import rmtree import getpass -from module_build_service import app, conf, db +from module_build_service import app, conf, db, create_app from module_build_service import models from module_build_service.utils import ( submit_module_build_from_scm, @@ -39,11 +39,14 @@ import module_build_service.messaging import module_build_service.scheduler.consumer -manager = Manager(app) +manager = Manager(create_app) help_args = ('-?', '--help') manager.help_args = help_args migrate = flask_migrate.Migrate(app, db) manager.add_command('db', flask_migrate.MigrateCommand) +manager.add_option('-d', '--debug', dest='debug', action='store_true') +manager.add_option('-v', '--verbose', dest='verbose', action='store_true') +manager.add_option('-q', '--quiet', dest='quiet', action='store_true') def console_script_help(f):