A Python library to simplify Hasura, GraphQL and Machine Learning
Project description
PyHasura
A library for conveniently working with Hasura, GraphQL, File Formats, and some basic Machine Learning.
Getting Started
HasuraClient
# Create Hasura Client
import os
from dotenv import load_dotenv
from pyhasura import gql_client, HasuraClient, ExportFormat
from pprint import pprint
load_dotenv() # Load environment variables from .env
hasura_client = HasuraClient(uri=os.environ.get("HASURA_URI"), admin_secret=os.environ.get("HASURA_ADMIN_SECRET"))
Query for a Result
result = hasura_client.execute("""
query findCarts {
carts {
is_complete
cart_items {
quantity
product {
price
}
}
}
cart_items {
id
}
}
""")
pprint(result)
Convert Results to a Dictionary of Alternate Formats
result = hasura_client.convert_output_format(ExportFormat.ARROW)
pprint(result)
result = hasura_client.convert_output_format(ExportFormat.CSV)
pprint(result)
result = hasura_client.convert_output_format(ExportFormat.PARQUET)
pprint(result)
result = hasura_client.convert_output_format(ExportFormat.DATAFRAME)
pprint(result)
result = hasura_client.convert_output_format(ExportFormat.FLAT)
pprint(result)
Write Results, one file for each root entry in the query
result = hasura_client.write_to_file(output_format=ExportFormat.ARROW)
pprint(result)
result = hasura_client.write_to_file(output_format=ExportFormat.CSV)
pprint(result)
result = hasura_client.write_to_file(output_format=ExportFormat.PARQUET)
pprint(result)
result = hasura_client.write_to_file(output_format=ExportFormat.FLAT)
pprint(result)
result = hasura_client.write_to_file(output_format=ExportFormat.NATURAL)
pprint(result)
Detect Anomalies
Uses Doc2Vec to facilitate deeper semantic analysis, but also works fine with categorical string fields.
result = hasura_client.anomalies()
pprint(result)
result = hasura_client.anomalies(threshold=.03)
pprint(result)
Train and Serialize then Re-Use for Anomaly Detection
Typically, do this to train on some historical dataset and then search for anomalies in an alternate (maybe current) dataset.
result = hasura_client.anomalies_training()
pprint(result)
result = hasura_client.anomalies(training_files=result, threshold=0)
pprint(result)
Clustering
Uses KMedoids clustering. You are always working on a dictionary of datasets. You need to define the number of clusters for each dataset in a corresponding input dictionary. You can auto-generate the optimal number of clusters and use that as the input.
result = hasura_client.optimal_number_of_clusters(1,8)
pprint(result)
result = hasura_client.clusters(result)
pprint(result)
Model First Design using DBML
Build models using DB Diagram then generate Hasura metadata.
metadata = hasura_client.add_dbml_model_as_source(
'global-retail-sales.dbml',
kind='postgres',
configuration=configuration,
output_file='new-metadata.json'
)
Auto-Generated/Discovery of Relationships
Wire up as many data sources as you want to analyze to a Hasura instance and automatically generate relationships (across data sources).
old_metadata = hasura_client.get_metadata()
# generate relationships
new_metadata = hasura_client.relationship_analysis('new-metadata.json', entity_synonyms={"Stores": ["warehouse"]})
# update hasura with new relationships
hasura_client.replace_metadata(metadata=new_metadata)
Upload a folder of CSVs to PostgreSQL
Create a datasource from a schema from PostgreSQL. Point a folder of CSVs to same PostgreSQL instance and schema. Then automatically track them in Hasura.
# upload data to database
tables = hasura_client.upload_csv_folder('retailer', uri=_uri, casing=Casing.camel)
# track all the tables we uploaded
result = hasura_client.track_pg_tables(tables, schema="public")
Convert SDL into nodes and relationships
Take a Hasura graphql endpoint and converts tje metadata it into nodes and edges for graph analysis (e.g. finding the optimal path between 2 types).
nodes, relationships = hasura_client.get_schema_relationships()
pp(nodes)
pp(relationships)
hasura_client.metadata_to_neo4j(
os.environ.get("NEO4J_URI"),
os.environ.get("NEO4J_USERNAME"),
os.environ.get("NEO4J_PASSWORD"))
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
Hashes for pyhasura-1.0.25-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c55d1df7a35b0424fac224c258d42e2e52540c7a84e9f80b4f3a25433b9cfcf6 |
|
MD5 | 21f3b6ad9a80e8238e3a2a746c0d11ae |
|
BLAKE2b-256 | 365c6ae0bf75078f97ab23b5aba73d712e0daf5bc500250757f6bccd9ce9a5ed |