U
    {h                     @   s   d dl m Z  d dl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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 d dlmZ G dd deZG dd deZG dd deZdS )    )time)unquote)PermissionDenied)Http404JsonResponse)	QueryDict)get_object_or_404)TemplateResponse)method_decorator)View)get_edit_handler)PreviewableMixinRevisionMixin)"xframe_options_sameorigin_overridec                       s   e Zd ZdZdZdZdZdZ fddZ fddZ	d	d
 Z
edd Zdd Zdd Zdd Zdd Zdd Zdd Zeedd Zdd Z  ZS )PreviewOnEditN)postgetdeleteiQ zwagtail-preview-c                    s"   t  j|f|| |  | _d S N)supersetup
get_objectobjectselfrequestargskwargs	__class__ k/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/views/generic/preview.pyr      s    zPreviewOnEdit.setupc                    s$   t | jtstt j|f||S r   )
isinstancer   r   r   r   dispatchr   r   r    r!   r#      s    zPreviewOnEdit.dispatchc                    sD   t  j   fddjj D }|D ]}jj| q,d S )Nc                    s,   g | ]$\}}| jr|d   k r|qS )   )
startswithsession_key_prefix).0kvZ
expirationr   r    r!   
<listcomp>#   s    z9PreviewOnEdit.remove_old_preview_data.<locals>.<listcomp>)r   preview_expiration_timeoutr   sessionitemspop)r   Zexpired_keysr(   r    r*   r!   remove_old_preview_data!   s    
z%PreviewOnEdit.remove_old_preview_datac                 C   s:   | j jj}| j jj}| d| d| jj }| j | S N-)model_meta	app_label
model_namer   pkr&   )r   r5   r6   Z
unique_keyr    r    r!   session_key,   s    

zPreviewOnEdit.session_keyc                 C   s2   t | jtt| jd d}t|tr.| }|S )Nr7   r7   )r   r3   r   strr   r"   r   Zget_latest_revision_as_object)r   objr    r    r!   r   3   s    
zPreviewOnEdit.get_objectc                 C   s   | j r| j S t| j S r   )
form_classr   r3   get_form_classr   r    r    r!   r=   9   s    zPreviewOnEdit.get_form_classc                 C   s2   |   }|s|| j| jjdS ||| j| jjdS )N)instanceZfor_user)r=   r   r   user)r   Z
query_dictr<   r    r    r!   get_form>   s    zPreviewOnEdit.get_formc                 C   s,   | j j| jd\}}t|ts$d}t|S )N)NN )r   r-   r   r8   r"   r:   r   )r   Z	post_data_r    r    r!   _get_data_from_sessionG   s    
z$PreviewOnEdit._get_data_from_sessionc                 O   sb   |    | |j}| }|r>|j t f|j| j< d}n| |  }| }t	||dS )NT)is_validis_available)
r0   rA   POSTrE   	urlencoder   r-   r8   rD   r   )r   r   r   r   formrE   rF   r    r    r!   r   M   s    zPreviewOnEdit.postc                 C   s   t | jdd| jiS )Nz'wagtailadmin/generic/preview_error.htmlr   )r	   r   r   r>   r    r    r!   error_response]   s
    zPreviewOnEdit.error_responsec                 O   s   |  |  }| s|  S |jdd z|jd| jj}W n t	k
rX   t
Y nX |jddkdd}| j|||S )NF)commitmodein_preview_paneltrueT)rM   Z
is_editing)rA   rD   rE   rJ   saveGETr   r   default_preview_mode
IndexErrorr   make_preview_request)r   r   r   r   rI   preview_modeZextra_attrsr    r    r!   r   d   s    
zPreviewOnEdit.getc                 O   s   |j | jd  tddiS )NsuccessT)r-   r/   r8   r   r   r    r    r!   r   y   s    zPreviewOnEdit.delete)__name__
__module____qualname__r3   r<   http_method_namesr,   r&   r   r#   r0   propertyr8   r   r=   rA   rD   r   rJ   r
   r   r   r   __classcell__r    r    r   r!   r      s&   
	
r   c                   @   s    e Zd Zedd Zdd ZdS )PreviewOnCreatec                 C   s(   | j jj}| j jj}| j | d| S r1   )r3   r4   r5   r6   r&   )r   r5   r6   r    r    r!   r8      s    

zPreviewOnCreate.session_keyc                 C   s   |   S r   )r3   r>   r    r    r!   r      s    zPreviewOnCreate.get_objectN)rV   rW   rX   rZ   r8   r   r    r    r    r!   r\   ~   s   
r\   c                       s<   e Zd ZdZdZ fddZdd Zdd Zd	d
 Z  Z	S )PreviewRevisionN)r   c                    s8   t  j|f|| || _|| _|  | _|  | _d S r   )r   r   r7   revision_idr   r   get_revision_objectrevision_object)r   r   r7   r^   r   r   r   r    r!   r      s
    
zPreviewRevision.setupc                 C   s(   t | jtstt| jtt| jdS )Nr9   )
issubclassr3   r   r   r   r   r:   r7   r>   r    r    r!   r      s    zPreviewRevision.get_objectc                 C   s   t | jj| jd}| S )N)id)r   r   Z	revisionsr^   Z	as_object)r   revisionr    r    r!   r_      s    z#PreviewRevision.get_revision_objectc                 O   s>   z|j d| jj}W n tk
r.   tY nX | j||S )NrL   )rP   r   r`   rQ   rR   r   rS   )r   r   r   r   rT   r    r    r!   r      s     
zPreviewRevision.get)
rV   rW   rX   r3   rY   r   r   r_   r   r[   r    r    r   r!   r]      s   r]   N)r   Zdjango.contrib.admin.utilsr   Zdjango.core.exceptionsr   Zdjango.httpr   r   Zdjango.http.requestr   Zdjango.shortcutsr   Zdjango.template.responser	   Zdjango.utils.decoratorsr
   Zdjango.views.genericr   Zwagtail.admin.panelsr   Zwagtail.modelsr   r   Zwagtail.utils.decoratorsr   r   r\   r]   r    r    r    r!   <module>   s   m