3
=^                 @   sd   d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZ dd Zddd	ZdddZdS )    )unicode_literals)includeurl)URLResolverget_regex_patternis_route_patternpathregister_converter)api_settingsc                sj   |r2t |dkr|d }nddj| }d|  nd G  fddd}d	}|rb|d
d
j| 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
   |j dS )Nz./)strip)selfvalue r   I/tmp/pip-build-8app2_gc/djangorestframework/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   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   sB  g }x6| D ],}t |trt|}|j}|j}|j}	t|j|||}
t|r|t	d k	sZt
t|j}t	|t|
|f||	}nt|t|
|f||	}|j| qt|jdjd| }|j}|j}	|j}|s|j| t|r"t	d k	st
|d k	st
t|jjdjd| }t	|||	|}nt|||	|}|j| qW |S )N$r   )
isinstancer   r   	namespaceapp_nameZdefault_kwargsapply_suffix_patternsZurl_patternsr   r   AssertionErrorstrpatternr   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   s   t j}|r<t|dkr |d }nddj| }d||f }nd| }trrtrrt||\}}t|| d||f }nd}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>N)r
   ZFORMAT_SUFFIX_KWARGr   r   r   r	   r#   r(   )	r0   r1   r    r   r!   r   r"   Zsuffix_converterr2   r   r   r   format_suffix_patternsU   s    

r7   )N)FN)
__future__r   Zdjango.conf.urlsr   r   Zrest_framework.compatr   r   r   r   r	   Zrest_framework.settingsr
   r#   r(   r7   r   r   r   r   <module>   s   
0