o
    wvXjÓ  ã                   @   sX   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 )é    )ÚincludeÚurl)ÚURLResolverÚget_regex_patternÚis_route_patternÚpathÚregister_converter)Úapi_settingsc                    sj   |rt |ƒdkr|d }ndd |¡ }d| ‰ nd‰ G ‡ fdd„dƒ}d	}|r1|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   úW/var/www/html/myproject/venv/lib/python3.10/site-packages/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   Údrf_format_suffixÚ_)ÚlenÚjoin)Úsuffix_kwargÚallowedÚallowed_patternr   Úconverter_namer   r   r   Ú_get_format_path_converter	   s   

	r%   Nc                 C   s8  g }| D ]•}t |tƒrLt|ƒ}|j}|j}|j}	t|j|||ƒ}
t|ƒr;t	d us*J ‚t
|jƒ}t	|t|
|f|ƒ|	ƒ}nt|t|
|f|ƒ|	ƒ}| |¡ qt|ƒ d¡ d¡| }|j}|j}	|j}|sh| |¡ t|ƒr�t	d usrJ ‚|d usxJ ‚t
|jƒ d¡ d¡| }t	|||	|ƒ}nt|||	|ƒ}| |¡ q|S )Nú$r   )Ú
isinstancer   r   Ú	namespaceÚapp_nameÚdefault_kwargsÚapply_suffix_patternsÚurl_patternsr   r   ÚstrÚpatternr   r   ÚappendÚrstripÚcallbackÚdefault_argsÚname)Úurlpatternsr   Úsuffix_requiredÚsuffix_routeÚretÚ
urlpatternr   r(   r)   ÚkwargsÚpatternsÚrouteÚnew_patternÚviewr3   r   r   r   r+   #   s@   
ý

r+   Fc           	      C   s„   t j}|rt|ƒdkr|d }ndd |¡ }d||f }nd| }tr9tr9t||ƒ\}}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	   ÚFORMAT_SUFFIX_KWARGr   r    r   r   r%   r+   )	r4   r5   r"   r!   r#   r   r$   Úsuffix_converterr6   r   r   r   Úformat_suffix_patternsS   s   

r@   )N)FN)Údjango.conf.urlsr   r   Úrest_framework.compatr   r   r   r   r   Úrest_framework.settingsr	   r%   r+   r@   r   r   r   r   Ú<module>   s    
0