Skip to main content

Python decorator for async properties.

Project description

async_property

https://img.shields.io/pypi/v/async_property.svg https://img.shields.io/travis/ryananguiano/async_property.svg Documentation Status Updates

Python decorator for async properties.

Install

To install async_property, run this command in your terminal:

$ pip install async-property

Or if you have pipenv:

$ pipenv install async-property

Usage

You can use @async_property just as you would with @property, but on an async function.

class Foo:
    @async_property
    async def remote_value(self):
        return await get_remote_value()

The property remote_value now returns an awaitable coroutine.

instance = Foo()
await instance.remote_value

Cached Properties

@async_cached_property will call the function only once. Subsequent awaits to the property will return a cached value.

class Foo:
    @async_cached_property
    async def value(self):
        print('loading value')
        return 123

>>> instance = Foo()
>>> instance.value
<AwaitableOnly "Foo.value">

>>> await instance.value
loading value
123
>>> await instance.value
123
>>> instance.value
123

>>> instance.value = 'abc'
>>> instance.value
'abc'
>>> await instance.value
'abc'

>>> del instance.value
>>> await instance.value
loading value
123

AwaitLoader

If you have an object with multiple cached properties, you can subclass AwaitLoader. This will make your class instances awaitable and will load all @async_cached_property fields concurrently. AwaitLoader will call await instance.load(), if it exists, before loading properties.

class Foo(AwaitLoader):
    async def load(self):
        print('load called')

    @async_cached_property
    async def db_lookup(self):
        return 'success'

    @async_cached_property
    async def api_call(self):
        return 'works every time'

>>> instance = await Foo()
load called
>>> instance.db_lookup
'success'
>>> instance.api_call
'works every time'

Features

  • Both regular and cached property.

  • @async_cached_property can be accessed multiple times without repeating function call.

  • @async_cached_property uses asyncio.Lock to ensure function is called only once per instance.

  • Full test coverage with py.test

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

The ObjectProxy class was taken from wrapt library by Graham Dumpleton.

History

0.2.1 (2019-04-13)

  • Update docs and readme

0.2.0 (2019-04-12)

  • Use instance state to hold cache and locks

0.1.4 (2019-04-12)

  • Fix inheritance issues on AwaitLoader

0.1.3 (2019-04-12)

  • Cleanup code

0.1.2 (2019-04-12)

  • Fix asyncio.Lock issues

0.1.1 (2019-04-11)

  • Complete test coverage and update readme

0.1.0 (2019-04-11)

  • First release on PyPI.

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

async_property-0.2.1.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

async_property-0.2.1-py2.py3-none-any.whl (9.4 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: async_property-0.2.1.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for async_property-0.2.1.tar.gz
Algorithm Hash digest
SHA256 53826fd45a67d7d6cca3d7abbc0e8ba951f7c7618c830021fbd3675979b0b67d
MD5 9bba6594633bb68c46dff0f1c2a9d66e
BLAKE2b-256 9400ade26bd5fdb637e2e83b537113a5b03d5288da673384ff415b629be9e0d6

See more details on using hashes here.

File details

Details for the file async_property-0.2.1-py2.py3-none-any.whl.

File metadata

  • Download URL: async_property-0.2.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for async_property-0.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f1f105009a6216ed9a13031aa13632754ed8a5c2e329fb8f9f2082d83529eacd
MD5 8cb0916ca83e94c5da583a5fe8cb99b4
BLAKE2b-256 406b40354fada6f6ed9a38a16220c89ccdd43d96a9565db68467ca27ec059bbf

See more details on using hashes here.

Supported by

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