# ============================================================================= API_HOST = "api.smash.gg" API_ENDPOINT = "gql/alpha" API_SCHEME = "https" API_URL = "{scheme}://{host}/{endpoint}".format( scheme = API_SCHEME, host = API_HOST, endpoint = API_ENDPOINT, ) # ============================================================================= def run_query( query_name, variables = {}, query_dir = "queries", query_extension = "gql", api_url = API_URL, log = None, ): # Load query query_path = os.path.join( query_dir, "{}.{}".format( query_name, query_extension, ) ) query = "" with open(query_path, 'r') as query_file: query = query_file.read() # Build payload payload = { "query": query, "variables": json.dumps(variables), } # Build headers headers = { "Authorization": "Bearer {token}".format(token = args.token), "Accept": "application/json", "Content-Type": "application/json" } # Send the query try: log.debug("Sending query '{}' with variables:".format(query_name)) log.debug(json.dumps(variables)) except AttributeError: pass rv = requests.post( API_URL, json.dumps(payload).encode("utf-8"), headers = headers, proxies = {"http": args.proxy, "https": args.proxy}, ) try: rv_json = rv.json() except Exception as e: log.error("HTTP request failed") log.error(e) log.debug(e, exc_info=True) log.debug(rv) # Try to return the data, or log the error and return None try: log.debug("query complexity : {}" \ .format( rv_json["extensions"]["queryComplexity"], )) return rv_json["data"] except KeyError: try: log.error("GraphQL error") log.error(rv_json) except AttributeError: pass return None