U
    Æ½„b‹  ã                   @   sT   d dl mZmZmZmZmZ d dlmZ d dlm	Z	 dd„ Z
ddd„Zdd
d„ZdS )é    )ÚURLResolverÚincludeÚpathÚre_pathÚregister_converter)ÚRoutePattern)Úapi_settingsc                    sj   |r2t |ƒdkr|d }ndd |¡ }d| ‰ nd‰ G ‡ fdd„dƒ}d	}|rb|d
d
 |¡ 7 }||fS )Né   r   z(?:%s)ú|z\.%s/?z\.[a-z0-9]+/?c                       s    e Zd Z” Zdd„ Zdd„ ZdS )z9_get_format_path_converter.<locals>.FormatSuffixConverterc                 S   s
   |  d¡S )Nz./)Ústrip©ÚselfÚvalue© r   ú>/tmp/pip-unpacked-wheel-iohwuy7z/rest_framework/urlpatterns.pyÚ	to_python   s    zC_get_format_path_converter.<locals>.FormatSuffixConverter.to_pythonc                 S   s   d| d S )NÚ.ú/r   r   r   r   r   Úto_url   s    z@_get_format_path_converter.<locals>.FormatSuffixConverter.to_urlN)Ú__name__Ú
__module__Ú__qualname__Úregexr   r   r   ©Úsuffix_patternr   r   ÚFormatSuffixConverter   s   r   Zdrf_format_suffixÚ_)ÚlenÚjoin)Úsuffix_kwargÚallowedÚallowed_patternr   Úconverter_namer   r   r   Ú_get_format_path_converter   s    

	r#   Nc                 C   sJ  g }| D �]:}t |tƒr |jjj}|j}|j}|j}	t|j|||ƒ}
t |jt	ƒr~t
d k	s\t‚t|jƒ}t
|t|
|f|ƒ|	ƒ}nt|t|
|f|ƒ|	ƒ}| |¡ q|jjj d¡ d¡| }|j}|j}	|j}|sÚ| |¡ t |jt	ƒ�r,t
d k	sôt‚|d k	�st‚t|jƒ d¡ d¡| }t
|||	|ƒ}nt|||	|ƒ}| |¡ q|S )Nú$r   )Ú
isinstancer   Úpatternr   Ú	namespaceÚapp_nameZdefault_kwargsÚapply_suffix_patternsZurl_patternsr   r   ÚAssertionErrorÚstrr   r   ÚappendÚrstripÚcallbackZdefault_argsÚname)Úurlpatternsr   Úsuffix_requiredÚsuffix_routeÚretZ
urlpatternr   r'   r(   ÚkwargsÚpatternsZrouteZnew_patternÚviewr/   r   r   r   r)   !   s@    


ý

r)   Fc           	      C   sv   t j}|r<t|ƒdkr |d }ndd |¡ }d||f }nd| }t||ƒ\}}t||ƒ d||f }t| |||ƒS )aß  
    Supplement existing urlpatterns with corresponding patterns that also
    include a '.format' suffix.  Retains urlpattern ordering.

    urlpatterns:
        A list of URL patterns.

    suffix_required:
        If `True`, only suffixed URLs will be generated, and non-suffixed
        URLs will not be used.  Defaults to `False`.

    allowed:
        An optional tuple/list of allowed suffixes.  eg ['json', 'api']
        Defaults to `None`, which allows any suffix.
    r	   r   z(%s)r
   z\.(?P<%s>%s)/?$z\.(?P<%s>[a-z0-9]+)/?$z<%s:%s>)r   ZFORMAT_SUFFIX_KWARGr   r   r#   r   r)   )	r0   r1   r    r   r!   r   r"   Zsuffix_converterr2   r   r   r   Úformat_suffix_patternsQ   s    

r7   )N)FN)Zdjango.urlsr   r   r   r   r   Zdjango.urls.resolversr   Zrest_framework.settingsr   r#   r)   r7   r   r   r   r   Ú<module>   s
   
0