U
    |hq                     @   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k
r(   tY nX |t kr8t|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   g/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/snippets/views/snippets.py!get_snippet_model_from_url_params8   s    

r;   c                       s   e Zd ZedZ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dd Zedd Z fddZdd Z  ZS )ModelIndexViewSnippetssnippetwagtailsnippets:indexnameTc                    s"   t  j|f|| |  | _d S N)supersetup_get_snippet_typessnippet_typesselfrequestargskwargs	__class__r9   r:   rC   R   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>W   s   
z5ModelIndexView._get_snippet_types.<locals>.<listcomp>)r2   rG   r9   rT   r:   rD   V   s    z!ModelIndexView._get_snippet_typesc                    s   | j s
tt j|f||S rA   )rE   r   rB   dispatchrF   rK   r9   r:   rW   b   s    zModelIndexView.dispatchc                 C   s   | j dtddg S )N r=   rN   label)breadcrumbs_items_rV   r9   r9   r:   get_breadcrumbs_itemsg   s    z$ModelIndexView.get_breadcrumbs_itemsc                 C   s0   |j j| jjddddhr,t|j dS d S )Naddchangedeleteviewlist)snippet_viewsetpermission_policyZuser_has_any_permissionrH   userr   get_url_name)rG   r8   r9   r9   r:   rO   j   s
    
zModelIndexView.get_list_urlc                 C   s   d S rA   r9   rV   r9   r9   r:   get_querysetq   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>z       z(ModelIndexView.columns.<locals>.<lambda>)rZ   get_urlsort_keyrM   Z	Instances)rZ   rn   )r   r\   r   rV   r9   r9   r:   columnst   s    zModelIndexView.columnsc                    sP   | j d dk}| j dk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   ri   r9   r9   r:   rk      rl   z1ModelIndexView.get_context_data.<locals>.<lambda>)keyr   c                 S   s   | d   S )Nr@   )lowerri   r9   r9   r:   rk      rl   )Zobject_list)ZorderingsortedrE   rB   get_context_data)rG   rJ   r   rE   rK   r9   r:   rt      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_titleheader_iconindex_url_nameZdefault_ordering_show_breadcrumbsrC   rD   rW   r]   rO   rg   r   ro   rt   rw   __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 )
	IndexViewrb   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ft jS )NZbulk_actionsr>   )obj_type)r   rB   ro   rV   rK   r9   r:   ro      s    
zIndexView.columnsc                    s   t  j||ddd iS )NZget_title_idc                 S   s   dt | j dS )NZsnippet__title)r   pk)instancer9   r9   r:   rk      rl   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 ]N}z|||| jj W qj t	k
r   t
dtdd |||| jji  Y qjX 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_hooksre   
isinstancer(   append	TypeErrorr   r5   r)   r\   str)rG   r   Zmore_buttonsZnext_urlZlist_buttonshookZhook_buttonsZbuttonr9   r9   r:   get_list_buttons   s@    

 
zIndexView.get_list_buttons)
rx   ry   rz   	view_namer   r   ro   r   r   r~   r9   r9   rK   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 )
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)ra   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                    s4   t  jf |}|  }|d  |j7  < ||d< |S Nmediaaction_menurB   rt   r   r   rG   rJ   contextr   rK   r9   r:   rt     s
    zCreateView.get_context_datarx   ry   rz   r   rv   r   r   r   r   rt   r~   r9   r9   rK   r:   r      s   r   c                   @   s   e Zd ZdS )CopyViewNrx   ry   rz   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)ra   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   $  s:        zEditView.get_side_panelsc                    s4   t  jf |}|  }|d  |j7  < ||d< |S r   r   r   rK   r9   r:   rt   @  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   K  s    zDeleteView.run_before_hookc                 C   s   |  d| j| jgS )NZafter_delete_snippetr   rV   r9   r9   r:   r   N  s    zDeleteView.run_after_hookN)rx   ry   rz   r   r   r   r9   r9   r9   r:   r   H  s   r   c                   @   s   e Zd ZdZdS )	UsageViewusageNrx   ry   rz   r   r9   r9   r9   r:   r   R  s   r   c                   @   s   e Zd ZdZdS )HistoryViewr   Nr   r9   r9   r9   r:   r   V  s   r   c                   @   s   e Zd ZdZdS )InspectViewinspectNr   r9   r9   r9   r:   r   Z  s   r   c                   @   s   e Zd ZdS )PreviewOnCreateViewNr   r9   r9   r9   r:   r   ^  s   r   c                   @   s   e Zd ZdS )PreviewOnEditViewNr   r9   r9   r9   r:   r   b  s   r   c                   @   s   e Zd ZdZdS )PreviewRevisionViewr_   Nrx   ry   rz   permission_requiredr9   r9   r9   r:   r   f  s   r   c                   @   s(   e Zd ZdZedd Zedd ZdS )RevisionsCompareViewr_   c                 C   s   t dd| jjji S )NzEdit this %(model_name)sr7   r\   r8   rP   verbose_namerV   r9   r9   r:   
edit_labelm  s     zRevisionsCompareView.edit_labelc                 C   s   t dd| jjji S )Nz%(model_name)s historyr7   r   rV   r9   r9   r:   history_labels  s     z"RevisionsCompareView.history_labelN)rx   ry   rz   r   propertyr   r   r9   r9   r9   r:   r   j  s
   
r   c                   @   s   e Zd ZdZdS )UnpublishViewpublishNr   r9   r9   r9   r:   r   z  s   r   c                   @   s   e Zd ZdZdS )RevisionsUnscheduleViewr   Nr   r9   r9   r9   r:   r   ~  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   re   is_superuserr   r   r   r.   current_workflow_taskZuser_can_lockrB   user_has_permissionrG   Z
permissionr   rK   r9   r:   r     s    
  zLockView.user_has_permissionrx   ry   rz   r   r   r~   r9   r9   rK   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   re   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 )WorkflowHistoryViewr_   Nr   r9   r9   r9   r:   r     s   r   c                   @   s   e Zd ZdZdS )WorkflowHistoryDetailViewr_   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 | | jd k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   3  s$    



  zSnippetViewSet.__init__c                 C   s   |   S rA   )get_admin_base_pathrV   r9   r9   r:   
url_prefixI  s    zSnippetViewSet.url_prefixc                 C   s   |   S rA   )get_admin_url_namespacerV   r9   r9   r:   url_namespaceO  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)rj   r   ZRevisionsRevertMixinedit_view_class)rG   revisions_revert_view_classr9   r9   r:   r   V  s    

z*SnippetViewSet.revisions_revert_view_classc                 C   s
   t | jS rA   )r/   r8   rV   r9   r9   r:   rd   g  s    z SnippetViewSet.permission_policyc                    s`   t  jf | d| d| d| d| d| d| d| d| d	| jd

|S )Nrb   list_resultsr   r   revisions_viewr   revisions_comparerevisions_unschedule	unpublish)
r|   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_namer[   )rB   get_common_view_kwargsrf   r[   r   rK   r9   r:   r   k  s"    z%SnippetViewSet.get_common_view_kwargsc                    s   t  jf d| ji|S )Nr   )rB   get_index_view_kwargsrg   r   rK   r9   r:   r   ~  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_kwargsrf   r   rK   r9   r:   r     s
    
z"SnippetViewSet.get_add_view_kwargsc                 K   s   | j f |S rA   )r   r   r9   r9   r:   get_copy_view_kwargs  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_kwargsrf   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|  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_handlerrv   )r   revisions_compare_view_classZ_edit_handlerget_templatesrv   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   ru   )r   revisions_unschedule_view_classr  rv   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   ru   )r   unpublish_view_classr  rv   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_classrf   rV   r9   r9   r:   	lock_view  s    zSnippetViewSet.lock_viewc                 C   s   | j | jf|  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_classrf   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_classrf   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_classrf   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   s0   | j | j| jd| jjd| d| dddS )Nzworkflow_history/indexr   r   workflow_history_detailF)rv   r   Z workflow_history_detail_url_namer}   )r   workflow_history_view_classr  rv   rf   rV   r9   r9   r:   workflow_history_view  s    z$SnippetViewSet.workflow_history_viewc                 C   s.   | j | j| jd| jjd| jd| dddS )Nzworkflow_history/detailr   zlist-ulr   F)rv   Zobject_iconr{   r   r}   )r   "workflow_history_detail_view_classr  rv   iconrf   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   rx   r5   r	   rf   )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   r%  Z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%  5  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:   r1  9  s    zSnippetViewSet.get_iconc                 C   s   |   S rA   )get_menu_labelrV   r9   r9   r:   
menu_labelA  s    zSnippetViewSet.menu_labelc                 C   s   | 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   rQ   r   rV   r9   r9   r:   r2  E  s    zSnippetViewSet.get_menu_labelc                 C   s   |   S rA   )get_menu_namerV   r9   r9   r:   	menu_nameM  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.
        rX   r9   rV   r9   r9   r:   r4  Q  s    zSnippetViewSet.get_menu_namec                 C   s   |   S rA   )get_menu_iconrV   r9   r9   r:   	menu_iconY  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:   r6  ]  s    zSnippetViewSet.get_menu_iconc                 C   s   |   S rA   )get_menu_orderrV   r9   r9   r:   
menu_ordere  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:   r8  i  s    zSnippetViewSet.get_menu_orderc                 C   s   | j S rA   )r   rV   r9   r9   r:   get_menu_item_is_registeredr  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HomerY   r?   r=   )r   r\   rV   r9   r9   r:   r[   u  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:   rg   ~  s    zSnippetViewSet.get_querysetc                 C   s   |   S rA   )get_index_templaterV   r9   r9   r:   index_template_name  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:   r;    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_resultsr>  rV   r9   r9   r:   r?    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   r>  rV   r9   r9   r:   rA    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   r>  rV   r9   r9   r:   rC    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`   r>  rV   r9   r9   r:   rE    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   r>  rV   r9   r9   r:   rG    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_classrv   rV   r9   r9   r:   rI    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_r\   )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_r\   )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.
        rM  zsnippets/choose/)chooser_base_url_pathrO  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   )rj   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 )4NrX   rb   )r@   zresults/r   zadd/r^   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>/r0  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:   rS    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  rU  panelsrK   r9   r:   rV    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_checkrW  )r   rX  )rG   rZ  r9   rV   r:   register_model_check  s    z#SnippetViewSet.register_model_checkc                 C   sD   t  }| j|k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   r   )xr9   r9   r:   rk     rl   z7SnippetViewSet.register_snippet_model.<locals>.<lambda>)rq   )r2   r8   r   rx   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   rc   rY  r[  r^  rV   rK   r9   r:   r_    s
    
zSnippetViewSet.on_register)rx   ry   rz   __doc__r8   r-  rL  rN  rP  rQ  r   Zindex_view_classr   Zadd_view_classr   r  r   r   r   Zdelete_view_classr   Zusage_view_classr   Zhistory_view_classr   rK  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   r   r   rd   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%  r1  r3  r2  r5  r4  r7  r6  r9  r8  r:  r[   rg   r<  r;  r@  r?  rB  rA  rD  rC  rF  rE  rH  rG  rJ  rI  r   r   r+  r,  rR  rT  rS  rV  rY  r[  r^  r_  r~   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__)rx   ry   rz   r`  r   r~   r9   r9   rK   r:   ra    s   ra  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   r\   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IndexViewOptionalFeaturesMixinr   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   ra  r9   r9   r9   r:   <module>   s   UD*6

       