Приложение 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 может использоваться как удобный инструмент для управления проектом.