Skip to main content

asyncio Context Manager with Explicit Interface

Project description

PyPi Package Version Supported Python versions Documentation Status MIT License Github Actions workflow https://codecov.io/gh/Bibo-Joshi/aiorem/graph/badge.svg?token=H1HUA2FDR3 pre-commit.ci status Code Style: Black

A simple asyncio context manager with explicit interface.

Introduction

This library provides a simple context manager for managing resources in an asyncio environment. It’s designed to have an explicit interface, which makes it easy to use both as context manager and as a regular object for custom use cases.

Installing

You can install or upgrade aiorem via

$ pip install aiorem --upgrade

Motivation

When working with asyncio Python libraries, async context managers are a common pattern for managing resources and snippets like

async with some_lib.Client() as client:
    ...

are often seen in the quickstart. However, there are two use cases, where this pattern is hard to use and an explicit interface for acquiring and releasing resources is desirable.

  1. Nested context managers: When writing a class that manages several resources, acquiring and releasing these resources should each usually be bundled in a single method.

  2. Low level event loop usage: In some advanced cases, it can be desirable to use things like loop.run_until_complete than await-ing a coroutine.

For both cases, one can then either explicitly call Client.__aenter__ and Client.__aexit__ or duplicate whatever logic is used within these methods. Unfortunately, the behavior of Client.__aenter__ and Client.__aexit__ is not always well documented. Moreover, using magic/dunder might be viewed as bad practice, as they are mostly intended to be used by the Python interpreter.

This shortcoming is what aiorem aims to improve. As the Quick Start below shows, subclasses of aiorem.AbstractResourceManager can be used in different ways according to the needs of the use case while the behavior is well documented and explicit. For the case of nested context managers, aiorem provides the AbstractResourceManagerCollection class as a natural extension of AbstractResourceManager.

Quick Start

Here is a simple example of how to use aiorem:

import asyncio
from aiorem import AbstractResourceManager


class ResourceManager(AbstractResourceManager):
    async def acquire_resources(self):
        print("Resource acquired")

    async def release_resources(self):
        print("Resource released")


async def context_manager():
    async with ResourceManager():
        print("Context manager block")


@ResourceManager()
async def decorator():
    print("Decorator block")


async def explicit_interface():
    rm = ResourceManager()
    await rm.acquire_resources()
    print("Explicit interface block")
    await rm.release_resources()


async def main():
    await context_manager()
    await decorator()
    await explicit_interface()


if __name__ == "__main__":
    asyncio.run(main())

For more information on how to use aiorem, please refer to the documentation.

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

aiorem-0.0.4.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

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

aiorem-0.0.4-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file aiorem-0.0.4.tar.gz.

File metadata

  • Download URL: aiorem-0.0.4.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aiorem-0.0.4.tar.gz
Algorithm Hash digest
SHA256 08d3fc797f72b9b003e43e1792668960379fe47d83bd82491f62cf5aa72e84df
MD5 d73412ba68a4a1dbef253ad1359726cf
BLAKE2b-256 9fcb1181b0fd4c3d2b6c32af8f4a9ff461d970d106fac7454ff73587e5c9ca6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiorem-0.0.4.tar.gz:

Publisher: release.yml on Bibo-Joshi/aiorem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiorem-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: aiorem-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aiorem-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2fd772a0249b85575039db1d41db9350ebc891f9011f5b8f3d36585793565f83
MD5 ca84499665ac63b3f801cdca95258ac7
BLAKE2b-256 295292a5ca50f28a2c96808e8661f41ba117ba7041ec5c17115fe43342447c68

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiorem-0.0.4-py3-none-any.whl:

Publisher: release.yml on Bibo-Joshi/aiorem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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