
    $g	                         d dl mZmZ d dlmZmZmZmZmZm	Z	 d dl
mZ  G d de          Zdedee	         fdZd	eeeef         defd
ZdgZdS )    )TypeUnion)ExecutableDefinitionNode	FieldNodeGraphQLErrorInlineFragmentNodeValidationContextValidationRule)AddValidationRulesc                   ,     e Zd ZdZdeddf fdZ xZS )MaxAliasesLimitera  Add a validator to limit the number of aliases used.

    Example:

    ```python
    import strawberry
    from strawberry.extensions import MaxAliasesLimiter

    schema = strawberry.Schema(Query, extensions=[MaxAliasesLimiter(max_alias_count=15)])
    ```
    max_alias_countreturnNc                 j    t          |          }t                                          |g           dS )zInitialize the MaxAliasesLimiter.

        Args:
            max_alias_count: The maximum number of aliases allowed in a GraphQL document.
        N)create_validatorsuper__init__)selfr   	validator	__class__s      a/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/strawberry/extensions/max_aliases.pyr   zMaxAliasesLimiter.__init__   s2     %_55	)%%%%%    )__name__
__module____qualname____doc__intr   __classcell__)r   s   @r   r   r      sU        
 
& & & & & & & & & & & &r   r   r   r   c                 2      G  fddt                     }|S )zCreate a validator that checks the number of aliases in a document.

    Args:
        max_alias_count: The maximum number of aliases allowed in a GraphQL document.
    c                   ,     e Zd Zdeddf fdZ xZS )-create_validator.<locals>.MaxAliasesValidatorvalidation_contextr   Nc                 
   |j         }d |j        D             }t          d |D                       }|k    r)| d }|                    t	          |                     t                                          |           d S )Nc              3   D   K   | ]}t          |t                    |V  d S N)
isinstancer   ).0def_s     r   	<genexpr>zIcreate_validator.<locals>.MaxAliasesValidator.__init__.<locals>.<genexpr>0   sG       * *d%=??** * * * * *r   c              3   4   K   | ]}t          |          V  d S r%   )count_fields_with_alias)r'   def_nodes     r   r)   zIcreate_validator.<locals>.MaxAliasesValidator.__init__.<locals>.<genexpr>5   s>           (11           r   z aliases found. Allowed: )documentdefinitionssumreport_errorr   r   r   )r   r"   r-   def_that_can_contain_aliastotal_aliasesmsgr   r   s         r   r   z6create_validator.<locals>.MaxAliasesValidator.__init__.   s    )2H* *$0* * *&
       :       M ..&RRRR"//S0A0ABBBGG/00000r   )r   r   r   r	   r   r   )r   r   s   @r   MaxAliasesValidatorr!   -   sR        	1/@ 	1T 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1r   r4   )r
   )r   r4   s   ` r   r   r   &   s?    1 1 1 1 1 1 1n 1 1 1$ r   selection_set_ownerc                     | j         dS d}| j         j        D ]X}t          |t                    r|j        r|dz  }t          |t          t
          f          r|j         r|t          |          z  }Y|S )Nr      )selection_set
selectionsr&   r   aliasr   r+   )r5   result	selections      r   r+   r+   B   s     (0qF(6A 9 9	i++ 		 	aKFy9.@"ABB	9'	9 -i888FMr   N)typingr   r   graphqlr   r   r   r   r	   r
   *strawberry.extensions.add_validation_rulesr   r   r   r   r+   __all__ r   r   <module>rB      s                          J I I I I I& & & & &* & & &.c d>.B    87DVVW   ( 
r   