o
    h                     @   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dededeje fddZdededejeef fddZdedejeef def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   W/var/www/html/magazine_api/magazine_env/lib/python3.10/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defddZdefddZdS )Fieldreturnc                 C      t  NNotImplementedErrorselfr   r   r   render_headers      zField.render_headersc                 C   r   r   r   r   r   r   r   render_data   r   zField.render_dataN)__name__
__module____qualname__bytesr   r   r   r   r   r   r      s    r   c                   @   sH   e Zd Zdedejeef ddfddZdefddZdefd	d
Z	dS )	DataFieldnamevaluer   Nc                 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__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                   @   s^   e Zd Zdedejejej ef ddfddZ	defddZ
defd	d
ZdefddZdS )	FileFieldr$   r%   r   Nc                 C   sn   || _ t|tstt|ddj | _|| _|  | _d S |d | _|d | _t	|dkr0|d n|  | _d S )Nr$   Zuploadr         )
r$   r&   tupler   getattrfilenamefileguess_content_typecontent_typelenr)   r   r   r   r*   .   s   


zFileField.__init__c                 C   s   t | jd p	dS )Nr   zapplication/octet-stream)	mimetypes
guess_typer9   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$   r9   r+   r,   s   ; s   
Content-Type: r-   )r.   r$   r9   r<   r1   r/   )r   r$   r9   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   IOAnyStrr7   r*   r;   r"   r   r   r   r   r   r   r4   -   s    
r4   datafilesr   c                 c   sn    |   D ]\}}t|ttfr|D ]	}t||dV  qqt||dV  q|  D ]\}}t||dV  q)d S )N)r$   r%   )itemsr&   listdictr#   r4   )rD   rE   r$   r%   itemr   r   r   iter_fieldsU   s   rJ   c                 C   s   t  }ttd}t| |D ]}|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urandomrJ   writer   r   decodegetvalue)rD   rE   bodyboundaryfieldr<   r   r   r   multipart_encodea   s   rW   r$   r%   c                 C   sJ   t |tr	| }dtjt dtfdd}t||}|  d| d S )Nmatchr   c                 S   s   t | d S )Nr   )!_HTML5_FORM_ENCODING_REPLACEMENTSgroup)rX   r   r   r   replacerv   s   z_format_param.<locals>.replacerz="r   )	r&   r"   rR   r2   Matchr'   _HTML5_FORM_ENCODING_REsubr1   )r$   r%   r[   r   r   r   r.   r   s
   
r.   )rM   r>   rO   r   r2   ior   pathlibr   rY   updaterangecompiler/   keysr]   r   r#   r4   rH   IteratorrJ   Tupler"   r'   rW   r3   r.   r   r   r   r   <module>   s(    
( $