
    G	                         d Z ddlmZmZ ddlZddlZddlmZmZ 	 ddl	m
Z
 	 ddlmZ d Zd Zd	 Zd
 Zd Zd Zd Zy# e$ r	 ddlm
Z
 Y *w xY w# e$ r	 ddlmZ Y 4w xY w)zooauthlib.utils ~~~~~~~~~~~~~~

This module contains utility methods used by various parts of the OAuth 2 spec.
    )absolute_importunicode_literalsN)unicode_type	urldecode)quote)urlparsec                     t        | t              s| | S t        | t        t        t        f      r(dj                  | D cg c]  }t        |       c}      S t        d| z        c c}w )z5Convert a list of scopes to a space separated string. z8Invalid scope (%s), must be string, tuple, set, or list.)
isinstancer   settuplelistjoin
ValueErrorscopess     0lib/third_party/oauthlib/oauth2/rfc6749/utils.pylist_to_scoper      sd    |$L%#ud+,88e4e\!_e455
BUJL L 5s   A&c                     t        | t        t        t        f      r| D cg c]  }t	        |       c}S | y| j                         j                  d      S c c}w )z5Convert a space separated string to a list of scopes.Nr
   )r   r   r   r   r   stripsplitr   s     r   scope_to_listr   "   sP    tS)*%*+ULOU++};;=s##	 ,s   Ac                 ~    t        t        t        |       j                              }d|v rt	        |d         |d<   |S )Nr   )dictr   r   queryr   )uriparamss     r   params_from_urir   ,   s:    	(3---./&#F7O4F7O	-    c                     ddd}t        |       \  }}}}}}d|v r|j                  dd      \  }}||fS |j                  |j                               }||fS )zuExtract hostname and port from URI.

    Will use default port for HTTP and HTTPS if none is present in the URI.
    80443)HTTPHTTPS:   )r   r   getupper)	r   default_portsschnetlocpathparr   fraports	            r   host_from_urir1   3   sr     -
 (0}$#vtS%F]<<Q'LFD 
 SYY[)D	r    c                 p    t        | t              st        d      t        | j	                  d      d      S )ztEscape a string in an OAuth-compatible fashion.

    TODO: verify whether this can in fact be used for OAuth 2

    z#Only unicode objects are escapable.zutf-8   ~)safe)r   r   r   r   encode)us    r   escaper7   F   s0     
A|	$
:
;;	qxx t	,,r    c                     t         j                   j                         | z
  }|j                  |j                  |j                  dz  dz  z   dz  z   dz  }t        |      S )z9Generate a age parameter for MAC authentication draft 00.   i  i@B )datetimenowmicrosecondssecondsdaysr   )
issue_timetdages      r   generate_agerB   Q   sT    +"	BJJ2)<<E	EN#	c	r    c                     t         j                  j                  d      ry| j                         j	                  d      S )zCheck if the uri is over ssl.OAUTHLIB_INSECURE_TRANSPORTTzhttps://)osenvironr(   lower
startswith)r   s    r   is_secure_transportrI   X   s-    ZZ^^12			
	++r    )__doc__
__future__r   r   r:   rE   oauthlib.commonr   r   urllibr   ImportErrorurllib.parser   r   r   r   r1   r7   rB   rI    r    r   <module>rQ      st    9  	 3!$
L$&-,S  ! !  $#$s    ? A AAAA