
 XF#                 @   s  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
 m Z m Z d  d l m Z m Z m Z Gd d   d e
  Z Gd	 d
   d
 e e  Z Gd d   d e  Z Gd d   d e e  Z Gd d   d e e  Z Gd d   d e e  Z Gd d   d e e  Z Gd d   d e e  Z Gd d   d e e  Z Gd d   d e  Z Gd d   d e e  Z Gd d   d e e  Z d S)     )ImproperlyConfigured)models)HttpResponseRedirect)
force_text)ContextMixinTemplateResponseMixinView)BaseDetailViewSingleObjectMixin!SingleObjectTemplateResponseMixinc                   s   e  Z d  Z d Z i  Z d Z d Z d Z d d   Z d d   Z	 d d   Z
 d d	 d
  Z d d   Z d d   Z d d   Z d d   Z   f d d   Z   S)	FormMixinzM
    A mixin that provides a way to show and handle a form in a request.
    Nc             C   s   |  j  j   S)zI
        Returns the initial data to use for forms on this view.
        )initialcopy)self r   G/home/ubuntu/projects/ifolica/build/django/django/views/generic/edit.pyget_initial   s    zFormMixin.get_initialc             C   s   |  j  S)zB
        Returns the prefix to use for forms on this view
        )prefix)r   r   r   r   
get_prefix   s    zFormMixin.get_prefixc             C   s   |  j  S)z<
        Returns the form class to use in this view
        )
form_class)r   r   r   r   get_form_class!   s    zFormMixin.get_form_classc             C   s+   | d k r |  j    } n  | |  j     S)zJ
        Returns an instance of the form to be used in this view.
        N)r   get_form_kwargs)r   r   r   r   r   get_form'   s    zFormMixin.get_formc             C   s`   i |  j    d 6|  j   d 6} |  j j d k r\ | j i |  j j d 6|  j j d 6 n  | S)zK
        Returns the keyword arguments for instantiating the form.
        r   r   POSTPUTdatafiles)zPOSTzPUT)r   r   requestmethodupdater   ZFILES)r   kwargsr   r   r   r   /   s    	zFormMixin.get_form_kwargsc             C   s+   |  j  r t |  j   } n t d   | S)z3
        Returns the supplied success URL.
        z-No URL to redirect to. Provide a success_url.)success_urlr   r   )r   urlr   r   r   get_success_url?   s
    		zFormMixin.get_success_urlc             C   s   t  |  j    S)zE
        If the form is valid, redirect to the supplied URL.
        )r   r#   )r   formr   r   r   
form_validK   s    zFormMixin.form_validc             C   s   |  j  |  j d |   S)zr
        If the form is invalid, re-render the context data with the
        data-filled form and errors.
        r$   )render_to_responseget_context_data)r   r$   r   r   r   form_invalidQ   s    zFormMixin.form_invalidc                s5   d | k r |  j    | d <n  t t |   j |   S)z8
        Insert the form into the context dict.
        r$   )r   superr   r'   )r   r    )	__class__r   r   r'   X   s    zFormMixin.get_context_data)__name__
__module____qualname____doc__r   r   r!   r   r   r   r   r   r   r#   r%   r(   r'   r   r   )r*   r   r      s   r   c                   sX   e  Z d  Z d Z d Z d d   Z   f d d   Z d d   Z   f d	 d
   Z   S)ModelFormMixinzR
    A mixin that provides a way to show and handle a modelform in a request.
    Nc             C   s   |  j  d k	 r' |  j r' t d   n  |  j r7 |  j S|  j d k	 rR |  j } n< t |  d  r |  j d k	 r |  j j } n |  j   j } |  j  d k r t d |  j j   n  t	 j
 | d |  j  Sd S)z=
        Returns the form class to use in this view.
        Nz;Specifying both 'fields' and 'form_class' is not permitted.objectzUUsing ModelFormMixin (base class of %s) without the 'fields' attribute is prohibited.fields)r1   r   r   modelhasattrr0   r*   Zget_querysetr+   model_formsZmodelform_factory)r   r2   r   r   r   r   g   s    	zModelFormMixin.get_form_classc                sB   t  t |   j   } t |  d  r> | j i |  j d 6 n  | S)zK
        Returns the keyword arguments for instantiating the form.
        r0   instance)r)   r/   r   r3   r   r0   )r   r    )r*   r   r   r      s    zModelFormMixin.get_form_kwargsc             C   s\   |  j  r$ |  j  j |  j j   } n4 y |  j j   } Wn t k
 rW t d   Yn X| S)z+
        Returns the supplied URL.
        z^No URL to redirect to.  Either provide a url or define a get_absolute_url method on the Model.)r!   formatr0   __dict__Zget_absolute_urlAttributeErrorr   )r   r"   r   r   r   r#      s    	zModelFormMixin.get_success_urlc                s%   | j    |  _ t t |   j |  S)zB
        If the form is valid, save the associated model.
        )saver0   r)   r/   r%   )r   r$   )r*   r   r   r%      s    zModelFormMixin.form_valid)	r+   r,   r-   r.   r1   r   r   r#   r%   r   r   )r*   r   r/   a   s   	r/   c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	ProcessFormViewzF
    A mixin that renders a form on GET and processes it on POST.
    c             O   s   |  j  |  j    S)zT
        Handles GET requests and instantiates a blank version of the form.
        )r&   r'   )r   r   argsr    r   r   r   get   s    zProcessFormView.getc             O   s6   |  j    } | j   r% |  j |  S|  j |  Sd S)z
        Handles POST requests, instantiating a form instance with the passed
        POST variables and then checked for validity.
        N)r   Zis_validr%   r(   )r   r   r;   r    r$   r   r   r   post   s    zProcessFormView.postc             O   s   |  j  | |   S)N)r=   )r   r;   r    r   r   r   put   s    zProcessFormView.putN)r+   r,   r-   r.   r<   r=   r>   r   r   r   r   r:      s   r:   c               @   s   e  Z d  Z d Z d S)BaseFormViewz+
    A base view for displaying a form
    N)r+   r,   r-   r.   r   r   r   r   r?      s   r?   c               @   s   e  Z d  Z d Z d S)FormViewzJ
    A view for displaying a form, and rendering a template response.
    N)r+   r,   r-   r.   r   r   r   r   r@      s   r@   c                   s:   e  Z d  Z d Z   f d d   Z   f d d   Z   S)BaseCreateViewz
    Base view for creating an new object instance.

    Using this base class requires subclassing to provide a response mixin.
    c                s%   d  |  _  t t |   j | | |  S)N)r0   r)   rA   r<   )r   r   r;   r    )r*   r   r   r<      s    	zBaseCreateView.getc                s%   d  |  _  t t |   j | | |  S)N)r0   r)   rA   r=   )r   r   r;   r    )r*   r   r   r=      s    	zBaseCreateView.post)r+   r,   r-   r.   r<   r=   r   r   )r*   r   rA      s   rA   c               @   s   e  Z d  Z d Z d Z d S)
CreateViewz\
    View for creating a new object instance,
    with a response rendered by template.
    _formN)r+   r,   r-   r.   template_name_suffixr   r   r   r   rB      s   rB   c                   s:   e  Z d  Z d Z   f d d   Z   f d d   Z   S)BaseUpdateViewz
    Base view for updating an existing object.

    Using this base class requires subclassing to provide a response mixin.
    c                s+   |  j    |  _ t t |   j | | |  S)N)
get_objectr0   r)   rE   r<   )r   r   r;   r    )r*   r   r   r<      s    zBaseUpdateView.getc                s+   |  j    |  _ t t |   j | | |  S)N)rF   r0   r)   rE   r=   )r   r   r;   r    )r*   r   r   r=      s    zBaseUpdateView.post)r+   r,   r-   r.   r<   r=   r   r   )r*   r   rE      s   rE   c               @   s   e  Z d  Z d Z d Z d S)
UpdateViewzP
    View for updating an object,
    with a response rendered by template.
    rC   N)r+   r,   r-   r.   rD   r   r   r   r   rG      s   rG   c               @   s@   e  Z d  Z d Z d Z d d   Z d d   Z d d   Z d S)	DeletionMixinz9
    A mixin providing the ability to delete objects
    Nc             O   s2   |  j    |  _ |  j   } |  j j   t |  S)zp
        Calls the delete() method on the fetched object and then
        redirects to the success URL.
        )rF   r0   r#   deleter   )r   r   r;   r    r!   r   r   r   rI     s    zDeletionMixin.deletec             O   s   |  j  | | |  S)N)rI   )r   r   r;   r    r   r   r   r=     s    zDeletionMixin.postc             C   s/   |  j  r |  j  j |  j j   St d   d  S)Nz-No URL to redirect to. Provide a success_url.)r!   r6   r0   r7   r   )r   r   r   r   r#     s    	zDeletionMixin.get_success_url)r+   r,   r-   r.   r!   rI   r=   r#   r   r   r   r   rH      s
   rH   c               @   s   e  Z d  Z d Z d S)BaseDeleteViewzx
    Base view for deleting an object.

    Using this base class requires subclassing to provide a response mixin.
    N)r+   r,   r-   r.   r   r   r   r   rJ     s   rJ   c               @   s   e  Z d  Z d Z d Z d S)
DeleteViewzs
    View for deleting an object retrieved with `self.get_object()`,
    with a response rendered by template.
    Z_confirm_deleteN)r+   r,   r-   r.   rD   r   r   r   r   rK     s   rK   N)Zdjango.core.exceptionsr   Zdjango.formsr   r4   Zdjango.httpr   Zdjango.utils.encodingr   Zdjango.views.generic.baser   r   r   Zdjango.views.generic.detailr	   r
   r   r   r/   r:   r?   r@   rA   rB   rE   rG   r0   rH   rJ   rK   r   r   r   r   <module>   s"   VE