o
    ‘¸õaÂ  ã                   @   s\   d Z ddlmZmZ ddlmZmZ ddlmZ 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
é    )ÚurlparseÚ
urlunparse)Úextract_paramsÚ	urlencodeé   )ÚutilsNc                 C   s€   |pi }g }| D ]\}}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{}="{}"z, zrealm="%s", zOAuth %sÚAuthorization)r   ÚescapeÚformatÚappendÚjoinÚupdate)Úoauth_paramsÚheadersÚrealmÚ%authorization_header_parameters_partsÚoauth_parameter_nameÚvalueÚescaped_nameÚescaped_valueÚpartÚauthorization_header_parametersÚauthorization_headerÚ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   Úoauth_)Ú
startswith)Úir   r   r   Ú<lambda>i   s    z _append_params.<locals>.<lambda>)Úkey)ÚlistÚextendÚsort)r   ÚparamsÚmergedr   r   r   Ú_append_paramsX   s   
r'   c                 C   s
   t | |ƒS )z—Prepare 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   Úbodyr   r   r   Úprepare_form_encoded_bodym   s   
	r)   c                 C   s>   t |ƒ\}}}}}}tt| t|ƒpg ƒƒ}t||||||fƒS )z—Prepare 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   ÚuriÚschÚnetÚpathÚparÚqueryÚfrar   r   r   Úprepare_request_uri_queryy   s
   	ÿr1   )NN)Ú__doc__Úurllib.parser   r   Úoauthlib.commonr   r   Ú r   Úfilter_paramsr   r'   r)   r1   r   r   r   r   Ú<module>   s    E