3
=^                 @   s   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lmZ ddlmZ dd
dZdddZdddZe
eejZd	S )zN
Provide urlresolver functions that return fully qualified URLs or view names
    )unicode_literals)NoReverseMatch)reverse)six)lazy)api_settings)replace_query_paramNc             C   sJ   |dkr| S t jg}x0|D ](}|r||jkr|j| }t| ||} qW | 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   E/tmp/pip-build-8app2_gc/djangorestframework/rest_framework/reverse.pypreserve_builtin_query_params   s    

r   c             K   sx   t |dd}|dk	rZy|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<|j|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   7   s    
r   )N)NNNN)NNNN)__doc__
__future__r   Zdjango.urlsr   r   r   Zdjango.utilsr   Zdjango.utils.functionalr   Zrest_framework.settingsr   Zrest_framework.utils.urlsr   r   r   	text_typeZreverse_lazyr   r   r   r   <module>   s   


