次の 3 つのモジュールがあります (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 サブマネージャーを作成する必要がありますか?