"""Provides a generic connector for upstream GraphQL services.""" from lambdacommon.graphql.graphql import ( GraphQLConnector, GraphQLError) import backoff class GraphQLBackoffConnector(GraphQLConnector): """Connector to an upstream GraphQL service with backoff.""" @backoff.on_exception(backoff.expo, GraphQLError, max_tries=3, max_time=90, max_value=30) def execute(self, query: str, data: dict): """Execute a call to a GraphQL endpoint. Args: query (str): Query data (dict): JSON formatted params Returns: dict """ response = self.endpoint( query, data, extra_headers=self.get_headers()) if self.raise_on_error and response.get('errors'): raise GraphQLError(response.get('errors')) return response