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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file python-query-0.0.1b3.tar.gz.

File metadata

  • Download URL: python-query-0.0.1b3.tar.gz
  • Upload date:
  • Size: 44.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for python-query-0.0.1b3.tar.gz
Algorithm Hash digest
SHA256 a59ac8c9b41f01d4a8a2d98dfa1e5ff8177b8a888cc7fcd9729c9718d2022bbc
MD5 db34887863915433f65287d1559c03ab
BLAKE2b-256 a7607a804d88572435c06fbc6b1ce3211e26ccddf8913eadc6380684a6130d55

See more details on using hashes here.

File details

Details for the file python_query-0.0.1b3-py3-none-any.whl.

File metadata

File hashes

Hashes for python_query-0.0.1b3-py3-none-any.whl
Algorithm Hash digest
SHA256 9af7fd1d236e9e4c41f51a303fd7a19d62d330910c26a89995d86091d024cc5a
MD5 553f7d8e792a466bfad745ac5717503a
BLAKE2b-256 02a2fcd34c5090f65d8e48e82a540c05dd4271940c1dc5756f9b84604e6249fd

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