Skip to main content

Library to implement Graph APIs

Project description

project documentation version tag license codspeed

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 uv and Tox in order to install dependencies, run checks, and test your changes.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hiku-0.8.0rc30.tar.gz (140.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hiku-0.8.0rc30-py3-none-any.whl (110.2 kB view details)

Uploaded Python 3

File details

Details for the file hiku-0.8.0rc30.tar.gz.

File metadata

  • Download URL: hiku-0.8.0rc30.tar.gz
  • Upload date:
  • Size: 140.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hiku-0.8.0rc30.tar.gz
Algorithm Hash digest
SHA256 d949ddbadd9d5fbfb77abf4afd3e6d1c3cb1b6a8fde42a3553e6d6374623090d
MD5 b5e9a0637991c9e265599e6e66af12ba
BLAKE2b-256 a10e266b4aedee361dbc36ce81c6b82be5c6d2cf003190b96920aa459bc1a496

See more details on using hashes here.

File details

Details for the file hiku-0.8.0rc30-py3-none-any.whl.

File metadata

  • Download URL: hiku-0.8.0rc30-py3-none-any.whl
  • Upload date:
  • Size: 110.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hiku-0.8.0rc30-py3-none-any.whl
Algorithm Hash digest
SHA256 f6c78a047173716bc37d88e73d0252b99f89f0115bf2aa81578fdc0e16966e8f
MD5 7b1bc2fca64a4a3ae0bcdc0c96c2dcc7
BLAKE2b-256 4fb89ecc79b7893d5f83a91cbf4c3940d16cf341a191119b6e46e68af08616db

See more details on using hashes here.

Supported by

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