
    $gl                       U d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 erd dlmZ d dlmZ d dlmZ e	def         Zd	ed
<   e	dee         f         Zd	ed<    G d d          Z G d de          ZddZddZddZdgZdS )    )annotationsN)cached_property)TYPE_CHECKINGAny	AwaitableCallableUnion)	TypeAlias)Info)StrawberryField.r
   SyncExtensionResolverAsyncExtensionResolverc                  V    e Zd ZddZddZddZedd            Zedd            ZdS )FieldExtensionfieldr   returnNonec                    d S N )selfr   s     e/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/strawberry/extensions/field_extension.pyapplyzFieldExtension.apply   s        next_r   sourcer   infor   kwargsc                     t          d          )Nz6Sync Resolve is not supported for this Field ExtensionNotImplementedErrorr   r   r   r   r   s        r   resolvezFieldExtension.resolve   s     "D
 
 	
r   r   c                $   K   t          d          )Nz7Async Resolve is not supported for this Field Extensionr    r"   s        r   resolve_asynczFieldExtension.resolve_async   s       "E
 
 	
r   boolc                B    t          |           j        t          j        uS r   )typer#   r   r   s    r   supports_synczFieldExtension.supports_sync$   s    Dzz!)???r   c                B    t          |           j        t          j        uS r   )r(   r%   r   r)   s    r   supports_asynczFieldExtension.supports_async(   s    Dzz'~/KKKr   N)r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   )r   r&   )	__name__
__module____qualname__r   r#   r%   r   r*   r,   r   r   r   r   r      s           
 
 
 

 
 
 
 @ @ @ _@ L L L _L L Lr   r   c                      e Zd ZdZdd
ZdS )SyncToAsyncExtensionz^Helper class for mixing async extensions with sync resolvers.

    Applied automatically.
    r   r   r   r   r   r   r   r   c                   K    |||fi |S r   r   r"   s        r   r%   z"SyncToAsyncExtension.resolve_async3   s"       uVT,,V,,,r   Nr-   )r.   r/   r0   __doc__r%   r   r   r   r2   r2   -   s2         
- - - - - -r   r2   
extensionslist[FieldExtension]r   list[SyncExtensionResolver]c                    d | D             S )Nc                    g | ]	}|j         
S r   )r#   .0	extensions     r   
<listcomp>z'_get_sync_resolvers.<locals>.<listcomp><   s    :::)I:::r   r   r5   s    r   _get_sync_resolversr?   9   s     ;:z::::r   list[AsyncExtensionResolver]c                    d | D             S )Nc                    g | ]	}|j         
S r   )r%   r:   s     r   r=   z(_get_async_resolvers.<locals>.<listcomp>B   s    @@@	I#@@@r   r   r>   s    r   _get_async_resolversrC   ?   s     A@Z@@@@r   r   r   :list[Union[SyncExtensionResolver, AsyncExtensionResolver]]c                ,   | j         sg S d | j         D             }d                    d |D                       }| j        rBt          |          dk    rt	          d| d| j         d          t          | j                   S d | j         D             }t          |          dk    rt          | j                   S d}d}| j         D ]}||v r n||v r|d	z  }|d	z  }t          |          |k    rit          t          j
        t          | j         d
|                   t                      j        gt          | j         |d
                                       S d                    d |D                       }t	          d| d| d| j         d          )a  Builds a list of resolvers for a field with extensions.

    Verifies that all of the field extensions for a given field support
    sync or async depending on the field resolver.

    Inserts a SyncToAsyncExtension to be able to use Async extensions on sync resolvers
    Throws a TypeError otherwise.

    Returns True if resolving should be async, False on sync resolving
    based on the resolver and extensions
    c                     g | ]}|j         	|S r   )r,   r:   s     r   r=   z3build_field_extension_resolvers.<locals>.<listcomp>V   s0       9;S  r   ,c                &    g | ]}|j         j        S r   	__class__r.   r:   s     r   r=   z3build_field_extension_resolvers.<locals>.<listcomp>Z   s    LLL)		%LLLr   r   z"Cannot add sync-only extension(s) z  to the async resolver of Field z8. Please add a resolve_async method to the extension(s).c                     g | ]}|j         	|S r   )r*   r:   s     r   r=   z3build_field_extension_resolvers.<locals>.<listcomp>k   s0     
 
 
#y?V

 
 
r      Nc                &    g | ]}|j         j        S r   rI   r:   s     r   r=   z3build_field_extension_resolvers.<locals>.<listcomp>   s    OOOiY )OOOr   z#Cannot mix async-only extension(s) z with sync-only extension(s) z
 on Field zd. If possible try to change the execution order so that all sync-only extensions are executed first.)r5   joinis_asynclen	TypeErrornamerC   r?   list	itertoolschainr2   r%   )r   non_async_extensionsnon_async_extension_namesnon_sync_extensionsfound_sync_extensionsfound_sync_only_extensionsr<   async_extension_namess           r   build_field_extension_resolversr\   E   sZ     	 #(#3   !$LL7KLLL! ! ~ ?
#$$q((J5N J J27*J J J  
 $E$4555
 
','7
 
 
 "##q((&u'7888 !" &'") 	' 	'I///000*a/*!Q&!! #$$(BBB'(89O:O9O(PQQ)++9:()9:O:P:P)QRR    !$OO;NOOO!
 !
 .2G . .+D. .
. . .
 
 	
r   )r5   r6   r   r7   )r5   r6   r   r@   )r   r   r   rD   )
__future__r   rT   	functoolsr   typingr   r   r   r   r	   typing_extensionsr
   strawberry.typesr   strawberry.types.fieldr   r   __annotations__r   r   r2   r?   rC   r\   __all__r   r   r   <module>re      s   " " " " " " "     % % % % % % A A A A A A A A A A A A A A 7++++++%%%%%%666666 $,CH#5  5 5 5 5$,S)C.-@$A  A A A AL L L L L L L L6	- 	- 	- 	- 	-> 	- 	- 	-; ; ; ;A A A AW
 W
 W
 W
t 
r   