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 | Provenance | |
|---|---|---|---|---|
| hiku-0.7.6.tar.gz | 80.6 kB | Without provenance | 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
|
Security for hiku 0.7.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.