a
    Dg                     @   sj   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 G dd deZdddZd	S )    )settings)BaseCommand)Q)ProtectedError)timezone)RevisionWorkflowStatec                   @   s    e Zd ZdZdd Zdd ZdS )CommandzlDelete revisions which are not the latest revision, published or scheduled to be published, or in moderationc                 C   s4   |j dtdd |j dddd |j ddd	d d S )
Nz--daysz4Only delete revisions older than this number of days)typehelpz--pages
store_truez$Only delete revisions of page models)actionr   z--non-pagesz(Only delete revisions of non-page models)add_argumentint)selfparser r   j/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/management/commands/purge_revisions.pyadd_arguments   s    zCommand.add_argumentsc                 O   sv   | d}| d}| d}t|||d\}}|rf| j| jd|  | j| jd|  n| jd d S )Ndayspages	non_pages)r   r   r   z!Successfully deleted %s revisionszYIgnored %s revisions because one or more protected relations exist that prevent deletion.zNo revisions deleted)getpurge_revisionsstdoutwritestyleSUCCESS)r   argsoptionsr   r   r   Zrevisions_deletedprotected_error_countr   r   r   handle   s(    



zCommand.handleN)__name__
__module____qualname__r   r   r!   r   r   r   r   r	   
   s   r	   NTc           	   	   C   s   ||krt j }n|r$t j }n|r2t j }|jdd}ttddrh|tt	j
dtt	jdB }| rt tj| d }|j|d}d}d}| D ]<}| sz|  |d	7 }W q ty   |d	7 }Y q0 q||fS )
NF)Zapproved_go_live_at__isnullZWAGTAIL_WORKFLOW_ENABLEDT)Z#task_states__workflow_state__status)r   )Zcreated_at__ltr      )r   objectsallZpage_revisionsZnot_page_revisionsexcludegetattrr   r   r   ZSTATUS_IN_PROGRESSZSTATUS_NEEDS_CHANGESr   now	timedeltafilteriteratorZis_latest_revisiondeleter   )	r   r   r   r&   Zpurgeable_revisionsZpurgeable_untilZdeleted_revisions_countr    revisionr   r   r   r   7   s8    


r   )NTT)Zdjango.confr   Zdjango.core.management.baser   Zdjango.db.modelsr   Zdjango.db.models.deletionr   Zdjango.utilsr   Zwagtail.modelsr   r   r	   r   r   r   r   r   <module>   s   -