Skip to main content

test PyPI version codecov License: MIT Code style: black Imports: isort PyPI - Python Version

coro-context-manager

coro-context-manager is a simple python package that includes an object that can wrap a coroutine to allow it to behave as a context manager or a regular awaitable.

This class is super useful when you have a coroutine that returns an object that defines an async context manager using __aenter__ and __aexit__

Installation

pip

pip install coro-context-manager

poetry

poetry add coro-context-manager

Usage

CoroContextManager can be used to wrap a coroutine so that it can be awaited or called via an async context manager in which case the library will try to use the underlying object's __aenter__ and __aexit__, if they exist.

import asyncio

from coro_context_manager import CoroContextManager


class MyObject:

    def __init__(self, initial_value):
        self.some_value = initial_value

    async def __aenter__(self):
        await asyncio.sleep(.1)
        self.some_value += 1
        return self

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        await asyncio.sleep(.1)
        self.some_value -= 1

    @classmethod
    async def an_io_intensive_constructor(cls, initial_value):
        await asyncio.sleep(10)
        return cls(initial_value)


async def main():
    """
    Using CoroContextManager, I get a coroutine I can await or use with an async context manager, which proxies to
    the context manager defined on object returned by the coroutine, if it exists.
    """

    # i can await it directly
    myobj = await CoroContextManager(MyObject.an_io_intensive_constructor(5))
    print(type(myobj))
    # <class '__main__.MyObject'>

    # or use it as an async context manager, not having to await it, with the same api!
    async with CoroContextManager(MyObject.an_io_intensive_constructor(5)) as myobj:
        print(type(myobj))
        # <class '__main__.MyObject'>
        print(myobj.some_value)
        # 6

    print(myobj.some_value)
    # 5


asyncio.run(main())

Rationale

This is a common enough pattern used in several async packages all with slightly different implementation. It would be nice if there was a consistent pattern everyone was using; this package aims to provide that.

Download files

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

Source Distribution

coro_context_manager-0.2.1.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

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

coro_context_manager-0.2.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file coro_context_manager-0.2.1.tar.gz.

File metadata

  • Download URL: coro_context_manager-0.2.1.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.9.21 Linux/6.8.0-1017-azure

File hashes

Hashes for coro_context_manager-0.2.1.tar.gz
Algorithm Hash digest
SHA256 3bf30bd52016cc22f5200d65fb306eb96fd040e82e0fbf8d820f85cce74b81f1
MD5 d39293ee074a6e8d9d0e982d4991d201
BLAKE2b-256 1d3f9be07bcaae33f7647349c555bff21776cff852b4b81459897818b9d5b3ab

See more details on using hashes here.

File details

Details for the file coro_context_manager-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: coro_context_manager-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.9.21 Linux/6.8.0-1017-azure

File hashes

Hashes for coro_context_manager-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8bf4527dbeab7ff96ef7d92326ce43b1755685e35b991090f18c82520d0e3287
MD5 0ca7aa9a98c9947876a018212e5458a5
BLAKE2b-256 98e8be0f049c12854197b4ef401436a7a05cfd35a7165065dd463f4a6fd8ec2f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

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