U
    9]                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ dddZ	e	
dd ed d	D  ed
dd e	 D ZG dd dZG dd deZG dd deZeeeje dddZeeejeef dddZeejeef edddZdS )    N)BytesIO)Pathz%22z\\)"\c                 C   s$   i | ]}|d krt |d|qS )   z%{:02X})chrformat.0c r   o/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/multipart.py
<dictcomp>   s       r       |c                 C   s   g | ]}t |qS r   )reescaper	   r   r   r   
<listcomp>   s     r   c                   @   s(   e Zd ZedddZedddZdS )Fieldreturnc                 C   s
   t  d S NNotImplementedErrorselfr   r   r   render_headers   s    zField.render_headersc                 C   s
   t  d S r   r   r   r   r   r   render_data   s    zField.render_dataN)__name__
__module____qualname__bytesr   r   r   r   r   r   r      s   r   c                   @   sD   e Zd Zeejeef ddddZedddZeddd	Z	dS )
	DataFieldNnamevaluer   c                 C   s8   t |tstdt |ttfs(td|| _|| _d S )Nz$Invalid type for name. Expected str.z.Invalid type for value. Expected str or bytes.)
isinstancestr	TypeErrorr!   r$   r%   r   r$   r%   r   r   r   __init__   s    
zDataField.__init__r   c                 C   s   t d| j}dd|dgS )Nr$           Content-Disposition: form-data;    

)_format_paramr$   join)r   r$   r   r   r   r   #   s    zDataField.render_headersc                 C   s   t | jtr| jS | jdS Nzutf-8)r&   r%   r!   encoder   r   r   r   r   '   s    zDataField.render_data)
r   r   r    r'   typingUnionr!   r*   r   r   r   r   r   r   r"      s   r"   c                   @   sZ   e Zd Zeejejej ef ddddZ	edddZ
eddd	Zedd
dZdS )	FileFieldNr#   c                 C   sl   || _ t|ts6tt|ddj | _|| _|  | _n2|d | _|d | _t	|dkr^|d n|  | _d S )Nr$   uploadr         )
r$   r&   tupler   getattrfilenamefileguess_content_typecontent_typelenr)   r   r   r   r*   .   s    


zFileField.__init__r   c                 C   s   t | jd pdS )Nr   zapplication/octet-stream)	mimetypesZ
guess_typer:   r   r   r   r   r<   =   s    zFileField.guess_content_typec              	   C   s:   t d| j}t d| j}| j }dd|d|d|dgS )Nr$   r:   r+   r,   s   ; s   
Content-Type: r-   )r.   r$   r:   r=   r1   r/   )r   r$   r:   r=   r   r   r   r   @   s    
zFileField.render_headersc                 C   s"   | j  }t|tr|dS |S r0   )r;   readr&   r'   r1   )r   contentr   r   r   r   P   s    
zFileField.render_data)r   r   r    r'   r2   r3   ZIOZAnyStrr8   r*   r<   r!   r   r   r   r   r   r   r4   -   s    r4   )datafilesr   c                 c   sl   |   D ]>\}}t|ttfr8|D ]}t||dV  q"qt||dV  q|  D ]\}}t||dV  qPd S )N)r$   r%   )itemsr&   listdictr"   r4   )rB   rC   r$   r%   itemr   r   r   iter_fieldsU   s    rH   c                 C   s   t  }ttd}t| |D ]8}|d|  ||  ||  |d q |d|  d|	d }|
 |fS )N   s   --%s
s   
s   --%s--
z multipart/form-data; boundary=%sascii)r   binasciihexlifyosurandomrH   writer   r   decodegetvalue)rB   rC   bodyboundaryfieldr=   r   r   r   multipart_encodea   s    rU   r#   c                 C   sH   t |tr| }tjt tddd}t||}|  d| d S )N)matchr   c                 S   s   t | d S )Nr   )!_HTML5_FORM_ENCODING_REPLACEMENTSgroup)rV   r   r   r   replacerv   s    z_format_param.<locals>.replacerz="r   )	r&   r!   rP   r2   Matchr'   _HTML5_FORM_ENCODING_REsubr1   )r$   r%   rY   r   r   r   r.   r   s
    
r.   )rK   r?   rM   r   r2   ior   pathlibr   rW   updaterangecompiler/   keysr[   r   r"   r4   rF   IteratorrH   ZTupler!   r'   rU   r3   r.   r   r   r   r   <module>   s&   
(