U
    ‰d`  ã                   @   sl   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddd	„Zdd
d„Zddd„ZeeeƒZdS )zN
Provide urlresolver functions that return fully qualified URLs or view names
é    )ÚNoReverseMatch)Úreverse)Úlazy)Úapi_settings)Úreplace_query_paramNc                 C   sF   |dkr| S t jg}|D ](}|r||jkr|j| }t| ||ƒ} q| S )z
    Given an incoming request, and an outgoing URL representation,
    append the value of any built-in query parameters.
    N)r   ZURL_FORMAT_OVERRIDEÚGETr   )ÚurlÚrequestZ	overridesÚparamÚvalue© r   ú:/tmp/pip-unpacked-wheel-quko9yh2/rest_framework/reverse.pyÚpreserve_builtin_query_params   s    ÿ
r   c              	   K   sx   t |ddƒ}|dk	rZz|j| ||||f|Ž}W qn tk
rV   t| ||||f|Ž}Y qnX nt| ||||f|Ž}t||ƒS )z®
    If versioning is being used then we pass any `reverse` calls through
    to the versioning scheme instance, so that the resulting URL
    can be modified if needed.
    Zversioning_schemeN)Úgetattrr   r   Ú_reverser   )ÚviewnameÚargsÚkwargsr	   ÚformatÚextraÚschemer   r   r   r   r       s    r   c                 K   s@   |dk	r|pi }||d< t | f||dœ|—Ž}|r<| |¡S |S )z•
    Same as `django.urls.reverse`, but optionally takes a request
    and returns a fully qualified URL, using the request to get the base URL.
    Nr   )r   r   )Údjango_reverseZbuild_absolute_uri)r   r   r   r	   r   r   r   r   r   r   r   4   s    
r   )N)NNNN)NNNN)Ú__doc__Zdjango.urlsr   r   r   Zdjango.utils.functionalr   Zrest_framework.settingsr   Zrest_framework.utils.urlsr   r   r   ÚstrZreverse_lazyr   r   r   r   Ú<module>   s   


