U
    h                     @   sD   d dl Z d dlmZmZmZmZ d dlmZmZ G dd deZ	dS )    N)AnyCallableDictOptional)	BaseModelroot_validatorc                   @   s   e Zd ZU dZdZeeeef  ed< dZ	ee
 ed< eed< eed< eegef ed< G dd	 d	Zed
deedddZeedddZeeeef dddZdS )GraphQLAPIWrapperzWrapper around GraphQL API.

    To use, you should have the ``gql`` python package installed.
    This wrapper will use the GraphQL API to conduct queries.
    Ncustom_headersfetch_schema_from_transportgraphql_endpoint
gql_clientgql_functionc                   @   s   e Zd ZdZdS )zGraphQLAPIWrapper.ConfigZforbidN)__name__
__module____qualname__extra r   r   I/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/graphql.pyConfig   s   r   T)pre)valuesreturnc           
   
   C   s   z ddl m}m } ddlm} W n0 tk
rP } ztd| W 5 d}~X Y nX |d}||d |d}|d	d
}|||d}	|	|d< ||d< |S )z;Validate that the python package exists in the environment.r   )Clientgql)RequestsHTTPTransportz_Could not import gql python package. Try installing it with `pip install gql`. Received error: Nr	   r   )urlheadersr
   T)	transportr
   r   r   )r   r   Zgql.transport.requestsr   ImportErrorget)
clsr   r   r   r   er   r   r
   clientr   r   r   validate_environment   s(    
 z&GraphQLAPIWrapper.validate_environment)queryr   c                 C   s   |  |}tj|ddS )z(Run a GraphQL query and get the results.   )indent)_execute_queryjsondumps)selfr$   resultr   r   r   run/   s    
zGraphQLAPIWrapper.runc                 C   s   |  |}| j|}|S )z/Execute a GraphQL query and return the results.)r   r   execute)r*   r$   Zdocument_noder+   r   r   r   r'   4   s    
z GraphQLAPIWrapper._execute_query)r   r   r   __doc__r	   r   r   str__annotations__r
   boolr   r   r   r   r#   r,   r'   r   r   r   r   r      s   
r   )
r(   typingr   r   r   r   Zlangchain_core.pydantic_v1r   r   r   r   r   r   r   <module>   s   