2

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

4

0 に答える 0