
     h                         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Zd dlZ ej        dddg          Zd	 Zd
 Zd ZddZ G d dej                  ZdS )    )codecs
exceptions
transports)string_types)DocumentLink)determine_transportget_installed_codecsNLinkAncestordocumentkeysc           	      R   t          |t          t          f          sd}t          |          t	          d |D                       rt          d          | }t          | g           g}t          |          D ]\  }}	 ||         }nu# t          t          t          f$ r[ d	                    d |D                       }d}t          j        ||t          |                              d          fz            w xY wt          |t                    r1t          ||d|d	z                      }|                    |           t          |t                     sLd	                    d
 |D                       }d}t          j        ||t#          |          j        fz            ||fS )zp
    Validates that keys looking up a link are correct.

    Returns a two-tuple of (link, link_ancestors).
    z)'keys' must be a list of strings or ints.c                 f    g | ].}t          |t                     ot          |t                     /S  )
isinstancer   int.0keys     J/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/coreapi/client.py
<listcomp>z _lookup_link.<locals>.<listcomp>   sG        sL)))F*S#2F2F.F      )r   r    c              3   `   K   | ])}d t          |                              d          z  V  *dS z[%s]uNreprstripr   s     r   	<genexpr>z_lookup_link.<locals>.<genexpr>$   s9      "Q"QS6DIIOOC,@,@#@"Q"Q"Q"Q"Q"Qr   z8Index %s did not reference a link. Key %s was not found.r   N   c              3   `   K   | ])}d t          |                              d          z  V  *dS r   r   r   s     r   r    z_lookup_link.<locals>.<genexpr>-   s9      MMvS		(<(<<MMMMMMr   z>Can only call 'action' on a Link. Index %s returned type '%s'.)r   listtuple	TypeErroranyr   	enumerateKeyError
IndexErrorjoinr   LinkLookupErrorr   r   r   appendr   type__name__)	r   r   msgnodelink_ancestorsidxr   index_stringancestors	            r   _lookup_linkr5      s    dT5M** 9nn
       E CDDD
 D"H2>>>?NdOO 	, 	,S	Y9DD*i0 	Y 	Y 	Y77"Q"QD"Q"Q"QQQLLC,SL$s))//RUBVBV3W-WXXX	Y dH%% 	,#TXcAgXGGGH!!(+++ dD!! 
wwMMMMMMMN(<d!455
 
 	
 .!!s   ?BA2C:c                 2   t          |                                          }t          d | j        D                       }t          d | j        D                       }i }||z
  }|D ]}d||<   |||z  z
  }|D ]}d||<   |rt          j        |          dS )z
    Ensure that parameters passed to the link are correct.
    Raises a `ParameterError` if any parameters do not validate.
    c                 *    g | ]}|j         	|j        S r   requirednamer   fields     r   r   z(_validate_parameters.<locals>.<listcomp><   s1       u~
  r   c                 *    g | ]}|j         	|j        S r   r8   r;   s     r   r   z(_validate_parameters.<locals>.<listcomp>?   s1       5>
  r   zThis parameter is required.zUnknown parameter.N)setr   fieldsr   ParameterError)	link
parametersprovidedr9   optionalerrorsmissingitem
unexpecteds	            r   _validate_parametersrI   6   s    
 :??$$%%H   $    H    $    H F !G 5 54t X01J , ,+t 0'///0 0r   c                      t          j                    t          j                    t          j                    t          j                    gS N)r   CoreJSONCodec	JSONCodec	TextCodecDownloadCodecr   r   r   get_default_decodersrP   S   s<    	 r   c                 0    t          j        | |          gS )Nauthsession)r   HTTPTransportrR   s     r   get_default_transportsrV   \   s     dG<<< r   c                   ^    e Zd Zd
dZed             Zed             ZddZddZ	 	 dd	Z	dS )ClientNc                     ||
J d            |t                      }|t          |          }t          j        |          | _        t          j        |          | _        d S )NzCannot specify both 'auth' and 'transports'. When specifying transport instances explicitly you should set the authentication directly on the transport.)rS   )rP   rV   itypesList	_decoders_transports)selfdecodersr   rS   rT   s        r   __init__zClient.__init__c   so    !T\\< &2\1
 +--H/T:::JX..!;z22r   c                     | j         S rK   )r\   r^   s    r   r_   zClient.decodersp   s
    ~r   c                     | j         S rK   )r]   rb   s    r   r   zClient.transportst   s    r   Fc                 &   t          |d          }| j        }rEd}fd| j        D             }|s.t                      }|v r
|         g}nt          dz            t	          | j        |j                  }|                    |||          S )Nget)actionTc                 *    g | ]}|j         k    |S r   )format)r   decoderrh   s     r   r   zClient.get.<locals>.<listcomp>~   s&    YYYGRX@X@X@X@X@Xr   z%No decoder available with format='%s')force_codec)r   r_   r
   
ValueErrorr	   r   url
transition)r^   rl   rh   rj   rA   r_   installed_codecs	transports     `     r   re   z
Client.getx   s    C&&&= 	WKYYYYt}YYYH W#7#9#9 --- 0 89HH$%Lv%UVVV (BB	##D(#LLLr   c                 <    |                      |j        ||          S )N)rh   rj   )re   rl   )r^   r   rh   rj   s       r   reloadzClient.reload   s    xxVxMMMr   Tc	                 l   ||||i }|||d<   |||d<   |||d<   t          |t                    r|g}|i }t          ||          \  }	}
|rt          |	|           |r|                    d|	j                  }|                    d|	j                  }|                    d|	j                  }|                    d|	j                  }|                    d|	j	                  }t          |||||          }	t          | j        |	j                  }|                    |	| j        ||
          S )Nrf   encoding	transformrl   r?   )rf   rs   rt   r?   )paramsr1   )r   r   r5   rI   re   rl   rf   rs   rt   r?   r   r	   r   rm   r_   )r^   r   r   ru   validate	overridesrf   rs   rt   rA   r1   rl   r?   ro   s                 r   rf   zClient.action   s`   H$8i>S  	!&,	(##(0	*%$)2	+&dL)) 	6D>F  ,Hd;;n 	/ v... 	c--tx00C]]8T[99F }}Z??H!k4>BBI]]8T[99FFX[abbbD (BB	##D$-We#fffr   )NNNN)NF)NTNNNN)
r.   
__module____qualname__r`   propertyr_   r   re   rq   rf   r   r   r   rX   rX   b   s        3 3 3 3   X     X M M M M$N N N N LP59$g $g $g $g $g $gr   rX   )NN)coreapir   r   r   coreapi.compatr   coreapi.documentr   r   coreapi.utilsr	   r
   collectionsrZ   
namedtupler   r5   rI   rP   rV   ObjectrX   r   r   r   <module>r      s!   2 2 2 2 2 2 2 2 2 2 ' ' ' ' ' ' + + + + + + + + C C C C C C C C      &{%nz66JKK'" '" '"T0 0 0:     Pg Pg Pg Pg PgV] Pg Pg Pg Pg Pgr   