Skip to main content

Like React Query but for Python

Project description

Python Query

Python library heavily inspired by react-query.

Getting Started

Here is a compilation of some actions that are achievable with this library.

import asyncio

import python_query


async def function() -> None:
    await asyncio.sleep(1)
    return 2


async def main():
    query_cache = python_query.QueryCache()
    query_cache["query1"] = lambda: 1
    query_cache["query2"] = function

    assert await query_cache["query1"].fetch_async() == 1
    assert await query_cache["query2"].fetch_async() == 2

    query_cache["query1"] = lambda: 3

    assert await query_cache["query1"].fetch_async() == 3

    query_cache["parent", "child1", {"page": 1}] = lambda: 4
    query_cache["parent", "child1", {
        "page": 1, "per_page": 10}] = lambda: 5
    queries = query_cache.get_queries_not_exact("parent")
    queries2 = query_cache.get_queries_not_exact(["parent", "child1"])
    queries3 = query_cache.get_queries_not_exact(
        ["parent", "child1", {"page": 1}])

    assert len(queries) == 2
    assert len(queries2) == 2
    assert len(queries3) == 2


asyncio.run(main())

Decorators

The library also provides decorators to easily create queries.

import asyncio

import python_query

query_cache = python_query.QueryCache()


# Static keys
@QueryCache.cache(query_cache, ["key", "1"])
async def function() -> None:
    await asyncio.sleep(1)
    return 2

# Generate keys based on the arguments
@QueryCache.cache(query_cache, lambda number: ["key", "1", number])
async def function2(number : int) -> None:
    await asyncio.sleep(1)
    return number


async def main():
    # Only added to cache when called first time
    assert query_cache.get_query(["key", "1"]) is None

    assert await function() == 2
    assert query_cache.get_query(["key", "1"]) is not None
    assert await query_cache.get_query(["key", "1"]).fetch_async() == 2
    assert await function() == 2


    # Only added to cache when called first time
    assert query_cache.get_query(["key", "1", 3]) is None

    assert await function2(3) == 3
    assert query_cache.get_query(["key", "1", 2]) is None
    assert query_cache.get_query(["key", "1", 3]) is not None
    assert await query_cache.get_query(["key", "1", 3]).fetch_async() == 3
    assert await function2(3) == 3


asyncio.run(main())

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

python-query-0.0.1b3.tar.gz (44.0 kB view hashes)

Uploaded Source

Built Distribution

python_query-0.0.1b3-py3-none-any.whl (31.0 kB view hashes)

Uploaded Python 3

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