Browse Source

Merge pull request #260 from djsilcock/patch-1

Update commands.py with config option
Peter Justin 8 years ago
parent
commit
b23c46d0f8
1 changed files with 31 additions and 4 deletions
  1. 31 4
      flaskbb/cli/commands.py

+ 31 - 4
flaskbb/cli/commands.py

@@ -24,7 +24,7 @@ import requests
 import click
 from werkzeug.utils import import_string
 from flask import current_app, __version__ as flask_version
-from flask.cli import FlaskGroup, with_appcontext
+from flask.cli import FlaskGroup, ScriptInfo, with_appcontext
 from sqlalchemy.exc import IntegrityError
 from sqlalchemy_utils.functions import database_exists, drop_database
 from flask_migrate import upgrade as upgrade_database
@@ -142,11 +142,38 @@ def get_version(ctx, param, value):
         'python_version': sys.version.split("\n")[0]
     }, color=ctx.color)
     ctx.exit()
-
-
-@click.group(cls=FlaskGroup, create_app=lambda app: create_app(Config))
+    
+    
+
+def createapp(info):
+    config_to_use=getattr(info,'config_to_use',Config)
+    
+    click.echo('creating app with config: {}'.format(config_to_use))
+    return create_app(config_to_use)
+
+def set_config(ctx,param,value):
+    if value:
+        config_to_use=value
+        try:
+            mod,obj=config_to_use.rsplit('.',1)
+            import importlib
+            m=importlib.import_module(mod)
+            config=getattr(m,obj)
+        except (ValueError,ImportError):
+            click.echo('Cannot load module specified')
+            ctx.exit()
+        except AttributeError:
+            click.echo('Cannot find config object in specified module')
+        
+        ctx.ensure_object(ScriptInfo).config_to_use=config
+        
+
+@click.group(cls=FlaskGroup, create_app=createapp)
 @click.option("--version", expose_value=False, callback=get_version,
               is_flag=True, is_eager=True, help="Show the FlaskBB version.")
+@click.option("--config",expose_value=False, callback=set_config, required=False,
+              is_flag=False, is_eager=True, 
+              help="Specify the config to use in dotted module notation eg flaskbb.configs.default.DefaultConfig ")
 def main():
     """This is the commandline interface for flaskbb."""
     pass