o
    h                     @   sX   d dl Z d dl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S )    N)BaseCommand)models)Q)
CollectionPagec                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )CommandzQChecks for data integrity errors on the page tree, and fixes them where possible.)delete_orphansc                 C   s,   |j dddddd |j ddd	d
dd d S )Nz	--noinputstore_falseinteractiveTzBIf provided, any fixes requiring user interaction will be skipped.)actiondestdefaulthelpz--full
store_truefullFzYIf provided, uses a more thorough but slower method that also fixes path ordering issues.)add_argument)selfparser r   c/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/management/commands/fixtree.pyadd_arguments   s   
zCommand.add_argumentsc                 C   s   dd tt| d S )N[z, ])joinmapstr)r   
numberlistr   r   r   numberlist_to_string   s   zCommand.numberlist_to_stringc              	   K   s   d}t j D ]$}z|j W q |jjy+   | jd|j|j	f  d}|
  Y qw | t dd|| | tddd| d S )NFz4Page %d (%s) is missing a subclass record; deleting.Tpagepages
collectioncollections)r   objectsallspecificspecific_classDoesNotExiststdoutwriteidtitledeletehandle_modelr   )r   optionsany_page_problems_fixedr   r   r   r   handle$   s   

zCommand.handlec                 C   s  | dd}| jd|  | \}}}	}
}|
r&| jd|| |
f  |r5| jd|| |f  |	r|jj|	djddd	}g }|D ]
}|t	|d
 qGt
tj|}tj||}| jd|  |D ]}| jd|j|f  ql| jd | ddrtd| }| d}| jd n| dd}|rt|}|  | jd||dkr|n|f  d}|
s|s|r|jd|d d}|r| \}}}	}
}t|||	|
|fr9| jd |r| jd|| |f  |r| jd|| |f  |	r| jd|| |	f  |
r%| jd|| |
f  |r7| jd|| |f  d S d S |rD| jd d S | jd d S )Nr   Fz Checking %s tree for problems...z&Incorrect depth value found for %s: %sz)Incorrect numchild value found for %s: %s)id__inpathT)flat)path__startswithzOrphaned %s found:z	ID %d: %s r
   zDelete these %s? [y/N] yr   z%d orphaned %s deleted.   )destructive	fix_pathsz.Remaining problems (cannot fix automatically):z+Invalid characters found in path for %s: %sz$Invalid path length found for %s: %szOrphaned %s found: %szAll problems fixed.

zNo problems found.

)getr'   r(   find_problemsr   r"   filtervalues_listappendr   	functoolsreduceoperatoror_r   queryQuerySetr)   inputlower
startswithlenr+   fix_treeany)r   model
model_namemodel_name_pluralany_problems_fixedr-   r8   	bad_alphabad_pathorphans	bad_depthbad_numchildorphan_pathsfilter_conditionsr1   final_filternodes_to_deletenode	yes_or_nor   deletion_countr   r   r   r,   4   s   zCommand.handle_modelN)	__name__
__module____qualname__r   stealth_optionsr   r   r/   r,   r   r   r   r   r      s    r   )r>   r@   django.core.management.baser   	django.dbr   django.db.modelsr   wagtail.modelsr   r   r   r   r   r   r   <module>   s    