a
    DgM                     @   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 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"eeddG dd deZ#dS )    )time)unquote)PermissionDenied)Http404JsonResponse)	QueryDict)get_object_or_404)TemplateResponse)method_decorator)cached_property)gettext)TemplateViewView)get_edit_handler)Block)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|g|R i | |  | _d S N)supersetup
get_objectobjectselfrequestargskwargs	__class__ b/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/views/generic/preview.pyr      s    zPreviewOnEdit.setupc                    s*   t | jtstt j|g|R i |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   r9   r:   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 )Nr;   r;   )r   r7   r   strr!   r&   r   Zget_latest_revision_as_object)r   objr$   r$   r%   r   6   s    
zPreviewOnEdit.get_objectc                 C   s   | j r| j S t| j S r   )
form_classr   r7   get_form_classr   r$   r$   r%   rA   <   s    zPreviewOnEdit.get_form_classc                 C   s2   |   }|s|| j| jjdS ||| j| jjdS )N)instanceZfor_user)rA   r   r   user)r   Z
query_dictr@   r$   r$   r%   get_formA   s    zPreviewOnEdit.get_formc                 C   s,   | j j| jd\}}t|ts$d}t|S )N)NN )r   r1   r   r<   r&   r>   r   )r   Z	post_data_r$   r$   r%   _get_data_from_sessionJ   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)
r4   rE   POSTrI   	urlencoder   r1   r<   rH   r   )r   r   r    r!   formrI   rJ   r$   r$   r%   r   P   s    zPreviewOnEdit.postc                 C   s   t | jdd| jiS )Nz'wagtailadmin/generic/preview_error.htmlr   )r	   r   r   rB   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	yV   t
Y n0 |jddkdd}| j|||S )NF)commitmodein_preview_paneltrueT)rQ   Z
is_editing)rE   rH   rI   rN   saveGETr   r   default_preview_mode
IndexErrorr   make_preview_request)r   r   r    r!   rM   preview_modeZextra_attrsr$   r$   r%   r   g   s    
zPreviewOnEdit.getc                 O   s   |j | jd  tddiS )NsuccessT)r1   r3   r<   r   r   r$   r$   r%   r   |   s    zPreviewOnEdit.delete)__name__
__module____qualname__r7   r@   http_method_namesr0   r*   r   r'   r4   propertyr<   r   rA   rE   rH   r   rN   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 r5   )r7   r8   r9   r:   r*   )r   r9   r:   r$   r$   r%   r<      s    

zPreviewOnCreate.session_keyc                 C   s   |   S r   )r7   rB   r$   r$   r%   r      s    zPreviewOnCreate.get_objectN)rZ   r[   r\   r^   r<   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                    s>   t  j|g|R i | || _|| _|  | _|  | _d S r   )r   r   r;   revision_idr   r   get_revision_objectrevision_object)r   r   r;   rc   r    r!   r"   r$   r%   r      s
    
zPreviewRevision.setupc                 C   s(   t | jtstt| jtt| jdS )Nr=   )
issubclassr7   r   r   r   r   r>   r;   rB   r$   r$   r%   r      s    zPreviewRevision.get_objectc                 C   s   t | jj| jd}| S )N)id)r   r   Z	revisionsrc   Z	as_object)r   revisionr$   r$   r%   rd      s    z#PreviewRevision.get_revision_objectc                 O   s<   z|j d| jj}W n ty,   tY n0 | j||S )NrP   )rT   r   re   rU   rV   r   rW   )r   r   r    r!   rX   r$   r$   r%   r      s    
zPreviewRevision.get)
rZ   r[   r\   r7   r]   r   r   rd   r   r_   r$   r$   r"   r%   ra      s   ra   r   )namec                       sj   e Zd ZdZedd ZeedddZedd Zed	d
 Z	edd Z
dd Z fddZ  ZS )StreamFieldBlockPreviewrb   c                 C   s   | j jdS )Nrg   )r   rT   r   rB   r$   r$   r%   block_id   s    z StreamFieldBlockPreview.block_id)returnc                 C   s   t j| j }st|S r   )r   Zdefinition_registryr   rk   r   )r   blockr$   r$   r%   	block_def   s    z!StreamFieldBlockPreview.block_defc                 C   s
   | j  S r   )rn   Zget_preview_valuerB   r$   r$   r%   block_value   s    z#StreamFieldBlockPreview.block_valuec                 C   s   t d| jj| jjjd S )Nz,Preview for %(block_label)s (%(block_type)s))Zblock_labelZ
block_type)r   rn   labelr#   rZ   rB   r$   r$   r%   
page_title   s    z"StreamFieldBlockPreview.page_titlec                 C   s$   | j | j| jj| j| j| jdS )N)r   rn   Zblock_classZbound_blockrq   )r   rn   r#   bindro   rq   rB   r$   r$   r%   base_context   s    z$StreamFieldBlockPreview.base_contextc                 C   s   | j | j| jS r   )rn   Zget_preview_templatero   rs   rB   r$   r$   r%   get_template_names   s    z*StreamFieldBlockPreview.get_template_namesc                    s.   t  jf i |}|| j | j| j|S r   )r   get_context_dataupdaters   rn   Zget_preview_contextro   )r   r!   contextr"   r$   r%   ru      s    z(StreamFieldBlockPreview.get_context_data)rZ   r[   r\   r]   r   rk   r   rn   ro   rq   rs   rt   ru   r_   r$   r$   r"   r%   rj      s   



rj   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.utils.functionalr   Zdjango.utils.translationr   Zdjango.views.genericr   r   Zwagtail.admin.panelsr   Zwagtail.blocks.baser   Zwagtail.modelsr   r   Zwagtail.utils.decoratorsr   r   r`   ra   rj   r$   r$   r$   r%   <module>   s&   m
