U
    I]i                     @   s   d Z ddlmZmZ ddlmZmZ ddlmZ zddl	m	Z	m
Z
 W n$ ek
rh   ddlm	Z	m
Z
 Y nX ejddd	Zd
d Zdd Zdd ZdS )z
oauthlib.parameters
~~~~~~~~~~~~~~~~~~~

This module contains methods related to `section 3.5`_ of the OAuth 1.0a spec.

.. _`section 3.5`: https://tools.ietf.org/html/rfc5849#section-3.5
    )absolute_importunicode_literals)extract_params	urlencode   )utils)urlparse
urlunparseNc                 C   s   |pi }g }| D ]2\}}t |}t |}d||}|| qd|}	|r^d| |	 }	d|	 }
i }|| |
|d< |S )a  **Prepare the Authorization header.**
    Per `section 3.5.1`_ of the spec.

    Protocol parameters can be transmitted using the HTTP "Authorization"
    header field as defined by `RFC2617`_ with the auth-scheme name set to
    "OAuth" (case insensitive).

    For example::

        Authorization: OAuth realm="Example",
            oauth_consumer_key="0685bd9184jfhq22",
            oauth_token="ad180jjd733klru7",
            oauth_signature_method="HMAC-SHA1",
            oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
            oauth_timestamp="137131200",
            oauth_nonce="4572616e48616d6d65724c61686176",
            oauth_version="1.0"


    .. _`section 3.5.1`: https://tools.ietf.org/html/rfc5849#section-3.5.1
    .. _`RFC2617`: https://tools.ietf.org/html/rfc2617
    z	{0}="{1}"z, zrealm="%s", zOAuth %sZAuthorization)r   escapeformatappendjoinupdate)oauth_paramsZheadersZrealmZ%authorization_header_parameters_partsZoauth_parameter_namevalueZescaped_nameZescaped_valuepartZauthorization_header_parametersZauthorization_headerZfull_headers r   D/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/parameters.pyprepare_headers   s&    


r   c                 C   s&   t |}||  |jdd d |S )a>  Append OAuth params to an existing set of parameters.

    Both params and oauth_params is must be lists of 2-tuples.

    Per `section 3.5.2`_ and `3.5.3`_ of the spec.

    .. _`section 3.5.2`: https://tools.ietf.org/html/rfc5849#section-3.5.2
    .. _`3.5.3`: https://tools.ietf.org/html/rfc5849#section-3.5.3

    c                 S   s   | d  dS )Nr   Zoauth_)
startswith)ir   r   r   <lambda>o       z _append_params.<locals>.<lambda>)key)listextendsort)r   ZparamsZmergedr   r   r   _append_params^   s    
r   c                 C   s
   t | |S )zPrepare the Form-Encoded Body.

    Per `section 3.5.2`_ of the spec.

    .. _`section 3.5.2`: https://tools.ietf.org/html/rfc5849#section-3.5.2

    )r   )r   Zbodyr   r   r   prepare_form_encoded_bodys   s    	r   c                 C   s>   t |\}}}}}}tt| t|p$g }t||||||fS )zPrepare the Request URI Query.

    Per `section 3.5.3`_ of the spec.

    .. _`section 3.5.3`: https://tools.ietf.org/html/rfc5849#section-3.5.3

    )r   r   r   r   r	   )r   ZuriZschZnetpathZparZqueryZfrar   r   r   prepare_request_uri_query   s
    	r    )NN)__doc__Z
__future__r   r   Zoauthlib.commonr   r    r   r   r	   ImportErrorZurllib.parseZfilter_paramsr   r   r   r    r   r   r   r   <module>   s   E