3
[                 @   s   d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ ddd	Zdd
dZddddZdd Zdd Zdd Zdd ZdS )z
This module collects helper functions and classes that "span" multiple levels
of MVC. In other words, these functions/classes introduce controlled coupling
for convenience's sake.
    N)Http404HttpResponseHttpResponsePermanentRedirectHttpResponseRedirect)loader)NoReverseMatchreverse)RemovedInDjango30Warning)Promisec             C   s,   t jdtdd tj| ||d}t|||S )z
    Return a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    zzrender_to_response() is deprecated in favor of render(). It has the same signature except that it also requires a request.   )
stacklevel)using)warningswarnr	   r   render_to_stringr   )template_namecontextcontent_typestatusr   content r   4/tmp/pip-install-j7i95hgp/django/django/shortcuts.pyrender_to_response   s
    
r   c             C   s   t j||| |d}t|||S )z
    Return a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    )r   )r   r   r   )requestr   r   r   r   r   r   r   r   r   render   s    r   F)	permanentc            O   s    |rt nt}|t| f||S )a  
    Return an HttpResponseRedirect to the appropriate URL for the arguments
    passed.

    The arguments could be:

        * A model: the model's `get_absolute_url()` function will be called.

        * A view name, possibly with arguments: `urls.reverse()` will be used
          to reverse-resolve the name.

        * A URL, which will be used as-is for the redirect location.

    Issues a temporary redirect by default; pass permanent=True to issue a
    permanent redirect.
    )r   r   resolve_url)tor   argskwargsZredirect_classr   r   r   redirect(   s    r    c             C   s   t | dr| jj S | S )z
    Return a QuerySet or a Manager.
    Duck typing in action: any class with a `get()` method (for
    get_object_or_404) or a `filter()` method (for get_list_or_404) might do
    the job.
    _default_manager)hasattrr!   all)klassr   r   r   _get_queryset=   s    

r%   c             O   sr   t | }t|ds6t| tr"| jn| jj}td| y|j||S  |jj	k
rl   t
d|jjj Y nX dS )aX  
    Use get() to return an object, or raise a Http404 exception if the object
    does not exist.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the get() query.

    Like with QuerySet.get(), MultipleObjectsReturned is raised if more than
    one object is found.
    getzVFirst argument to get_object_or_404() must be a Model, Manager, or QuerySet, not '%s'.zNo %s matches the given query.N)r%   r"   
isinstancetype__name__	__class__
ValueErrorr&   modelZDoesNotExistr   _metaobject_name)r$   r   r   querysetklass__namer   r   r   get_object_or_404J   s    
r1   c             O   s`   t | }t|ds6t| tr"| jn| jj}td| t|j||}|s\t	d|j
jj |S )z
    Use filter() to return a list of objects, or raise a Http404 exception if
    the list is empty.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the filter() query.
    filterzTFirst argument to get_list_or_404() must be a Model, Manager, or QuerySet, not '%s'.zNo %s matches the given query.)r%   r"   r'   r(   r)   r*   r+   listr2   r   r,   r-   r.   )r$   r   r   r/   r0   Zobj_listr   r   r   get_list_or_404b   s    
r4   c             O   s   t | dr| j S t| tr$t| } t| tr<| jdr<| S yt| ||dS  tk
rz   t| rd d| krvd| krv Y nX | S )aM  
    Return a URL appropriate for the arguments passed.

    The arguments could be:

        * A model: the model's `get_absolute_url()` function will be called.

        * A view name, possibly with arguments: `urls.reverse()` will be used
          to reverse-resolve the name.

        * A URL, which will be returned as-is.
    get_absolute_url./../)r   r   /.)r6   r7   )	r"   r5   r'   r
   str
startswithr   r   callable)r   r   r   r   r   r   r   w   s    



r   )NNNN)NNNN)__doc__r   Zdjango.httpr   r   r   r   Zdjango.templater   Zdjango.urlsr   r   Zdjango.utils.deprecationr	   Zdjango.utils.functionalr
   r   r   r    r%   r1   r4   r   r   r   r   r   <module>   s   

	