3
(h                 @   sx   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 G dd	 d	eZG d
d deZdS )    )messages)PermissionDenied)reverse)
force_text)format_html)urlquote)ugettextc                   sd   e Zd ZdZdZdZ fddZdd Z fddZ fd	d
Z	dd Z
 fddZdd Z  ZS )ModelViewMixinz>Mixin for generic form views to play nice with `ModelViewSet`.Nc                s0   t t| j|| | jd kr,| jd kr,d| _d S )N__all__)superr	   __init__Z
form_classfields)selfargskwargs)	__class__ K/tmp/pip-install-q3hcpn_q/django-material/material/frontend/views/mixins.pyr      s    zModelViewMixin.__init__c             C   s   t dS )zOCheck object access permission.

        Subclasses should override it
        N)NotImplementedError)r   requestobjr   r   r   has_object_permission   s    z$ModelViewMixin.has_object_permissionc                s$   t t| j }| j| j|s t|S )z-Retrive an object and check user permissions.)r   r	   
get_objectr   r   r   )r   r   )r   r   r   r      s    zModelViewMixin.get_objectc                s4   | j dkr&| jj}tdj|j|jS tt| j	 S )zARedirect back to the list view if no `success_url` is configured.Nz
{}:{}_list)
Zsuccess_urlmodel_metar   format	app_label
model_namer   r	   get_success_url)r   opts)r   r   r   r   #   s
    
zModelViewMixin.get_success_urlc             C   s@   | j dkr8| jj}dj|j|j| jdj|j|jdgS | j gS )a  
        List of templates for the view.

        If no `self.template_name` defined, uses::

             [<app_label>/<model_label>_<suffix>.html,
              <app_label>/<model_label>_form.html,
              'material/frontend/views/form.html']
        Nz{}/{}{}.htmlz{}/{}_form.htmlz!material/frontend/views/form.html)Ztemplate_namer   r   r   r   r   Ztemplate_name_suffix)r   r   r   r   r   get_template_names,   s    

z!ModelViewMixin.get_template_namesc                s   t t| j||}| j  |S )N)r   r	   
form_validmessage_user)r   r   r   response)r   r   r   r!   E   s    zModelViewMixin.form_validc             C   s   dS )zGSuccessfull notification.

        Subclasses can override it.
        Nr   )r   r   r   r   r"   J   s    zModelViewMixin.message_user)__name__
__module____qualname____doc__ZviewsetZlayoutr   r   r   r   r    r!   r"   __classcell__r   r   )r   r   r	   
   s   	r	   c               @   s4   e Zd ZdZejdfddZd
ddZdddZd	S )MessageUserMixinz7User notification utilities django.messages framework.'Tc       
      K   s   | j j}tdj|j|j| jjgd}tdt	|| j}t
|j}||d}	|	j| tt|jf |	}tj| jtj|dd dS )z&Construct message and notify the user.z{}:{}_detail)r   z<a href="{}">{}</a>)linknameT)fail_silentlyN)r   r   r   r   r   r   objectpkr   r   r   Zverbose_nameupdate_r   Zadd_messager   SUCCESS)
r   messagelevelr,   r   r   urlr*   r+   optionsr   r   r   reportT   s    

zMessageUserMixin.reportc             K   s   | j |ftj|d| d S )N)r3   r,   )r6   r   r1   )r   r2   r,   r   r   r   r   successe   s    zMessageUserMixin.successc             K   s   | j |ftj|d| d S )N)r3   r,   )r6   r   ERROR)r   r2   r,   r   r   r   r   errorh   s    zMessageUserMixin.errorN)T)T)	r$   r%   r&   r'   r   INFOr6   r7   r9   r   r   r   r   r)   Q   s   
r)   N)Zdjango.contribr   Zdjango.core.exceptionsr   Zdjango.core.urlresolversr   Zdjango.utils.encodingr   Zdjango.utils.htmlr   Zdjango.utils.httpr   Zdjango.utils.translationr   r0   r-   r	   r)   r   r   r   r   <module>   s   G