Skip to main content

Hiku

project documentation version tag license

Hiku is a library to implement Graph APIs. Essential GraphQL support included.

Installation

$ pip3 install hiku

Bug fixes and new features are frequently published via release candidates:

$ pip3 install --upgrade --pre hiku

Documentation

Read documentation

Optional dependencies

  • graphql-core - for GraphQL support

  • sqlalchemy - for SQLAlchemy support as a data-source

  • aiopg - for async PostgreSQL support with aiopg

  • asyncpg - for async PostgreSQL support with asyncpg

  • prometheus-client - for Prometheus metrics support

  • sentry-sdk - for Sentry tracing support

Highlights

  • Not coupled to a single specific query language

  • Flexibility in result serialization

  • Natively uses normalized result representation, without data duplication

  • All concurrency models supported: coroutines, threads

  • Parallel query execution

  • No data under-fetching or over-fetching between client<->server and between server<->database

  • No N+1 problems by design

  • Introduces a concept of Two-Level Graph in order to decouple data-sources and business-logic

Quick example

Graph definition:

from hiku.graph import Graph, Root, Node, Field, Link
from hiku.types import String, Sequence, TypeRef

def characters_data(fields, ids):
    data = {
        1: {'name': 'James T. Kirk', 'species': 'Human'},
        2: {'name': 'Spock', 'species': 'Vulcan/Human'},
        3: {'name': 'Leonard McCoy', 'species': 'Human'},
    }
    return [[data[i][f.name] for f in fields] for i in ids]

def characters_link():
    return [1, 2, 3]

GRAPH = Graph([
    Node('Character', [
        Field('name', String, characters_data),
        Field('species', String, characters_data),
    ]),
    Root([
        Link('characters', Sequence[TypeRef['Character']],
             characters_link, requires=None),
    ]),
])

Query:

from hiku.schema import Schema
from hiku.builder import Q, build
from hiku.executors.sync import SyncExecutor

schema = Schema(SyncExecutor(), GRAPH)

result = schema.execute_sync(build([
    Q.characters[
        Q.name,
        Q.species,
    ],
]))

# use result in your code
for character in result.data["characters"]:
    print(character["name"], '-', character["species"])

Output:

James T. Kirk - Human
Spock - Vulcan/Human
Leonard McCoy - Human

Contributing

Use Tox in order to test and lint your changes.

Metadata

Release files for hiku 0.7.6

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

Source distribution (sdist)

Source distribution for hiku 0.7.6
File Size Uploaded
hiku-0.7.6.tar.gz 80.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hiku 0.7.6
File Interpreter ABI Platform
hiku-0.7.6-py3-none-any.whl Python 3 none any Details

Total release size: 183.7 kB

Release files / hiku-0.7.6.tar.gz

Download URL hiku-0.7.6.tar.gz
Size 80.6 kB
Tags Source
SHA-256 checksum
How to use checksums
3a8029f39fe5493eaa8a3dadfd63db2fd44bb9a7fe87e6dc5c6ee40829bd4929
BLAKE2b-256 checksum
How to use checksums
f96e55e5ec459f48ba73fb355c334eef10ea8564f57c09da2709d260aa99934d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.10.4 CPython/3.8.18

Release files / hiku-0.7.6-py3-none-any.whl

Download URL hiku-0.7.6-py3-none-any.whl
Size 103.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aad755745a14ea5140fb63ee92d74c86ca101bc1ebcd33e3b6c834a57a994281
BLAKE2b-256 checksum
How to use checksums
650738a02198b2ed9ffbf551b45b08ca523f1d3e0fc4d8217271d2ecc1a390bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.10.4 CPython/3.8.18

Release history Release notifications | RSS feed

This release

0.7.6 This release

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

1 release file

0.5.1

1 release file

0.5.0

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.9

1 release file

0.3.8

1 release file

0.3.7

1 release file

0.3.5

1 release file

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.1

1 release file

0.1.0

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