Перейти к содержанию

Приложение PropanApp

Если вы используете Propan CLI, для работы проекта вам необходимо создать экземпляр приложения

from propan import PropanApp
app = PropanApp()

Tip

При инициализации PropanApp записывает себя в ContextRepo под именем "app", поэтому вы всегда можете получить к нему доступ из контекста.

Использование брокеров

Для того, чтобы PropanApp запускал вашего брокера нужно поместить его в объект приложения.

Обычно это делается при объявлении самого приложения

from propan import PropanApp, RedisBroker

broker = RedisBroker("redis://localhost:6379")
app = PropanApp(broker)
from propan import PropanApp, RabbitBroker

broker = RabbitBroker("amqp://guest:guest@localhost:5672/")
app = PropanApp(broker)
from propan import PropanApp, KafkaBroker

broker = KafkaBroker("localhost:9092")
app = PropanApp(broker)
from propan import PropanApp, SQSBroker

broker = SQSBroker("http://localhost:9324", ...)
app = PropanApp(broker)
from propan import PropanApp, NatsBroker

broker = NatsBroker("nats://localhost:4222")
app = PropanApp(broker)

Но, иногда вам может понадобиться инициализировать брокера в другом месте. В таком случае, вы можете использовать метод app.set_broker

from propan import PropanApp, RedisBroker

app = PropanApp()

@app.on_startup
def init_broker():
    broker = RedisBroker("redis://localhost:6379")
    app.set_broker(broker)
from propan import PropanApp, RabbitBroker

app = PropanApp()

@app.on_startup
def init_broker():
    broker = RabbitBroker("amqp://guest:guest@localhost:5672/")
    app.set_broker(broker)
from propan import PropanApp, KafkaBroker

app = PropanApp()

@app.on_startup
def init_broker():
    broker = KafkaBroker("localhost:9092")
    app.set_broker(broker)
from propan import PropanApp, SQSBroker

app = PropanApp()

@app.on_startup
def init_broker():
    broker = SQSBroker("http://localhost:9324", ...)
    app.set_broker(broker)
from propan import PropanApp, NatsBroker

app = PropanApp()

@app.on_startup
def init_broker():
    broker = NatsBroker("nats://localhost:4222")
    app.set_broker(broker)

Запуск других приложений

Если в PropanApp не передавать брокера, все еще будут работать следующие функции:

  • Хуки жизненного цикла
  • Hotreload кода
  • Multiprocessing исполнения

На самом деле, в качестве брокера можно передать экземпляр любого класса, который будет иметь асинхронные методы start и close

class ABCBroker:
    async def start(self) -> None:
        ...

    async def close(self) -> None:
        ...

Если ваш код удовлетворяет этому интерфейсу, PropanApp может использоваться как удобный инструмент для управления проектом.