Skip to main content

Library to implement Graph APIs

Project description

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.

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.0rc5.tar.gz (80.6 kB view details)

Uploaded Source

Built Distribution

hiku-0.8.0rc5-py3-none-any.whl (103.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hiku-0.8.0rc5.tar.gz
  • Upload date:
  • Size: 80.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.10.4 CPython/3.8.18

File hashes

Hashes for hiku-0.8.0rc5.tar.gz
Algorithm Hash digest
SHA256 e155cf28271dee44a104b51cf483851133e1c9b43398df56b12419d709010eb5
MD5 e12c0c2cc64d12258243ef399b2eb6a5
BLAKE2b-256 7cb9a33448ca30a3980d0977905909e2d11d2fb32099a241581be33d3c9fbb12

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hiku-0.8.0rc5-py3-none-any.whl
  • Upload date:
  • Size: 103.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.10.4 CPython/3.8.18

File hashes

Hashes for hiku-0.8.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 5f246af50da4f5ad0fbc51e041a4940f284d66ca6363b8f964adc4fd72ea14cc
MD5 839f770c12cca5c60ceadb55cdbefe73
BLAKE2b-256 d955103e940b00ca9910115685782f19fbdddf013944bbbc6c7ba56757c4d699

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