Wyobraź sobie, że mam dużą aplikację CLI z wieloma różnymi poleceniami (pomyśl, na przykład obraz-magia).Czy jest możliwe użycie wzoru "fabryki aplikacji" z Flask za pomocą aplikacji CLI Click?
chciałem zorganizować tę aplikację na moduły i itd. Tak więc, nie będzie mistrzem click.group
gdzieś:
#main.py file
@click.group()
def my_app():
pass
if __name__ == "__main__":
my_app()
które mogą być importowane w każdym module, które definiują polecenie:
from main import my_app
# command_x.py
@my_app.command()
def command_x():
pass
Problem polega na tym, że napotkam problem z okrężnym importowaniem, ponieważ plik main.py
nic nie wie o command_x.py
i musiałbym go zaimportować przed wywołaniem sekcji głównej.
To samo dzieje się w kolbie i zwykle dotyczy wzoru fabrycznego aplikacji. Zazwyczaj trzeba aplikację tworzony przed poglądami:
app = Flask("my_app")
@my_app.route("/")
def view_x():
pass
if __name__ == "__main__":
app.run()
w strukturze aplikacji fabrycznej ty odroczenia „Rejestracja” z ideowych:
# blueprints.py
blueprint = Blueprint(yaddayadda)
@blueprint.route("/")
def view_x():
pass
i zrobić fabrykę, która wie, jak zbudować aplikacja i zarejestrować plany:
#app_factory.py
from blueprints import view_x
def create_app():
app = Flask()
view_x.init_app(app)
return app
a następnie można utworzyć skrypt, aby uruchomić aplikację:
#main.py
from app_factory import create_app
if __name__ == "__main__":
app = create_app()
app.run()
Czy podobny wzór można zastosować z kliknięciem? Czy mogę po prostu utworzyć "aplikację kliknięcia" (być może rozszerzającą click.Group
), w której rejestruję "kontrolery", które są poszczególnymi poleceniami?