Library to implement Graph APIs
Project description
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e155cf28271dee44a104b51cf483851133e1c9b43398df56b12419d709010eb5 |
|
MD5 | e12c0c2cc64d12258243ef399b2eb6a5 |
|
BLAKE2b-256 | 7cb9a33448ca30a3980d0977905909e2d11d2fb32099a241581be33d3c9fbb12 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f246af50da4f5ad0fbc51e041a4940f284d66ca6363b8f964adc4fd72ea14cc |
|
MD5 | 839f770c12cca5c60ceadb55cdbefe73 |
|
BLAKE2b-256 | d955103e940b00ca9910115685782f19fbdddf013944bbbc6c7ba56757c4d699 |