a
    Dg̰                     @   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
 d dlmZ d dlmZ d dlmZmZ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&m'Z' d dl(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZF d dlGmHZH d dlImJZJ d dlKmLZLmMZM d dlNmOZO d dlPmQZQ d d lRmSZS d!d" ZTG d#d$ d$e.jUZVG d%d& d&e.jWe.jXZXG d'd( d(e.jYe.jZZZG d)d* d*e.j[eZZ\G d+d, d,e.jYe.j]Z]G d-d. d.e.j^Z^G d/d0 d0e.j_Z_G d1d2 d2e0j`Z`G d3d4 d4e.jaZaG d5d6 d6e6ZbG d7d8 d8e7ZcG d9d: d:e4e8ZdG d;d< d<e4e.jeZeG d=d> d>e4e.jfZfG d?d@ d@e4e.jgZgG dAdB dBe4e1jhZhG dCdD dDe4e1jiZiG dEdF dFe2jjZkG dGdH dHe2jlZmG dIdJ dJe2jnZoG dKdL dLe2jpZqG dMdN dNe4e0jrZrG dOdP dPe4e0jsZsG dQdR dRe<ZtG dSdT dTe=ZudUS )V    )warn)apps)quote)checks)ImproperlyConfiguredPermissionDenied)Http404)redirect)pathre_pathreversereverse_lazy)cached_property)capfirst)gettext)gettext_lazy)hooks)check_panels_in_model)
ObjectList*extract_panel_definitions_from_model_class)MediaContainer)ChecksSidePanelPreviewSidePanel)BulkActionsCheckboxColumnColumnLiveStatusTagColumnTitleColumn)generic)historylockworkflow)PermissionCheckedMixin)PreviewOnCreatePreviewOnEditPreviewRevision)viewsets)ModelViewSetModelViewSetGroup)BaseDropdownMenuButtonButtonWithDropdown)DraftStateMixinLockableMixinPreviewableMixinRevisionMixinWorkflowMixin)ModelPermissionPolicy)SnippetActionMenu)SnippetAdminURLFinderget_snippet_models)SnippetStatusSidePanel)SnippetChooserViewSet)RemovedInWagtail70Warningc                 C   s:   zt | |}W n ty&   tY n0 |t vr6t|S )z|
    Retrieve a model from an app_label / model_name combo.
    Raise Http404 if the model is not a valid snippet type.
    )r   Z	get_modelLookupErrorr   r2   )Zapp_name
model_namemodel r9   ^/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/snippets/views/snippets.py!get_snippet_model_from_url_params8   s    

r;   c                       st   e Zd ZedZdZdZdZ fddZdd Z	 fd	d
Z
dd Zdd Zedd Z fddZdd Z  ZS )ModelIndexViewSnippetssnippetwagtailsnippets:indexnamec                    s(   t  j|g|R i | |  | _d S N)supersetup_get_snippet_typessnippet_typesselfrequestargskwargs	__class__r9   r:   rC   Q   s    zModelIndexView.setupc                    s    fddt  D S )Nc                    s:   g | ]2}  | rt|jj|j  |d qS ))r@   countr8   url)get_list_urlr   _metaverbose_name_pluralZ_default_managerallrM   ).0r8   rG   rN   r9   r:   
<listcomp>V   s   
z5ModelIndexView._get_snippet_types.<locals>.<listcomp>)r2   rG   r9   rT   r:   rD   U   s    z!ModelIndexView._get_snippet_typesc                    s$   | j s
tt j|g|R i |S rA   )rE   r   rB   dispatchrF   rK   r9   r:   rW   a   s    zModelIndexView.dispatchc                 C   s,   |j j| jjh dr(t|j dS d S )N>   changeviewadddeletelist)snippet_viewsetpermission_policyZuser_has_any_permissionrH   userr   get_url_name)rG   r8   r9   r9   r:   rO   f   s
    zModelIndexView.get_list_urlc                 C   s   d S rA   r9   rV   r9   r9   r:   get_querysetm   s    zModelIndexView.get_querysetc                 C   s*   t dtddd ddtdtdddgS )	Nr@   Namec                 S   s   | d S )NrN   r9   typer9   r9   r:   <lambda>v       z(ModelIndexView.columns.<locals>.<lambda>)labelget_urlsort_keyrM   Z	Instances)rg   ri   )r   _r   rV   r9   r9   r:   columnsp   s    zModelIndexView.columnsc                    sP   | j d dk}| j dv r.t| jdd |d}nt| jdd |d}t j|dS )	Nr   -)rM   z-countc                 S   s   | d S )NrM   r9   rc   r9   r9   r:   re      rf   z1ModelIndexView.get_context_data.<locals>.<lambda>)keyr   c                 S   s   | d   S )Nr@   )lowerrc   r9   r9   r:   re      rf   )Zobject_list)ZorderingsortedrE   rB   get_context_data)rG   rJ   r   rE   rK   r9   r:   rp      s    
zModelIndexView.get_context_datac                 C   s
   d| j gS )Nz)wagtailsnippets/snippets/model_index.htmltemplate_namerV   r9   r9   r:   get_template_names   s    z!ModelIndexView.get_template_names)__name__
__module____qualname__r   Z
page_titleZheader_iconindex_url_nameZdefault_orderingrC   rD   rW   rO   ra   r   rk   rp   rs   __classcell__r9   r9   rK   r:   r<   K   s   
r<   c                       sD   e Zd ZdZ fddZe fddZ fddZdd	 Z  Z	S )
	IndexViewr\   c                    s"   t | jr| | j| _t  S rA   )callablequerysetrH   rB   get_base_querysetrV   rK   r9   r:   r|      s    
zIndexView.get_base_querysetc                    s   t dddgt jS )NZbulk_actionsr>   )Zobj_type)r   rB   rk   rV   rK   r9   r:   rk      s    
zIndexView.columnsc                    s   t  j|i |ddd iS )NZget_title_idc                 S   s   dt | j dS )NZsnippet_Z_title)r   pk)instancer9   r9   r:   re      rf   z-IndexView._get_title_column.<locals>.<lambda>)rB   _get_title_column)rG   rI   rJ   rK   r9   r:   r      s    zIndexView._get_title_columnc              
   C   s   |  |}| jj}g }tdD ]>}||| jj|}|D ]$}t|trR|| q8|| q8q tdD ]L}z|||| jj W qj t	y   t
dtdd |||| jji  Y qj0 qj|r|t|ddtdd	t|i id
 |S )NZ register_snippet_listing_buttonsZ!construct_snippet_listing_buttonszKconstruct_snippet_listing_buttons hook no longer accepts a context argument   )
stacklevelzdots-horizontalz
aria-labelzMore options for '%(title)s'title)ZbuttonsZ	icon_nameattrs)Zget_list_more_buttonsrH   r
   r   Z	get_hooksr_   
isinstancer(   append	TypeErrorr   r5   r)   rj   str)rG   r~   Zmore_buttonsZnext_urlZlist_buttonshookZhook_buttonsbuttonr9   r9   r:   get_list_buttons   s>    


zIndexView.get_list_buttons)
rt   ru   rv   	view_namer|   r   rk   r   r   rx   r9   r9   rK   r:   ry      s   ry   c                       sD   e Zd ZdZdZdd Zdd Zdd Zd	d
 Z fddZ	  Z
S )
CreateViewcreatez$wagtailsnippets/snippets/create.htmlc                 C   s   |  d| j| jS )NZbefore_create_snippet)run_hookrH   r8   rV   r9   r9   r:   run_before_hook   s    zCreateView.run_before_hookc                 C   s   |  d| j| jS )NZafter_create_snippetr   rH   objectrV   r9   r9   r:   run_after_hook   s    zCreateView.run_after_hookc                 C   s   t | j| j| jdS )N)rY   r8   )r0   rH   r   r8   rV   r9   r9   r:   _get_action_menu   s    zCreateView._get_action_menuc                 C   sv   t | jj| jt| jdd| j| jdg}| jrn| jj rn|	t
| jj| j|  d |	t| jj| j t|S )Nshow_schedule_publishing_toggleF)r   localetranslationsZpreview_url)r3   formr~   rH   getattrr   r   preview_enabledis_previewabler   r   get_preview_urlr   r   rG   Zside_panelsr9   r9   r:   get_side_panels   s$    zCreateView.get_side_panelsc                    s8   t  jf i |}|  }|d  |j7  < ||d< |S Nmediaaction_menurB   rp   r   r   rG   rJ   contextr   rK   r9   r:   rp     s
    zCreateView.get_context_datart   ru   rv   r   rr   r   r   r   r   rp   rx   r9   r9   rK   r:   r      s   r   c                   @   s   e Zd ZdS )CopyViewNrt   ru   rv   r9   r9   r9   r:   r   
  s   r   c                       sD   e Zd ZdZdZdd Zdd Zdd Zd	d
 Z fddZ	  Z
S )EditVieweditz"wagtailsnippets/snippets/edit.htmlc                 C   s   |  d| j| jS )NZbefore_edit_snippetr   rV   r9   r9   r:   r     s    zEditView.run_before_hookc                 C   s   |  d| j| jS )NZafter_edit_snippetr   rV   r9   r9   r:   r     s    zEditView.run_after_hookc                 C   s   t | j| j| j| jdS )N)rY   r~   locked_for_user)r0   rH   r   r   r   rV   r9   r9   r:   r     s    zEditView._get_action_menuc                 C   s   t | j| jt| jdd| j| jr*| j nd | j| j	| 
 |  |  d
g}| jr| j r|t| j| j|  d |t| j| j t|S )Nr   F)r   live_objectZscheduled_objectr   r   Z	usage_urlZhistory_urlZlast_updated_infor   )r3   r   rH   r   r   r   draftstate_enabledZ get_scheduled_revision_as_objectr   r   Zget_usage_urlZget_history_urlZget_last_updated_infor   r   r   r   r   r   r   r   r9   r9   r:   r      s2    zEditView.get_side_panelsc                    s8   t  jf i |}|  }|d  |j7  < ||d< |S r   r   r   rK   r9   r:   rp   <  s
    zEditView.get_context_datar   r9   r9   rK   r:   r     s   r   c                   @   s    e Zd ZdZdd Zdd ZdS )
DeleteViewr[   c                 C   s   |  d| j| jgS )NZbefore_delete_snippetr   rV   r9   r9   r:   r   G  s    zDeleteView.run_before_hookc                 C   s   |  d| j| jgS )NZafter_delete_snippetr   rV   r9   r9   r:   r   J  s    zDeleteView.run_after_hookN)rt   ru   rv   r   r   r   r9   r9   r9   r:   r   D  s   r   c                   @   s   e Zd ZdZdS )	UsageViewusageNrt   ru   rv   r   r9   r9   r9   r:   r   N  s   r   c                   @   s   e Zd ZdZdS )HistoryViewr   Nr   r9   r9   r9   r:   r   R  s   r   c                   @   s   e Zd ZdZdS )InspectViewinspectNr   r9   r9   r9   r:   r   V  s   r   c                   @   s   e Zd ZdS )PreviewOnCreateViewNr   r9   r9   r9   r:   r   Z  s   r   c                   @   s   e Zd ZdS )PreviewOnEditViewNr   r9   r9   r9   r:   r   ^  s   r   c                   @   s   e Zd ZdZdS )PreviewRevisionViewrX   Nrt   ru   rv   permission_requiredr9   r9   r9   r:   r   b  s   r   c                   @   s   e Zd ZdZdS )RevisionsCompareViewrX   Nr   r9   r9   r9   r:   r   f  s   r   c                   @   s   e Zd ZdZdS )UnpublishViewpublishNr   r9   r9   r9   r:   r   j  s   r   c                   @   s   e Zd ZdZdS )RevisionsUnscheduleViewr   Nr   r9   r9   r9   r:   r   n  s   r   c                       s    e Zd ZdZ fddZ  ZS )LockViewr   c                    sN   | j jjrdS || jkrBt| jtrB| jj}|rB|| j| j jS t	 
|S NT)rH   r_   is_superuserr   r   r   r.   current_workflow_taskZuser_can_lockrB   user_has_permissionrG   Z
permissionr   rK   r9   r:   r   u  s    

zLockView.user_has_permissionrt   ru   rv   r   r   rx   r9   r9   rK   r:   r   r  s   r   c                       s    e Zd ZdZ fddZ  ZS )
UnlockViewunlockc                    sd   | j jjrdS || jkrX| jj| j jjkr.dS t| jtrX| jj	}|rX|
| j| j jS t |S r   )rH   r_   r   r   r   Zlocked_by_idr}   r   r.   r   Zuser_can_unlockrB   r   r   rK   r9   r:   r     s    


zUnlockView.user_has_permissionr   r9   r9   rK   r:   r     s   r   c                   @   s   e Zd ZdS )WorkflowActionViewNr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdS )CollectWorkflowActionDataViewNr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdS )ConfirmWorkflowCancellationViewNr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdS )WorkflowPreviewViewNr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdZdS )WorkflowHistoryViewrX   Nr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdZdS )WorkflowHistoryDetailViewrX   Nr   r9   r9   r9   r:   r     s   r   c                       sd  e Zd ZdZdZdZdZdZdZdZ	e
ZeZeZeZeZeZeZeZeZeZeZe Z!e"Z#e$Z%e&Z'e(Z)e*Z+e,Z-e.Z/e0Z1e2Z3e4Z5e6Z7dZ8 fddZ9e:dd Z;e:d	d
 Z<e=dd Z>e=dd Z? fddZ@ fddZA fddZBdd ZC fddZDe=dd ZEe=dd ZFe=dd ZGe=dd  ZHe=d!d" ZIe=d#d$ ZJe=d%d& ZKe=d'd( ZLe=d)d* ZMe=d+d, ZNe=d-d. ZOe=d/d0 ZPe=d1d2 ZQe=d3d4 ZRe=d5d6 ZSe=d7d8 ZTe=d9d: ZUe=d;d< ZVe: fd=d>ZWe:d?d@ ZXdAdB ZYe:dCdD ZZdEdF Z[e:dGdH Z\dIdJ Z]e:dKdL Z^dMdN Z_e:dOdP Z`dQdR ZadSdT Zbe:dUdV ZcdWdX Zde:dYdZ Zed[d\ Zfe:d]d^ Zgd_d` Zhe:dadb Zidcdd Zje:dedf Zkdgdh Zle:didj Zmdkdl Zne:dmdn Zododp Zpe:dqdr Zqdsdt Zrdudv Zsdwdx Ztdydz Zud{d| Zve=d}d~ Zwdd Zxe:dd Zy fddZzdd Z{dd Z|dd Z} fddZ~  ZS )SnippetViewSeta  
    A viewset that instantiates the admin views for snippets.

    All attributes and methods from
    :class:`~wagtail.admin.viewsets.model.ModelViewSet` are available.

    For more information on how to use this class,
    see :ref:`wagtailsnippets_custom_admin_views`.
    N
   zwagtailsnippets/snippets/c                    s   t  jf i | | jd u r$td| jj| _| jj| _| jj| _t| jt	| _
t| jt| _t| jt| _t| jt| _t| jt| _t| dt| j| _d S )NzBSnippetViewSet must be passed a model or define a model attribute.menu_item_is_registered)rB   __init__r8   r   rP   
model_opts	app_labelr7   
issubclassr,   r   r-   revision_enabledr*   r   r.   workflow_enabledr+   locking_enabledr   bool	menu_hookr   rG   rJ   rK   r9   r:   r   #  s     



zSnippetViewSet.__init__c                 C   s   |   S rA   )get_admin_base_pathrV   r9   r9   r:   
url_prefix9  s    zSnippetViewSet.url_prefixc                 C   s   |   S rA   )get_admin_url_namespacerV   r9   r9   r:   url_namespace?  s    zSnippetViewSet.url_namespacec                 C   s   t dtj| jfddi}|S )as  
        The view class to use for reverting to a previous revision.

        By default, this class is generated by combining the edit view with
        ``wagtail.admin.views.generic.mixins.RevisionsRevertMixin``. As a result,
        this class must be a subclass of ``wagtail.snippets.views.snippets.EditView``
        and must handle the reversion correctly.
        Z_RevisionsRevertViewr   revisions_revert)rd   r   ZRevisionsRevertMixinedit_view_class)rG   revisions_revert_view_classr9   r9   r:   r   F  s    

z*SnippetViewSet.revisions_revert_view_classc                 C   s
   t | jS rA   )r/   r8   rV   r9   r9   r:   r^   W  s    z SnippetViewSet.permission_policyc                    sd   t  jf i | d| d| d| d| d| d| d| d| d	| jd

|S )Nr\   list_resultsr   r   revisions_viewr   revisions_comparerevisions_unschedule	unpublish)
rw   Zindex_results_url_nameZlock_url_nameZunlock_url_nameZrevisions_view_url_nameZrevisions_revert_url_nameZrevisions_compare_url_nameZrevisions_unschedule_url_nameZunpublish_url_namebreadcrumbs_items)rB   get_common_view_kwargsr`   r   r   rK   r9   r:   r   [  s"    
z%SnippetViewSet.get_common_view_kwargsc                    s   t  jf d| ji|S )Nr{   )rB   get_index_view_kwargsra   r   rK   r9   r:   r   n  s
    
z$SnippetViewSet.get_index_view_kwargsc                    s   t  jf d| di|S )Npreview_url_namepreview_on_add)rB   get_add_view_kwargsr`   r   rK   r9   r:   r   t  s
    
z"SnippetViewSet.get_add_view_kwargsc                 K   s   | j f i |S rA   )r   r   r9   r9   r:   get_copy_view_kwargsz  s    z#SnippetViewSet.get_copy_view_kwargsc                    s,   t  jf | d| d| dd|S )Npreview_on_editworkflow_historyconfirm_workflow_cancellation)r   workflow_history_url_nameZ&confirm_workflow_cancellation_url_name)rB   get_edit_view_kwargsr`   r   rK   r9   r:   r   }  s    z#SnippetViewSet.get_edit_view_kwargsc                 C   s   |  | jS rA   )construct_viewrevisions_view_classrV   r9   r9   r:   r     s    zSnippetViewSet.revisions_viewc                 C   s   | j | jfi |  S rA   )r   r   r   rV   r9   r9   r:   revisions_revert_view  s
    z$SnippetViewSet.revisions_revert_viewc                 C   s"   | j | j| j| jd| jjddS )Nr   fallback)edit_handlerrr   )r   revisions_compare_view_classZ_edit_handlerget_templatesrr   rV   r9   r9   r:   revisions_compare_view  s    z%SnippetViewSet.revisions_compare_viewc                 C   s   | j | j| jd| jjddS )Nr   r   rq   )r   revisions_unschedule_view_classr   rr   rV   r9   r9   r:   revisions_unschedule_view  s    z(SnippetViewSet.revisions_unschedule_viewc                 C   s   | j | j| jd| jjddS )Nr   r   rq   )r   unpublish_view_classr   rr   rV   r9   r9   r:   unpublish_view  s    zSnippetViewSet.unpublish_viewc                 C   s   | j | j|  dS )NZ
form_class)r   preview_on_add_view_classget_form_classrV   r9   r9   r:   preview_on_add_view  s    z"SnippetViewSet.preview_on_add_viewc                 C   s   | j | j| jdddS )NT)Z
for_updater   )r   preview_on_edit_view_classr   rV   r9   r9   r:   preview_on_edit_view  s    
z#SnippetViewSet.preview_on_edit_viewc                 C   s   | j | j| ddS Nr   )Zsuccess_url_name)r   lock_view_classr`   rV   r9   r9   r:   	lock_view  s    zSnippetViewSet.lock_viewc                 C   s   | j | jfi |  S rA   )r   copy_view_classr   rV   r9   r9   r:   	copy_view  s    zSnippetViewSet.copy_viewc                 C   s   | j | j| ddS r  )r   unlock_view_classr`   rV   r9   r9   r:   unlock_view  s    zSnippetViewSet.unlock_viewc                 C   s   | j | j| d| ddS )Nr   workflow_actionZredirect_url_nameZsubmit_url_name)r   workflow_action_view_classr`   rV   r9   r9   r:   workflow_action_view  s
    z#SnippetViewSet.workflow_action_viewc                 C   s   | j | j| d| ddS )Nr   collect_workflow_action_datar  )r   'collect_workflow_action_data_view_classr`   rV   r9   r9   r:   !collect_workflow_action_data_view  s
    z0SnippetViewSet.collect_workflow_action_data_viewc                 C   s   |  | jS rA   )r   (confirm_workflow_cancellation_view_classrV   r9   r9   r:   "confirm_workflow_cancellation_view  s    z1SnippetViewSet.confirm_workflow_cancellation_viewc                 C   s   |  | jS rA   )r   workflow_preview_view_classrV   r9   r9   r:   workflow_preview_view  s    z$SnippetViewSet.workflow_preview_viewc                 C   s&   | j | j| jd| jjd| ddS )Nzworkflow_history/indexr   workflow_history_detail)rr   Z workflow_history_detail_url_name)r   workflow_history_view_classr   rr   r`   rV   r9   r9   r:   workflow_history_view  s    z$SnippetViewSet.workflow_history_viewc                 C   s&   | j | j| jd| jjd| ddS )Nzworkflow_history/detailr   r   )rr   r   )r   "workflow_history_detail_view_classr   rr   r`   rV   r9   r9   r:   workflow_history_detail_view  s    z+SnippetViewSet.workflow_history_detail_viewc                    s    fdd}|S )Nc                    s(   t d jj td t d|ddS )NzY%s's `/<pk>/usage/` usage view URL pattern has been deprecated in favour of /usage/<pk>/.)categoryr   T)Z	permanent)r   rL   rt   r5   r	   r`   )rH   r}   rV   r9   r:   redirect_to_usage  s    z@SnippetViewSet.redirect_to_usage_view.<locals>.redirect_to_usager9   )rG   r  r9   rV   r:   redirect_to_usage_view   s    z%SnippetViewSet.redirect_to_usage_viewc                 C   s"   | j |  | j|  | j| jdS )N)r8   r   iconZper_page)chooser_viewset_classget_chooser_admin_url_namespacer8   get_chooser_admin_base_pathr  chooser_per_pagerV   r9   r9   r:   chooser_viewset  s    zSnippetViewSet.chooser_viewsetc                    s"   t  j }| jr|t  |S rA   )rB   list_displaycopyr   r   r   )rG   r$  rK   r9   r:   r$    s    zSnippetViewSet.list_displayc                 C   s   |   S rA   )get_iconrV   r9   r9   r:   r     s    zSnippetViewSet.iconc                 C   s   dS )z
        Returns the icon to be used for the admin views.

        **Deprecated** - the preferred way to customise this is to define an ``icon`` property.
        r>   r9   rV   r9   r9   r:   r&  $  s    zSnippetViewSet.get_iconc                 C   s   |   S rA   )get_menu_labelrV   r9   r9   r:   
menu_label,  s    zSnippetViewSet.menu_labelc                 C   s   t | jjS )z
        Returns the label text to be used for the menu item.

        **Deprecated** - the preferred way to customise this is to define a ``menu_label`` property.
        )r   r   rQ   rV   r9   r9   r:   r'  0  s    zSnippetViewSet.get_menu_labelc                 C   s   |   S rA   )get_menu_namerV   r9   r9   r:   	menu_name8  s    zSnippetViewSet.menu_namec                 C   s   dS )z
        Returns the name to be used for the menu item.

        **Deprecated** - the preferred way to customise this is to define a ``menu_name`` property.
         r9   rV   r9   r9   r:   r)  <  s    zSnippetViewSet.get_menu_namec                 C   s   |   S rA   )get_menu_iconrV   r9   r9   r:   	menu_iconD  s    zSnippetViewSet.menu_iconc                 C   s   | j S )z
        Returns the icon to be used for the menu item.

        **Deprecated** - the preferred way to customise this is to define a ``menu_icon`` property.
        )r  rV   r9   r9   r:   r,  H  s    zSnippetViewSet.get_menu_iconc                 C   s   |   S rA   )get_menu_orderrV   r9   r9   r:   
menu_orderP  s    zSnippetViewSet.menu_orderc                 C   s   dS )z
        Returns the ordering number to be applied to the menu item.

        **Deprecated** - the preferred way to customise this is to define a ``menu_order`` property.
        i'#  r9   rV   r9   r9   r:   r.  T  s    zSnippetViewSet.get_menu_orderc                 C   s   | j S rA   )r   rV   r9   r9   r:   get_menu_item_is_registered]  s    z*SnippetViewSet.get_menu_item_is_registeredc                 C   s$   t dtddt dtddgS )NZwagtailadmin_homeZHome)rN   rg   r?   r=   )r   rj   rV   r9   r9   r:   r   `  s    z SnippetViewSet.breadcrumbs_itemsc                 C   s   dS )z
        Returns a QuerySet of all model instances to be shown on the index view.
        If ``None`` is returned (the default), the logic in
        ``index_view.get_base_queryset()`` will be used instead.
        Nr9   )rG   rH   r9   r9   r:   ra   i  s    zSnippetViewSet.get_querysetc                 C   s   |   S rA   )get_index_templaterV   r9   r9   r:   index_template_nameq  s    z"SnippetViewSet.index_template_namec                 C   s
   |  dS )ab  
        Returns a template to be used when rendering ``index_view``. If a
        template is specified by the ``index_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define an ``index_template_name`` property.
        indexr   rV   r9   r9   r:   r1  u  s    z!SnippetViewSet.get_index_templatec                 C   s   |   S rA   )get_index_results_templaterV   r9   r9   r:   index_results_template_name  s    z*SnippetViewSet.index_results_template_namec                 C   s
   |  dS )az  
        Returns a template to be used when rendering ``index_results_view``. If a
        template is specified by the ``index_results_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define an ``index_results_template_name`` property.
        Zindex_resultsr4  rV   r9   r9   r:   r5    s    z)SnippetViewSet.get_index_results_templatec                 C   s   |   S rA   )get_create_templaterV   r9   r9   r:   create_template_name  s    z#SnippetViewSet.create_template_namec                 C   s
   |  dS )aa  
        Returns a template to be used when rendering ``add_view``. If a
        template is specified by the ``create_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define a ``create_template_name`` property.
        r   r4  rV   r9   r9   r:   r7    s    z"SnippetViewSet.get_create_templatec                 C   s   |   S rA   )get_edit_templaterV   r9   r9   r:   edit_template_name  s    z!SnippetViewSet.edit_template_namec                 C   s
   |  dS )a_  
        Returns a template to be used when rendering ``edit_view``. If a
        template is specified by the ``edit_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define an ``edit_template_name`` property.
        r   r4  rV   r9   r9   r:   r9    s    z SnippetViewSet.get_edit_templatec                 C   s   |   S rA   )get_delete_templaterV   r9   r9   r:   delete_template_name  s    z#SnippetViewSet.delete_template_namec                 C   s
   |  dS )ad  
        Returns a template to be used when rendering ``delete_view``. If a
        template is specified by the ``delete_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define a ``delete_template_name`` property.
        r[   r4  rV   r9   r9   r:   r;    s    z"SnippetViewSet.get_delete_templatec                 C   s   |   S )ah  
        A template to be used when rendering ``history_view``.

        Default: if :attr:`template_prefix` is specified, a ``history.html``
        template in the prefix directory and its ``{app_label}/{model_name}/``
        or ``{app_label}/`` subdirectories will be used. Otherwise, the
        ``history_view_class.template_name`` will be used.
        )get_history_templaterV   r9   r9   r:   history_template_name  s    
z$SnippetViewSet.history_template_namec                 C   s
   |  dS )ag  
        Returns a template to be used when rendering ``history_view``. If a
        template is specified by the ``history_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define a ``history_template_name`` property.
        r   r4  rV   r9   r9   r:   r=    s    z#SnippetViewSet.get_history_templatec                 C   s   |   S )ai  
        A template to be used when rendering ``inspect_view``.

        Default: if :attr:`template_prefix` is specified, an ``inspect.html``
        template in the prefix directory and its ``{app_label}/{model_name}/``
        or ``{app_label}/`` subdirectories will be used. Otherwise, the
        ``inspect_view_class.template_name`` will be used.
        )get_inspect_templaterV   r9   r9   r:   inspect_template_name  s    
z$SnippetViewSet.inspect_template_namec                 C   s   | j d| jjdS )ah  
        Returns a template to be used when rendering ``inspect_view``. If a
        template is specified by the ``inspect_template_name`` attribute, that will
        be used. Otherwise, a list of preferred template names are returned.

        **Deprecated** - the preferred way to customise this is to define an ``inspect_template_name`` property.
        r   r   )r   inspect_view_classrr   rV   r9   r9   r:   r?    s    z#SnippetViewSet.get_inspect_templatec                 C   s    | j r| j S d| j d| j S )z
        Returns the URL namespace for the admin URLs for this model.

        **Deprecated** - the preferred way to customise this is to define a ``url_namespace`` property.
        Zwagtailsnippets_rj   )admin_url_namespacer   r7   rV   r9   r9   r:   r     s    z&SnippetViewSet.get_admin_url_namespacec                 C   s*   | j r| j  dS d| j d| j S )z
        Returns the base path for the admin URLs for this model.
        The returned string must not begin or end with a slash.

        **Deprecated** - the preferred way to customise this is to define a ``url_prefix`` property.
        /z	snippets/)base_url_pathstripr   r7   rV   r9   r9   r:   r     s    z"SnippetViewSet.get_admin_base_pathc                 C   s    | j r| j S d| j d| j S )zDReturns the URL namespace for the chooser admin URLs for this model.Zwagtailsnippetchoosers_rj   )chooser_admin_url_namespacer   r7   rV   r9   r9   r:   r     s    z.SnippetViewSet.get_chooser_admin_url_namespacec                 C   s*   | j r| j  dS d| j d| j S )z
        Returns the base path for the chooser admin URLs for this model.
        The returned string must not begin or end with a slash.
        rC  zsnippets/choose/)chooser_base_url_pathrE  r   r7   rV   r9   r9   r:   r!     s    z*SnippetViewSet.get_chooser_admin_base_pathc                 C   s   t dtfd| jiS )NZ_SnippetAdminURLFinderr8   )rd   r1   r8   rV   r9   r9   r:   url_finder_class	  s    zSnippetViewSet.url_finder_classc                 C   s  t d| jddt d| jddt d| jddt d| jd	dt d
| jddt d| jddt d| jddt d| jddg}| j	r|t d| j
ddg7 }| jr|t d| jddg7 }| jr|t d| jddt d| jddg7 }| jr| jr|t d| jddg7 }|t d| jddtd| jddg7 }| jrJ|t d | jd!dt d"| jd#dg7 }| jrv|t d$| jd%dt d&| jd'dg7 }| jr|t d(| jd)dt d*| jd+dt d,| jd-dt d.| jd/dt d0| j d1dg7 }| jr|t d2| j!d3dg7 }|| j" S )4Nr+  r\   )r@   zresults/r   zadd/rZ   zedit/<str:pk>/r   zdelete/<str:pk>/r[   zusage/<str:pk>/r   zhistory/<str:pk>/r   zhistory-results/<str:pk>/Zhistory_resultszcopy/<str:pk>/r%  zinspect/<str:pk>/r   zpreview/r   zpreview/<str:pk>/r   z2history/<str:pk>/revisions/<int:revision_id>/view/r   z4history/<str:pk>/revisions/<int:revision_id>/revert/r   zshistory/(?P<pk>.+)/revisions/compare/(?P<revision_id_a>live|earliest|\d+)\.\.\.(?P<revision_id_b>live|latest|\d+)/$r   z8history/<str:pk>/revisions/<int:revision_id>/unschedule/r   zunpublish/<str:pk>/r   zlock/<str:pk>/r   zunlock/<str:pk>/r   z@workflow/action/<str:pk>/<slug:action_name>/<int:task_state_id>/r  zMworkflow/collect_action_data/<str:pk>/<slug:action_name>/<int:task_state_id>/r  z'workflow/confirm_cancellation/<str:pk>/r   zworkflow_history/<str:pk>/r   z9workflow_history/<str:pk>/detail/<int:workflow_state_id>/r  z(workflow/preview/<str:pk>/<int:task_id>/Zworkflow_preview)#r
   Z
index_viewZindex_results_viewZadd_viewZ	edit_viewZdelete_viewZ
usage_viewZhistory_viewZhistory_results_viewZcopy_view_enabledr  Zinspect_view_enabledZinspect_viewr   r  r  r   r   r   r   r   r   r   r   r   r  r
  r   r  r  r  r  r  r  _legacy_urlpatterns)rG   Zurlpatternsr9   r9   r:   get_urlpatterns  s    			zSnippetViewSet.get_urlpatternsc                 C   s"   t d| jt d| jt d| jgS )Nz	<str:pk>/z<str:pk>/delete/z<str:pk>/usage/)r
   Zredirect_to_edit_viewZredirect_to_delete_viewr  rV   r9   r9   r:   rI    s    


z"SnippetViewSet._legacy_urlpatternsc                    s<   t   }|r|S |  }t| j|d}t|}|| jS )z
        Like :meth:`ModelViewSet.get_edit_handler()
        <wagtail.admin.viewsets.model.ModelViewSet.get_edit_handler>`,
        but falls back to extracting panel definitions from the model class
        if no edit handler is defined.
        )exclude)rB   get_edit_handlerZget_exclude_form_fieldsr   r8   r   Zbind_to_model)rG   r   rK  panelsrK   r9   r:   rL    s    
zSnippetViewSet.get_edit_handlerc                 C   s   t | j d S rA   )r%   registerr#  rV   r9   r9   r:   register_chooser_viewset  s    z'SnippetViewSet.register_chooser_viewsetc                    s    fdd}t |d d S )Nc                    s   t  jdS )NZsnippets)r   r8   )Zapp_configsrJ   rV   r9   r:   snippets_model_check  s    zASnippetViewSet.register_model_check.<locals>.snippets_model_checkrM  )r   rN  )rG   rP  r9   rV   r:   register_model_check  s    z#SnippetViewSet.register_model_checkc                 C   sD   t  }| j|v r$td| jj d|| j |jdd d d S )NzThe z) model is already registered as a snippetc                 S   s   | j jS rA   )rP   Zverbose_name)xr9   r9   r:   re     rf   z7SnippetViewSet.register_snippet_model.<locals>.<lambda>)rm   )r2   r8   r   rt   r   sort)rG   Zsnippet_modelsr9   r9   r:   register_snippet_model  s    
z%SnippetViewSet.register_snippet_modelc                    s.   t    | | j_|   |   |   d S rA   )rB   on_registerr8   r]   rO  rQ  rT  rV   rK   r9   r:   rU    s
    
zSnippetViewSet.on_register)rt   ru   rv   __doc__r8   r"  rB  rD  rF  rG  ry   Zindex_view_classr   Zadd_view_classr   r  r   r   r   Zdelete_view_classr   Zusage_view_classr   Zhistory_view_classr   rA  r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r	  r   r  r   r  r   r  r   r  r   r  r   r  r4   r  Ztemplate_prefixr   r   r   r   propertyr   r^   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r#  r$  r  r&  r(  r'  r*  r)  r-  r,  r/  r.  r0  r   ra   r2  r1  r6  r5  r8  r7  r:  r9  r<  r;  r>  r=  r@  r?  r   r   r   r!  rH  rJ  rI  rL  rO  rQ  rT  rU  rx   r9   r9   rK   r:   r     s  









	














	




	














	
r

	r   c                       s    e Zd ZdZ fddZ  ZS )SnippetViewSetGroupz
    A container for grouping together multiple
    :class:`~wagtail.snippets.views.snippets.SnippetViewSet` instances.

    All attributes and methods from
    :class:`~wagtail.admin.viewsets.model.ModelViewSetGroup` are available.
    c                    s2   t | dt| j}| jD ]
}||_qt   d S )Nr   )r   r   r   itemsr   rB   r   )rG   r   itemrK   r9   r:   r     s    
zSnippetViewSetGroup.__init__)rt   ru   rv   rV  r   rx   r9   r9   rK   r:   rX    s   rX  N)vwarningsr   Zdjango.appsr   Zdjango.contrib.admin.utilsr   Zdjango.corer   Zdjango.core.exceptionsr   r   Zdjango.httpr   Zdjango.shortcutsr	   Zdjango.urlsr
   r   r   r   Zdjango.utils.functionalr   Zdjango.utils.textr   Zdjango.utils.translationr   rj   r   Zwagtailr   Zwagtail.admin.checksr   Zwagtail.admin.panelsr   r   Zwagtail.admin.ui.componentsr   Zwagtail.admin.ui.side_panelsr   r   Zwagtail.admin.ui.tablesr   r   r   r   Zwagtail.admin.viewsr   Zwagtail.admin.views.genericr   r   r    Z'wagtail.admin.views.generic.permissionsr!   Z#wagtail.admin.views.generic.previewr"   r#   r$   Zwagtail.admin.viewsetsr%   Zwagtail.admin.viewsets.modelr&   r'   Zwagtail.admin.widgets.buttonr(   r)   Zwagtail.modelsr*   r+   r,   r-   r.   Zwagtail.permissionsr/   Zwagtail.snippets.action_menur0   Zwagtail.snippets.modelsr1   r2   Zwagtail.snippets.side_panelsr3   Zwagtail.snippets.views.chooserr4   Zwagtail.utils.deprecationr5   r;   ZBaseListingViewr<   ZIndexViewOptionalFeaturesMixinry   Z#CreateEditViewOptionalFeaturesMixinr   ZCopyViewMixinr   r   r   r   r   r   r   r   r   r   r   r   r   r   ZWorkflowActionr   ZCollectWorkflowActionDatar   ZConfirmWorkflowCancellationr   ZPreviewRevisionForTaskr   r   r   r   rX  r9   r9   r9   r:   <module>   s   QD*6

      