You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
Metadata-Version: 2.2
 | 
						|
Name: async-lru
 | 
						|
Version: 2.0.5
 | 
						|
Summary: Simple LRU cache for asyncio
 | 
						|
Home-page: https://github.com/aio-libs/async-lru
 | 
						|
Maintainer: aiohttp team <team@aiohttp.org>
 | 
						|
Maintainer-email: team@aiohttp.org
 | 
						|
License: MIT License
 | 
						|
Project-URL: Chat: Matrix, https://matrix.to/#/#aio-libs:matrix.org
 | 
						|
Project-URL: Chat: Matrix Space, https://matrix.to/#/#aio-libs-space:matrix.org
 | 
						|
Project-URL: CI: GitHub Actions, https://github.com/aio-libs/async-lru/actions
 | 
						|
Project-URL: GitHub: repo, https://github.com/aio-libs/async-lru
 | 
						|
Keywords: asyncio,lru,lru_cache
 | 
						|
Classifier: License :: OSI Approved :: MIT License
 | 
						|
Classifier: Intended Audience :: Developers
 | 
						|
Classifier: Programming Language :: Python
 | 
						|
Classifier: Programming Language :: Python :: 3
 | 
						|
Classifier: Programming Language :: Python :: 3 :: Only
 | 
						|
Classifier: Programming Language :: Python :: 3.9
 | 
						|
Classifier: Programming Language :: Python :: 3.10
 | 
						|
Classifier: Programming Language :: Python :: 3.11
 | 
						|
Classifier: Programming Language :: Python :: 3.12
 | 
						|
Classifier: Programming Language :: Python :: 3.13
 | 
						|
Classifier: Development Status :: 5 - Production/Stable
 | 
						|
Classifier: Framework :: AsyncIO
 | 
						|
Requires-Python: >=3.9
 | 
						|
Description-Content-Type: text/x-rst
 | 
						|
License-File: LICENSE
 | 
						|
Requires-Dist: typing_extensions>=4.0.0; python_version < "3.11"
 | 
						|
 | 
						|
async-lru
 | 
						|
=========
 | 
						|
 | 
						|
:info: Simple lru cache for asyncio
 | 
						|
 | 
						|
.. image:: https://github.com/aio-libs/async-lru/actions/workflows/ci-cd.yml/badge.svg?event=push
 | 
						|
   :target: https://github.com/aio-libs/async-lru/actions/workflows/ci-cd.yml?query=event:push
 | 
						|
   :alt: GitHub Actions CI/CD workflows status
 | 
						|
 | 
						|
.. image:: https://img.shields.io/pypi/v/async-lru.svg?logo=Python&logoColor=white
 | 
						|
   :target: https://pypi.org/project/async-lru
 | 
						|
   :alt: async-lru @ PyPI
 | 
						|
 | 
						|
.. image:: https://codecov.io/gh/aio-libs/async-lru/branch/master/graph/badge.svg
 | 
						|
    :target: https://codecov.io/gh/aio-libs/async-lru
 | 
						|
 | 
						|
.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
 | 
						|
   :target: https://matrix.to/#/%23aio-libs:matrix.org
 | 
						|
   :alt: Matrix Room — #aio-libs:matrix.org
 | 
						|
 | 
						|
.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
 | 
						|
   :target: https://matrix.to/#/%23aio-libs-space:matrix.org
 | 
						|
   :alt: Matrix Space — #aio-libs-space:matrix.org
 | 
						|
 | 
						|
Installation
 | 
						|
------------
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
    pip install async-lru
 | 
						|
 | 
						|
Usage
 | 
						|
-----
 | 
						|
 | 
						|
This package is a port of Python's built-in `functools.lru_cache <https://docs.python.org/3/library/functools.html#functools.lru_cache>`_ function for `asyncio <https://docs.python.org/3/library/asyncio.html>`_. To better handle async behaviour, it also ensures multiple concurrent calls will only result in 1 call to the wrapped function, with all ``await``\s receiving the result of that call when it completes.
 | 
						|
 | 
						|
.. code-block:: python
 | 
						|
 | 
						|
    import asyncio
 | 
						|
 | 
						|
    import aiohttp
 | 
						|
    from async_lru import alru_cache
 | 
						|
 | 
						|
 | 
						|
    @alru_cache(maxsize=32)
 | 
						|
    async def get_pep(num):
 | 
						|
        resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
 | 
						|
        async with aiohttp.ClientSession() as session:
 | 
						|
            try:
 | 
						|
                async with session.get(resource) as s:
 | 
						|
                    return await s.read()
 | 
						|
            except aiohttp.ClientError:
 | 
						|
                return 'Not Found'
 | 
						|
 | 
						|
 | 
						|
    async def main():
 | 
						|
        for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
 | 
						|
            pep = await get_pep(n)
 | 
						|
            print(n, len(pep))
 | 
						|
 | 
						|
        print(get_pep.cache_info())
 | 
						|
        # CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
 | 
						|
 | 
						|
        # closing is optional, but highly recommended
 | 
						|
        await get_pep.cache_close()
 | 
						|
 | 
						|
 | 
						|
    asyncio.run(main())
 | 
						|
 | 
						|
 | 
						|
TTL (time-to-live in seconds, expiration on timeout) is supported by accepting `ttl` configuration
 | 
						|
parameter (off by default):
 | 
						|
 | 
						|
.. code-block:: python
 | 
						|
 | 
						|
    @alru_cache(ttl=5)
 | 
						|
    async def func(arg):
 | 
						|
        return arg * 2
 | 
						|
 | 
						|
 | 
						|
The library supports explicit invalidation for specific function call by
 | 
						|
`cache_invalidate()`:
 | 
						|
 | 
						|
.. code-block:: python
 | 
						|
 | 
						|
    @alru_cache(ttl=5)
 | 
						|
    async def func(arg1, arg2):
 | 
						|
        return arg1 + arg2
 | 
						|
 | 
						|
    func.cache_invalidate(1, arg2=2)
 | 
						|
 | 
						|
The method returns `True` if corresponding arguments set was cached already, `False`
 | 
						|
otherwise.
 | 
						|
 | 
						|
Thanks
 | 
						|
------
 | 
						|
 | 
						|
The library was donated by `Ocean S.A. <https://ocean.io/>`_
 | 
						|
 | 
						|
Thanks to the company for contribution.
 |