我有以下三个模块(基于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子管理器?