o
    tBh                     @   sj   d dl mZmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ dgZG d	d deZd
S )    )AnyDictcast   )GraphQLError)collect_fields)	FieldNodeFragmentDefinitionNodeOperationDefinitionNodeOperationType   )ValidationRuleSingleFieldSubscriptionsRulec                   @   s&   e Zd ZdZdededdfddZdS )r   a	  Subscriptions must only include a single non-introspection field.

    A GraphQL subscription is valid only if it contains a single root field and
    that root field is not an introspection field.

    See https://spec.graphql.org/draft/#sec-Single-root-field
    node_argsreturnNc                 G   s  |j tjkrd S | jj}|j}|r|jr|jjnd }i }| jj}dd |j	D }t
|||||j}	t|	dkr^t|	 }
|
dd  }dd |D }| t|d u rSdnd| dd	 | |	 D ]%}|d
 }|jj}|dr| t|d u rzdnd| dd | qbd S d S )Nc                 S   s    i | ]}t |tr|jj|qS  )
isinstancer	   namevalue).0
definitionr   r   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/graphql/validation/rules/single_field_subscriptions.py
<dictcomp>$   s    zKSingleFieldSubscriptionsRule.enter_operation_definition.<locals>.<dictcomp>r   c                 S   s0   g | ]}t |tr|ntt|gD ]}|qqS r   )r   listr   r   )r   fieldsfieldr   r   r   
<listcomp>3   s    
zKSingleFieldSubscriptionsRule.enter_operation_definition.<locals>.<listcomp>zAnonymous SubscriptionzSubscription ''z& must select only one top level field.r   __z2 must not select an introspection top level field.)	operationr   SUBSCRIPTIONcontextschemasubscription_typer   r   documentdefinitionsr   selection_setlenr   valuesreport_errorr   
startswith)selfr   r   r#   r$   operation_namevariable_valuesr%   	fragmentsr   field_selection_listsextra_field_selection_listsextra_field_selectionfield_nodesr   
field_namer   r   r   enter_operation_definition   sf   	


'z7SingleFieldSubscriptionsRule.enter_operation_definition)__name__
__module____qualname____doc__r
   r   r5   r   r   r   r   r      s    N)typingr   r   r   errorr   execution.collect_fieldsr   languager   r	   r
   r    r   __all__r   r   r   r   r   <module>   s    