__init__.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from graphql.error import GraphQLError
  2. from graphene.types.schema import Schema
  3. def default_format_error(error):
  4. if isinstance(error, GraphQLError):
  5. return error.formatted
  6. return {"message": str(error)}
  7. def format_execution_result(execution_result, format_error):
  8. if execution_result:
  9. response = {}
  10. if execution_result.errors:
  11. response["errors"] = [format_error(e) for e in execution_result.errors]
  12. response["data"] = execution_result.data
  13. return response
  14. class Client:
  15. def __init__(self, schema, format_error=None, **execute_options):
  16. assert isinstance(schema, Schema)
  17. self.schema = schema
  18. self.execute_options = execute_options
  19. self.format_error = format_error or default_format_error
  20. def format_result(self, result):
  21. return format_execution_result(result, self.format_error)
  22. def execute(self, *args, **kwargs):
  23. executed = self.schema.execute(*args, **dict(self.execute_options, **kwargs))
  24. return self.format_result(executed)
  25. async def execute_async(self, *args, **kwargs):
  26. executed = await self.schema.execute_async(
  27. *args, **dict(self.execute_options, **kwargs)
  28. )
  29. return self.format_result(executed)