Taskiq integration with AioHTTP framework
Project description
Taskiq + AioHTTP
This project is used to create mocked application and request that you can use as a dependencies in your taskiq application.
It's useful because it runs all startup events of your application and everything that you might expect in your application's state is available inside of your tasks.
We suggest to use this library along with taskiq-python/aiohttp-deps, because it might be super handy to reuse same dependencies of your application in your tasks.
To add an integration, you need to call the function init
in your broker's module.
import taskiq_aiohttp
broker = ...
taskiq_aiohttp.init(broker, "project.module:app")
How does it work?
It adds startup functions to the broker, so it imports your aiohttp application and creates a single worker-wide Request and Application objects that you can depend on.
THIS REQUEST IS NOT RELATED TO THE ACTUAL REQUESTS IN AioHTTP! This request won't have actual data about the request you were handling while sending a task.
Manual context updates
Sometimes it's required to update context manually. For example, for tests. If you need to add context in your broker by hand, please use function populate_context.
Imagine, you want to use InMemoryBroker for testing and your broker file looks like this:
broker = MyBroker()
if env == "pytest":
broker = InMemoryBroker()
In this case your context won't be updated, because inmemory brokers cannot run as workers. To solve this issue, we have a populate context function. It's a bit complex and takes lots of parmeters. But here's a fixture that creates aiohttp test client and populates context of inmemory broker.
import asyncio
from typing import AsyncGenerator
import pytest
from aiohttp import web
from aiohttp.test_utils import BaseTestServer, TestClient, TestServer
from taskiq_aiohttp import populate_context
@pytest.fixture
async def test_client(
app: web.Application,
) -> AsyncGenerator[TestClient, None]:
"""
Create a test client.
This function creates a TestServer
and a test client for the application.
Also this fixture populates context
with needed variables.
:param app: current application.
:yield: ready to use client.
"""
loop = asyncio.get_running_loop()
server = TestServer(app)
client = TestClient(server, loop=loop)
await client.start_server()
# This is important part.
# Since InMemoryBroker doesn't
# run in worker_process, we have to populate
# broker's context manually.
populate_context(
broker=broker,
server=server.runner.server,
app=app,
loop=None,
)
yield client
await client.close()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file taskiq_aiohttp-0.3.1.tar.gz
.
File metadata
- Download URL: taskiq_aiohttp-0.3.1.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.2.0-1016-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | df62b137bc71fa7c6c470fca7e86b9afddbbadcc0bce7e16e2b9dc25ec45be9f |
|
MD5 | d6ca8e6d0a83b948f1c90901027ccff9 |
|
BLAKE2b-256 | a3bd5390c05baca78dc5529e712b3c4df5f3386050e1598976f24763ecd6defd |
File details
Details for the file taskiq_aiohttp-0.3.1-py3-none-any.whl
.
File metadata
- Download URL: taskiq_aiohttp-0.3.1-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.2.0-1016-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e282575bc6418c4a47ab2abae5430d410b1935e4e0ff8ba1fded10083eeb80d |
|
MD5 | 07520e12b1925496a368e88353874117 |
|
BLAKE2b-256 | 9c591fc715741f664ee6c28f5ba913c44d76f4bcba7445c55e030513ea023b4a |