
    Xj	                         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y)    )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                 <    t        |      }t        | 	  |g       y)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      n/var/www/html/myl_app/scheduler-service/venv/lib/python3.12/site-packages/strawberry/extensions/max_aliases.pyr   zMaxAliasesLimiter.__init__   s     %_5	)%    )__name__
__module____qualname____doc__intr   __classcell__)r   s   @r   r   r      s     
& & & &r   r   r   r   c                 *      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              }|kD  r!| d }|j                  t	        |             t
        |   |       y )Nc              3   @   K   | ]  }t        |t              r|  y wN)
isinstancer   ).0def_s     r   	<genexpr>zIcreate_validator.<locals>.MaxAliasesValidator.__init__.<locals>.<genexpr>0   s#      *d%=? *s   c              3   2   K   | ]  }t        |        y wr%   )count_fields_with_alias)r'   def_nodes     r   r)   zIcreate_validator.<locals>.MaxAliasesValidator.__init__.<locals>.<genexpr>5   s        (1 s   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__.   sz    )22H*$00*&
     :  M .&'@@QR"//S0ABG/0r   )r   r   r   r	   r   r   )r   r   s   @r   MaxAliasesValidatorr!   -   s    	1/@ 	1T 	1 	1r   r4   )r
   )r   r4   s   ` r   r   r   &   s    1n 1$ r   selection_set_ownerc                     | j                   yd}| j                   j                  D ]U  }t        |t              r|j                  r|dz  }t        |t        t
        f      s;|j                   sH|t        |      z  }W |S )Nr      )selection_set
selectionsr&   r   aliasr   r+   )r5   result	selections      r   r+   r+   B   s|     ((0F(66AA 9	i+	aKFy9.@"AB''-i88F9 Mr   N)typingr   r   graphqlr   r   r   r   r	   r
   *strawberry.extensions.add_validation_rulesr   r   r   r   r+   __all__ r   r   <module>rB      sj      J&* &.c d>.B 87DVVW( 
r   