Skip to main content
Coveralls License Build status Wheel Latest version

async-class

Adding abillity to write classes with awaitable initialization function.

Usage example

import asyncio
from async_class import AsyncClass, AsyncObject, task, link


class MyAsyncClass(AsyncClass):
     async def __ainit__(self):
          # Do async staff here
          pass


class MainClass(AsyncObject):
     async def __ainit__(self):
          # Do async staff here
          pass

     async def __adel__(self):
          """ This method will be called when object will be closed """
          pass


class RelatedClass(AsyncObject):
     async def __ainit__(self, parent: MainClass):
          link(self, parent)


async def main():
     instance = await MyAsyncClass()
     print(instance)

     main_instance = await MainClass()
     related_instance = await RelatedClass(main_instance)

     assert not main_instance.is_closed
     assert not related_instance.is_closed

     await main_instance.close()
     assert main_instance.is_closed

     # will be closed because linked to closed main_instance
     assert related_instance.is_closed

asyncio.run(main())

Documentation

Async objects might be created when no one event loop has been running. self.loop property is lazily evaluated.

Module provides useful abstractions for writing async code.

Objects inherited from AsyncClass might have their own __init__ method, but it strictly not recommend.

Class AsyncClass

Is a base wrapper with metaclass has no TaskStore instance and additional methods like self.create_task and self.create_future.

This class just solves the initialization problem:

import asyncio
from async_class import AsyncClass


class MyAsyncClass(AsyncClass):
   async def __ainit__(self):
       future = self.loop.create_future()
       self.loop.call_soon(future.set_result, True)
       await future


async def main():
   instance = await MyAsyncClass()
   print(instance)

asyncio.run(main())

Class AsyncObject

Base class with task store instance and helpers for simple task management.

import asyncio
from async_class import AsyncObject


class MyClass(AsyncObject):
   async def __ainit__(self):
       self.task = self.create_task(asyncio.sleep(3600))


async def main():
   obj = await MyClass()

   assert not obj.task.done()

   await obj.close()

   assert obj.task.done()


asyncio.run(main())

Class TaskStore

TaskStore is a task management helper. One instance has create_task() and create_future() methods and all created entities will be destroyed when TaskStore will be closed via close() method.

Also, a task store might create a linked copy of the self, which will be closed when the parent instance will be closed.

import asyncio
from async_class import TaskStore


async def main():
   store = TaskStore(asyncio.get_event_loop())

   task1 = store.create_task(asyncio.sleep(3600))

   child_store = store.get_child()
   task2 = child_store.create_task(asyncio.sleep(3600))

   await store.close()

   assert task1.done() and task2.done()


asyncio.run(main())

Metadata

Release files for async-class 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for async-class 0.5.0
File Size Uploaded
async-class-0.5.0.tar.gz 5.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-class 0.5.0
File Interpreter ABI Platform
async_class-0.5.0-py2-none-any.whl Python 2 none any Details

Total release size: 10.7 kB

Release files / async-class-0.5.0.tar.gz

Download URL async-class-0.5.0.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e2c02a67ea40b606bc281b8cac016c0b194aa7f48274c43bf5cbe385bcdaf39c
BLAKE2b-256 checksum
How to use checksums
8843cdae41799d82b0d766f784c2b14d08d53f9739aecc481aeaea5394c3232b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

Release files / async_class-0.5.0-py2-none-any.whl

Download URL async_class-0.5.0-py2-none-any.whl
Size 5.3 kB
Tags Python 2
SHA-256 checksum
How to use checksums
b11390fcf465fd07c2247668f1698e2e4699be2c4d18991413705efef21fadc7
BLAKE2b-256 checksum
How to use checksums
d57f5882dbcc97deb53de472551dcdf930438fe1ae78961a99704c53cc565c2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page