o
    tBh	                     @   sv   d dl mZmZmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZ ddlmZ d	gZG d
d	 d	eZdS )    )castAnyOptional   )GraphQLError)FragmentSpreadNodeInlineFragmentNode)GraphQLCompositeTypeis_composite_type)do_types_overlaptype_from_ast   )ValidationRulePossibleFragmentSpreadsRulec                   @   sR   e Zd ZdZdededdfddZdededdfdd	Zd
e	de
e fddZdS )r   zPossible fragment spread

    A fragment spread is only valid if the type condition could ever possibly be true:
    if there is a non-empty intersection of the possible parent types, and possible
    types which pass the type condition.
    node_argsreturnNc                 G   sn   | j }| }| }t|r1t|r3t|jtt|tt|s5|t	d| d| d| d S d S d S d S )Nz3Fragment cannot be spread here as objects of type '' can never be of type ''.)
contextget_typeget_parent_typer
   r   schemar   r	   report_errorr   )selfr   r   r   	frag_typeparent_type r   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/graphql/validation/rules/possible_fragment_spreads.pyenter_inline_fragment   s0   	z1PossibleFragmentSpreadsRule.enter_inline_fragmentc              
   G   sj   | j }|jj}| |}| }|r/|r1t|j||s3|td| d| d| d| d S d S d S d S )Nz
Fragment 'z,' cannot be spread here as objects of type 'r   r   )	r   namevalueget_fragment_typer   r   r   r   r   )r   r   r   r   	frag_namer   r   r   r   r   enter_fragment_spread)   s*   
z1PossibleFragmentSpreadsRule.enter_fragment_spreadr    c                 C   s8   | j }||}|rt|j|j}t|rtt|S d S )N)r   get_fragmentr   r   type_conditionr
   r   r	   )r   r    r   fragtype_r   r   r   r"   ;   s   

z-PossibleFragmentSpreadsRule.get_fragment_type)__name__
__module____qualname____doc__r   r   r   r   r$   strr   r	   r"   r   r   r   r   r      s
    N)typingr   r   r   errorr   languager   r   typer	   r
   	utilitiesr   r    r   __all__r   r   r   r   r   <module>   s    