如何将flask-script选项传递给子项

时间:2015-08-10 16:14:27

标签: python flask-script

我有以下三个模块(基于Miguel Grinberg的优秀书籍):

__init__.py

from flask import Flask
from config import config

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app

manage.py

import os
from app import create_app
from app.import_file import Import_File_CLI
from flask.ext.script import Manager, Shell, Command

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)

manager.add_command('import_file', Import_File_CLI())

manager.add_option('-v', dest='verbosity', help='how verbose output should be - the more vs, the more verbose', action='count', required = False)

if __name__ == '__main__':
    manager.run()

import_file.py

from flask.ext.script import Command, Option
from flask import current_app
import logging

class Import_File_CLI(Command):
    "Imports files from the command line"

    option_list = (
        Option(help="file to import", dest="filename"),
    )

    def run(self, filename, verbosity=0):

        if verbosity == 1:
            log_level = logging.WARNING
        elif verbosity == 2:
            log_level = logging.INFO
        elif verbosity > 2:
            log_level = logging.DEBUG
        else:
            log_level = None

我将要进行大量的文件操作,并且我希望能够从命令行进行一些测试/调试,因此会有许多_CLI模块用于不同的事情。我希望能够控制输出的详细程度,因此我定义了详细程度选项。我无法弄清楚的是如何将该选项实际传递到Import_File_CLI类中。我知道我可以在option_list中添加一个选项,但最后我不得不将它添加到我创建的每个_CLI类中,当我真的希望它成为一个全局选项时。那么如何访问我在子类中的主管理器中设置的选项?

文档类型有一个这样的例子,但它在同一个模块中,而不是一个子类。我可以将选项传递给工厂函数,然后设置应用程序范围的默认值,但这似乎也不是最优,因为我大部分时间都不需要设置它。我是否需要创建一个_CLI子管理器?

0 个答案:

没有答案