Hiku
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)
| File | Size | Uploaded | |
|---|---|---|---|
| hiku-0.7.6.tar.gz | 80.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|