
     hV+                        d dl mZ d dlmZmZmZmZ d dlmZ d dl	Z	d dl
Z
d dlZd Zd Z edd          Zd	ej        _        d
 Zd Zd Zer G d de          Znej        Zd Zd	dZd	dZd Zd Zd Zd ZddZddZd ZdS )    )
exceptions)string_types	text_typeurlparse_TemporaryFileWrapper)
namedtupleNc                     ||dk    rdS t          j         | j                  j        }|                    d          r|                    |dd                   S ||k    S )zx
    Domain string matching against an outgoing request.
    Patterns starting with '*' indicate a wildcard domain.
    N*T   )r   urlhostname
startswithendswith)requestdomainhosts      I/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/coreapi/utils.pydomain_matchesr   	   se    
 	FcMMtW[))2D )}}VABBZ(((6>    c                  X    d t          j        d          D             } d | D             S )Nc                 :    g | ]}||                                 fS  )load).0packages     r   
<listcomp>z(get_installed_codecs.<locals>.<listcomp>   s2       &-',,..!  r   zcoreapi.codecs)groupc                 4    i | ]\  }}|j          |            S r   )name)r   r   clss      r   
<dictcomp>z(get_installed_codecs.<locals>.<dictcomp>   s3        .#ccee  r   )pkg_resourcesiter_entry_points)packagess    r   get_installed_codecsr%      sP     '.>???  H 2:   r   Filezname content content_typeNc                     t          | t                    rdS t          | d          r*t          | t          t          t
          t          f          sdS dS )NT__iter__F)
isinstancer&   hasattrr   listtupledict)objs    r   is_filer0   '   sP    #t tsJ 
3tUTX8Y(Z(Z t5r   c                     t          | dd           }|rLt          |t                    r7|d         dk    r+|d         dk    rt          j                            |          S d S )Nr   r   <>)getattrr*   r   ospathbasename)r/   r   s     r   guess_filenamer9   2   s`    3%%D &
4.. &47c>>d2hRUoow%%%4r   c                    i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddLddddddd                     | d          S )z
    Python's `mimetypes.guess_extension` is no use because it simply returns
    the first of an unordered set. We use the same set of media types here,
    but take a reasonable preference on what extension to map to.
    zapplication/javascriptz.jszapplication/mswordz.docapplication/octet-streamz.binzapplication/odaz.odazapplication/pdfz.pdfzapplication/pkcs7-mimez.p7czapplication/postscriptz.pszapplication/vnd.apple.mpegurlz.m3uzapplication/vnd.ms-excelz.xlszapplication/vnd.ms-powerpointz.pptzapplication/x-bcpioz.bcpiozapplication/x-cpioz.cpiozapplication/x-cshz.cshzapplication/x-dviz.dvizapplication/x-gtarz.gtarzapplication/x-hdfz.hdfzapplication/x-latexz.latexzapplication/x-mifz.mifzapplication/x-netcdfz.nczapplication/x-pkcs12z.p12zapplication/x-pn-realaudioz.ramzapplication/x-python-codez.pyczapplication/x-shz.shzapplication/x-sharz.sharzapplication/x-shockwave-flashz.swfzapplication/x-sv4cpioz.sv4cpiozapplication/x-sv4crcz.sv4crczapplication/x-tarz.tarzapplication/x-tclz.tclzapplication/x-texz.texzapplication/x-texinfoz.texinfozapplication/x-troffz.trzapplication/x-troff-manz.manzapplication/x-troff-mez.mezapplication/x-troff-msz.mszapplication/x-ustarz.ustarzapplication/x-wais-sourcez.srczapplication/xmlz.xmlzapplication/zipz.zipzaudio/basicz.auz
audio/mpegz.mp3zaudio/x-aiffz.aifzaudio/x-pn-realaudioz.razaudio/x-wavz.wavz	image/gifz.gifz	image/iefz.iefz
image/jpegz.jpez	image/pngz.pngzimage/svg+xmlz.svgz
image/tiffz.tiffzimage/vnd.microsoft.iconz.icozimage/x-cmu-rasterz.raszimage/x-ms-bmpz.bmpzimage/x-portable-anymapz.pnmzimage/x-portable-bitmapz.pbmzimage/x-portable-graymapz.pgmzimage/x-portable-pixmapz.ppmzimage/x-rgbz.rgbzimage/x-xbitmapz.xbmzimage/x-xpixmapz.xpmzimage/x-xwindowdumpz.xwdzmessage/rfc822z.emlztext/cssz.cssztext/csvz.csvz	text/htmlz.htmlz
text/plainz.txtztext/richtextz.rtxztext/tab-separated-valuesz.tsvz.pyz.etxz.sgmlz.vcfz.mp4z.mpegz.movz.webmz.aviz.movie)ztext/x-pythonztext/x-setextztext/x-sgmlztext/x-vcardztext/xmlz	video/mp4z
video/mpegzvideo/quicktimez
video/webmzvideo/x-msvideozvideo/x-sgi-movie )get)content_types    r   guess_extensionr?   9   s6   P %PfP 	#FP 	6	P
 	6P 	!&P 	!%P 	(P 	#FP 	(P 	xP 	gP 	VP 	VP 	gP  	V!P" 	x#P P$ 	V%P& 	'P( 	)P* 	%f+P, 	$V-P. 	E/P0 	g1P2 	(3P4 	 5P6 		7P8 	V9P: 	V;P< 	V=P> 	 ?P@ 	uAPB 	"6CPD 	!%EP P PF 	!%GPH 	xIPJ 	$VKPL 	6MPN 	6OPP 	uQPR 	fSPT 	UPV 	WPX 	vYPZ 	V[P\ 	V]P^ 	f_P` 	VaPb 	cPd 	gePf 	#FgP P Ph 	fiPj 	&kPl 	"6mPn 	"6oPp 	#FqPr 	"6sPt 	vuPv 	6wPx 	6yPz 	v{P| 	&}P~ 	FP@ 	FAPB 	WCPD 	fEPF 	GPH 	$VIP PJ !!%_P P P` 
c,aPr   c                       e Zd ZdZd ZdS )DownloadedFileNc                 h    | j         rdnd}| j         rdnd| j        j        z  }d| j        d||dS )Nclosedopenr<   z '%s'z<DownloadedFile 'z', r4   )rC   filemoder   )selfstaterF   __str__s       r   __repr__zDownloadedFile.__repr__   sF     $7HHEB22'DIN*BDD48IIIuudddKKr   )__name__
__module____qualname__r8   rJ   r   r   r   rA   rA      s(        	' 	' 	' 	' 	'r   rA   c                     t          j         |          }|j                                        }|j        }|st	          j        d|z            |st	          j        d|z            | D ]}||j        v r|c S t	          j        d|z            )zC
    Given a URL determine the appropriate transport instance.
    zURL missing scheme '%s'.zURL missing hostname '%s'.zUnsupported URL scheme '%s'.)r   schemelowernetlocr   NetworkErrorschemes)
transportsr   url_componentsrO   rQ   	transports         r   determine_transportrW      s     &s++N"((**F"F H%&@3&FGGG J%&BS&HIII  	Y&&& ' 
!"@6"I
J
JJr   c                 X   || d         S |                     d          d                                                                         }|                     d          d         dz   }d}| D ]&}|                                D ]}||||fv r|c c S 'd|z  }t	          j        |          )zx
    Given the value of a 'Content-Type' header, return the appropriate
    codec for decoding the request content.
    Nr   ;//**/*z-Unsupported media in Content-Type header '%s')splitstriprP   get_media_typesr   NoCodecAvailable)decodersr>   	main_typewildcard_typecodec
media_typemsgs          r   negotiate_decoderrg      s    
 {%%c**1-3355;;==L""3''*T1IM  //11 	 	JlI}EEE F	 :L
HC

%c
*
**r   c                    || d         S t          d |                    d          D                       }| D ]#}|                                D ]}||v r|c c S $| D ]D}|                                D ]-}|j                            d          d         dz   |v r|c c S .Ed|v r| d         S d|z  }t	          j        |          )	zs
    Given the value of a 'Accept' header, return the appropriate codec for
    encoding the response content.
    Nr   c                     g | ]A}|                     d           d                                                                         BS )rY   r   )r]   r^   rP   r   items     r   r   z%negotiate_encoder.<locals>.<listcomp>   sO        	

3  ""((**  r   ,rZ   r[   r\   z'Unsupported media in Accept header '%s')setr]   r_   re   r   r`   )encodersaccept
acceptablerd   re   rf   s         r   negotiate_encoderrq      s4   
 ~{  LL%%    J
   //11 	 	JZ'' (	   //11 	 	J%%c**1-4
BB C	 
{
3f
<C

%c
*
**r   c                 X    t          | d          } | sd}t          j        |          | S )NF)
allow_listzParameter %s: May not be empty.)_validate_form_fieldr   ParameterErrorvaluerf   s     r   validate_path_paramrx      s7     5999E -/',,,Lr   c                      t          |           S r'   rt   )rw   s    r   validate_query_paramr{      s    &&&r   c                    |dk    rt          |           S |dk    rt          | d          S |dk    rt          |           S |dk    r't          |           sd}t          j        |          | S d}t          j        ||z            )	Napplication/jsonmultipart/form-dataTallow_files!application/x-www-form-urlencodedr;   zMust be an file upload./Unsupported encoding "%s" for outgoing request.)_validate_json_data_validate_form_objectr0   r   ru   rR   rw   encodingrf   s      r   validate_body_paramr      s    %%%"5)))	*	*	*$U====	8	8	8$U+++	/	/	/u~~ 	1+C+C000
;C

!#.
1
11r   c                     |dk    rt          |           S |dk    rt          | d          S |dk    rt          |           S d}t          j        ||z            )Nr}   r~   Tr   r   r   )r   rt   r   rR   r   s      r   validate_form_paramr     so    %%%"5)))	*	*	*#Et<<<<	8	8	8#E***
;C

!#.
1
11r   Fc                     t          | t                    sd}t          j        |          fd|                                 D             S )zQ
    Ensure that `value` can be encoded as form data or as query parameters.
    zMust be an object.c                 T    i | ]$\  }}t          |          t          |           %S )r   )r   rt   )r   item_keyitem_valr   s      r   r!   z)_validate_form_object.<locals>.<dictcomp>"  sE       Hh 	(1(TTT  r   )r*   r.   r   ru   items)rw   r   rf   s    ` r   r   r     s`     eT"" -"',,,   "'++--   r   Tc                 |   t          | t                    r| S t          | t                    s| dddd|          S t          | t          t          f          rd| z  S |r7t          | t
          t          f          rt          |           sd | D             S |rt          |           r| S d}t          j	        |          )	z
    Ensure that `value` can be encoded as a single form data or a query parameter.
    Basic types that has a simple string representation are supported.
    A list of basic types is also valid.
    Ntruefalser<   )TFNz%sc                 2    g | ]}t          |d d           S )F)r   rs   rz   rj   s     r   r   z(_validate_form_field.<locals>.<listcomp>6  s7     
 
 
 !5UKKK
 
 
r   zMust be a primitive type.)
r*   r   boolintfloatr,   r-   r0   r   ru   )rw   r   rs   rf   s       r   rt   rt   (  s     %&& 	E4	 	  U]WB77>>	EC<	(	( 	e|	 
54-88  
 

 
 
 	
 
  
%C

#C
(
((r   c                 Z   | (t          | t          t          t          t          f          r| S t          | t
          t          f          rt          |           sd | D             S t          | t                    rd | 	                                D             S d}t          j        |          )z7
    Ensure that `value` can be encoded into JSON.
    Nc                 ,    g | ]}t          |          S r   )r   rj   s     r   r   z'_validate_json_data.<locals>.<listcomp>H  s!    <<<d#D))<<<r   c                 N    i | ]"\  }}t          |          t          |          #S r   )r   r   )r   r   r   s      r   r!   z'_validate_json_data.<locals>.<dictcomp>J  s?     
 
 
"( h!4X!>!>
 
 
r   zMust be a JSON primitive.)r*   r   r   r   r   r,   r-   r0   r.   r   r   ru   rv   s     r   r   r   A  s     	*UT3|,LMM	ED%=	)	) 
'%.. 
<<e<<<<	E4	 	  

 
&+kkmm
 
 
 	

 &C

#C
(
((r   )F)FT) coreapir   coreapi.compatr   r   r   r   collectionsr   r6   r"   tempfiler   r%   r&   __new____defaults__r0   r9   r?   rA   NamedTemporaryFilerW   rg   rq   rx   r{   r   r   r   rt   r   r   r   r   <module>r      s         S S S S S S S S S S S S " " " " " " 				          z&566#     V V Vr  1	' 	' 	' 	' 	'. 	' 	' 	' 	' 0NK K K*+ + + +*+ + + +D  ' ' '2 2 2 2 2 2
 
 
 
) ) ) )2) ) ) ) )r   