o
    rN)j                     @  s   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZ dd
dZdddZdddZG dd dZG dd dZdS )    )annotations)Any)	urlencode)get_server_and_porthandle_base64_response_bodyhandle_exclude_headershandle_multi_value_headersmaybe_encode_bodystrip_api_gateway_path)HeadersLambdaConfigLambdaContextLambdaEventQueryParamsResponseScopeeventr   returnbytesc                 C  s4   |  di }|s|  di }|sdS t|dd S )NmultiValueQueryStringParametersqueryStringParameters    T)doseq)getr   encode)r   params r   |/var/www/html/finance.cargoinsureonline.com/_shared/backend-venv/lib/python3.10/site-packages/mangum/handlers/api_gateway.py_encode_query_string_for_apigw   s   r   dict[str, str]c                 C  sP   |  di pi }dd | D }|  dr&|dd |  di  D  |S )Nheadersc                 S     i | ]	\}}|  |qS r   lower.0kvr   r   r   
<dictcomp>%       z;_handle_multi_value_headers_for_request.<locals>.<dictcomp>multiValueHeadersc                 S  s.   i | ]\}}|  t|trd |ndqS )z,  )r#   
isinstancelistjoinr$   r   r   r   r(   (   s    )r   itemsupdate)r   r    r   r   r   '_handle_multi_value_headers_for_request#   s   
r1   input_headersr    tuple[dict[str, str], list[str]]c                 C  sh   i }g }| D ])\}}|   }|  }|dkr|| q||v r+||  d| }|||< q||fS )Nz
set-cookie,)decoder#   append)r2   output_headerscookieskeyvaluenormalized_keynormalized_valuer   r   r   _combine_headers_v21   s   
r=   c                   @  J   e Zd Zedd	d
ZdddZedddZedddZdddZ	dS )
APIGatewayr   r   contextr   configr   r   boolc                 C     d|v od|v S )NresourcerequestContextr   clsr   r@   rA   r   r   r   inferD      zAPIGateway.inferNonec                 C     || _ || _|| _d S Nr   r@   rA   selfr   r@   rA   r   r   r   __init__H      
zAPIGateway.__init__r   c                 C      t | jdd| jdddS Nbodyr   isBase64EncodedF)	is_base64r	   r   r   rO   r   r   r   rT   M      zAPIGateway.bodyr   c                 C  s   t | j}dd| jd dd | D t| jd | jd dd d	|d
dt| jt|| jd di ddfddd| j| jdS )Nhttp1.1
httpMethodc                 S      g | ]\}}|  |  gqS r   r   r$   r   r   r   
<listcomp>[        z$APIGateway.scope.<locals>.<listcomp>pathapi_gateway_base_pathrb   r+   x-forwarded-protohttpsrE   identitysourceIpr   3.02.0versionspec_version)typehttp_versionmethodr    ra   raw_path	root_pathschemequery_stringserverclientasgi	aws.eventaws.context)	r1   r   r/   r
   rA   r   r   r   r@   )rO   r    r   r   r   scopeT   s*   

zAPIGateway.scoperesponser   dict[str, Any]c                 C  sN   t |d \}}t|d || jd \}}|d t|| jt|| j||dS )Nr    rT   text_mime_typesstatus
statusCoder    r*   rT   rU   )r   r   rA   r   )rO   rz   finalized_headersmulti_value_headersfinalized_bodyis_base64_encodedr   r   r   __call__n   s   

zAPIGateway.__call__Nr   r   r@   r   rA   r   r   rB   r   r   r@   r   rA   r   r   rJ   r   r   r   r   rz   r   r   r{   
__name__
__module____qualname__classmethodrH   rP   propertyrT   ry   r   r   r   r   r   r?   C   s    
r?   c                   @  r>   )HTTPGatewayr   r   r@   r   rA   r   r   rB   c                 C  rC   )Nrk   rE   r   rF   r   r   r   rH   ~   rI   zHTTPGateway.inferrJ   c                 C  rK   rL   rM   rN   r   r   r   rP      rQ   zHTTPGateway.__init__r   c                 C  rR   rS   rW   rX   r   r   r   rT      rY   zHTTPGateway.bodyr   c           
      C  s2  | j d }| j d }|dkrJdd | j di  D }|d d }|d d	 }|d d
 }| j dd }| j drId| j dg |d< nt| j }|di d}| j d	 }| j d }t| j }t|| jd d}t	|}|df}	d|ddd | D |d d|dd|||	ddd| j | j
dS )NrE   rk   ri   c                 S  r!   r   r"   r$   r   r   r   r(      r)   z%HTTPGateway.scope.<locals>.<dictcomp>r    rZ   rg   ra   ro   rawQueryStringr+   r8   z; cookierf   r\   rb   rc   r   r[   c                 S  r]   r   r^   r$   r   r   r   r_      r`   z%HTTPGateway.scope.<locals>.<listcomp>rd   re   rh   rj   )rm   ro   rn   r    ra   rp   rq   rr   rs   rt   ru   rv   rw   rx   )r   r   r/   r   r.   r1   r   r
   rA   r   r@   )
rO   request_contextevent_versionr    	source_ipra   http_methodrs   rt   ru   r   r   r   ry      sJ   






zHTTPGateway.scoperz   r   r{   c                 C  s   | j d d dkrCt|d \}}d|vr|d d urd|d< t|d || jd \}}|d	 ||p3d |p6d |d
}dd | D S t|d \}}t|d || jd \}}|d	 ||||dS )Nrw   rk   ri   r    zcontent-typerT   zapplication/jsonr|   r}   )r   rT   r    r8   rU   c                 S  s   i | ]\}}|d ur||qS rL   r   )r%   r9   r:   r   r   r   r(      s    z(HTTPGateway.__call__.<locals>.<dictcomp>r~   )ry   r=   r   rA   r/   r   )rO   rz   r   r8   r   r   response_outr   r   r   r   r      s0   zHTTPGateway.__call__Nr   r   r   r   r   r   r   r   r   r   r   }   s    
/r   N)r   r   r   r   )r   r   r   r   )r2   r   r   r3   )
__future__r   typingr   urllib.parser   mangum.handlers.utilsr   r   r   r   r	   r
   mangum.typesr   r   r   r   r   r   r   r   r1   r=   r?   r   r   r   r   r   <module>   s     $



: