Module app.schema_graphql
A top GraphQL query.
You can use a similar code to integrate the haystack graphql api in a bigger environment.
Expand source code
# -*- coding: utf-8 -*-
# Haystack API Provider module
# See the accompanying LICENSE file.
# (C) 2021 Engie Digital
#
# vim: set ts=4 sts=4 et tw=78 sw=4 si:
"""
A top GraphQL query.
You can use a similar code to integrate the haystack graphql api in a bigger environment.
"""
import logging
import os
import sys
import click
from shaystack import HaystackInterface
from shaystack.providers import get_provider
import graphene
from app.graphql_model import ReadHaystack
log = logging.getLogger("shaystack")
# noinspection PyTypeChecker
def get_schema_for_provider(provider: HaystackInterface) -> graphene.types.schema.Schema:
class Query(graphene.ObjectType):
"""GraphQL haystack query. To integrate the haystack Graphql API with other
GraphQL API, see `aws appsync` .
"""
class Meta: # pylint: disable=missing-class-docstring
description = "Root for haystack api"
haystack = graphene.Field(graphene.NonNull(ReadHaystack))
# noinspection PyUnusedLocal
@staticmethod
def resolve_haystack(parent, info):
"""
Args:
parent:
info:
"""
return ReadHaystack(provider)
return graphene.Schema(query=Query)
def _dump_haystack_schema(provider) -> None:
"""Print haystack schema to insert in another global schema."""
# Print only haystack schema
from graphql.utils import schema_printer # pylint: disable=import-outside-toplevel
schema = get_schema_for_provider(provider)
print(schema_printer.print_schema(schema))
@click.command()
def main() -> int:
"""Print the partial schema for haystack API.
`GRAPHQL_SCHEMA=app/haystack_schema.json python app/blueprint_graphql.py`
>partial_gql.graphql
"""
provider_name = os.environ.get("HAYSTACK_PROVIDER", "shaystack.providers.db")
provider = get_provider(provider_name, os.environ)
_dump_haystack_schema(provider)
return 0
if __name__ == '__main__':
sys.exit(main())
Functions
def get_schema_for_provider(provider: HaystackInterface) ‑> graphene.types.schema.Schema
-
Expand source code
def get_schema_for_provider(provider: HaystackInterface) -> graphene.types.schema.Schema: class Query(graphene.ObjectType): """GraphQL haystack query. To integrate the haystack Graphql API with other GraphQL API, see `aws appsync` . """ class Meta: # pylint: disable=missing-class-docstring description = "Root for haystack api" haystack = graphene.Field(graphene.NonNull(ReadHaystack)) # noinspection PyUnusedLocal @staticmethod def resolve_haystack(parent, info): """ Args: parent: info: """ return ReadHaystack(provider) return graphene.Schema(query=Query)