Skip to main content

aiomisc-dependency

Dependency injection plugin for aiomisc built with aiodine library and supports pytest fixture style dependency injection.

Installation

Installing from PyPI:

pip3 install aiomisc aiomisc-dependency

How to Use

Register Dependency

To register a dependency, you can use the aiomisc_dependency.dependency decorator.

from aiomisc_dependency import dependency

@dependency
async def pg_engine():
    pg_engine = await create_engine(dsn=pg_url)
    yield pg_engine
    pg_engine.close()
    await pg_engine.wait_closed()

As you can see, a dependency can be an async generator function. Code after yield will be executed on teardown to correctly close the dependency.

Coroutine functions, non-async functions, and generators are also supported.

Use Dependency

To use a dependency, you need to add its name to the __dependencies__ property for every service that depends on it. Specified dependencies will be injected as the service's attributes on entrypoint startup. If you need to map the dependency with a different name, use __dependencies_map__.

from contextlib import suppress
from types import MappingProxyType

import aiohttp
from aiomisc.service.aiohttp import AIOHTTPService

class HealthcheckService(AIOHTTPService):

    __dependencies__ = ('pg_engine',)

    async def create_application(self):
        app = aiohttp.web.Application()
        app.add_routes([aiohttp.web.get('/ping', self.healthcheck_handler)])
        return app

    async def healthcheck_handler(self, request):
        pg_status = False
        with suppress(Exception):
            async with self.pg_engine.acquire() as conn:
                await conn.execute('SELECT 1')
                pg_status = True

        return aiohttp.web.json_response(
            {'db': pg_status},
            status=(200 if pg_status else 500),
        )


class RESTService(AIOHTTPService):

    __dependencies__ = ('pg_engine',)

    ...

class AnotherRESTService(AIOHTTPService):

    __dependencies_map__ = MappingProxyType({'pg_engine': 'engine'})

    ...

If any required dependency is not found on entrypoint startup, a RuntimeError will be raised.

You can set a dependency manually by adding it to the keyword arguments on service creation. This can be convenient in tests.

from unittest import Mock

def test_rest_service():
    pg_engine_mock = Mock()
    service = RESTService(pg_engine=pg_engine_mock)
    ...

Dependencies for Dependencies

You can use dependencies as arguments for other dependencies. Arguments will be injected automatically.

@dependency
async def pg_connection(pg_engine):
    async with pg_engine.acquire() as conn:
        yield conn

loop Built-in Dependency

The built-in loop dependency can be used if your dependency requires an event loop instance.

import aioredis

@dependency
async def redis_pool(loop):
    pool = aioredis.create_pool(redis_url, loop=loop)
    yield pool
    pool.close()
    await pool.wait_closed()

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiomisc_dependency-0.1.21.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiomisc_dependency-0.1.21-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file aiomisc_dependency-0.1.21.tar.gz.

File metadata

  • Download URL: aiomisc_dependency-0.1.21.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.11.7 Darwin/24.3.0

File hashes

Hashes for aiomisc_dependency-0.1.21.tar.gz
Algorithm Hash digest
SHA256 da84806db4d4cd33d6320b0a90f899056112f0e875cb7625c47dc84cd0ec5d60
MD5 6bbddd4fd0e1ca7e6bec18ed0b89710f
BLAKE2b-256 d86404327fb05aa5df8ef5bcfd067d93ce36f2fc2e5313f7631b19c82ab497d6

See more details on using hashes here.

File details

Details for the file aiomisc_dependency-0.1.21-py3-none-any.whl.

File metadata

File hashes

Hashes for aiomisc_dependency-0.1.21-py3-none-any.whl
Algorithm Hash digest
SHA256 3b01d61daf743b2054281f147352a9139e71945bdbf47e417c50fab143f8cb1d
MD5 978473223a11e6967cee686b76baa11a
BLAKE2b-256 b42ab4c7291c1862ce0e327c6180546cb5a9436a57b4197836f0884e9af76129

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.21 This release

2 files

0.1.20

2 files

0.1.17

2 files

0.1.16

2 files

0.1.7

2 files

0.1.4

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page