o
    h9                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ejdd ZdZeek rCejdjee   ed dd
dZG dd dZG dd deZG dd deZG dd deZe e e dZdd Zdd Zdd Zdd Zedkre  dS dS )    N)ArgumentParser)unified_diff)ManagementUtility   )      zOThis version of Wagtail requires Python {}.{} or above - you are running {}.{}
   sc                 C   s   | dkrdS |S )Nr     )valueargr   r   S/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/bin/wagtail.py	pluralize   s   r   c                   @   s2   e Zd ZdZd
ddZdd Zdd Zdd	 ZdS )CommandNc                 C   sB   |d u rd }nt   d| }tt| dd d|d}| | |S )N descriptionF)r   add_helpprog)	prog_namer   getattradd_arguments)selfcommand_namer   parserr   r   r   create_parser   s   
zCommand.create_parserc                 C   s   d S Nr   r   r   r   r   r   r   ,   s   zCommand.add_argumentsc                 C   s   | j |d}|  d S )N)r   )r   
print_help)r   r   r   r   r   r   r   /   s   zCommand.print_helpc                 C   s8   |   }|tjdd  }t|}| jdi | d S )Nr   r   )r   
parse_argssysargvvarsrun)r   r!   r   optionsoptions_dictr   r   r   execute3   s   zCommand.executer   )__name__
__module____qualname__r   r   r   r   r&   r   r   r   r   r      s    
r   c                   @   s2   e Zd ZdZdd Zdd Zdd Zdd	d
ZdS )CreateProjectz:Creates the directory structure for a new Wagtail project.c                 C   s   |   | _d S r   )get_default_template_pathdefault_template_path)r   r   r   r   __init__=   s   zCreateProject.__init__c                 C   s4   |j ddd |j dddd |j dd	| jd
 d S )Nproject_namezName for your Wagtail project)helpdest_dir?z8Destination directory inside which to create the projectnargsr/   z
--templatez*The path or URL to load the template from.)r/   default)add_argumentr,   r   r   r   r   r   @   s   
zCreateProject.add_argumentsc                 C   s(   dd l }tj|j}tj|d}|S )Nr   project_template)wagtailospathdirname__file__join)r   r7   wagtail_pathr,   r   r   r   r+   M   s   z'CreateProject.get_default_template_pathNc                 K   s   zt | W n	 ty   Y nw td|  |d }|| jkr"d}td||d  ddd|d  d	d
|g}|r>|| t|}|  tdd|i  d S )Nzx'%s' conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name.templatezthe default Wagtail templatezJCreating a Wagtail project called %(project_name)s using %(template_name)s)r.   template_namezdjango-adminstartprojectz--template=z--ext=html,rstz--name=Dockerfilez*Success! %(project_name)s has been createdr.   )	
__import__ImportErrorr    exitr,   printappendr   r&   )r   r.   r0   r$   r?   utility_argsutilityr   r   r   r#   T   sD   

	
zCreateProject.run)NN)r'   r(   r)   r   r-   r   r+   r#   r   r   r   r   r*   :   s    r*   c                   @   sN  e Zd ZdZeddfeddfeddfedd	fed
dfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfed d!fed"d#fed$d%fed&dfed'd(fed)d*fgZd+d, Z	-	.	.	-	-d9d/d0Zd1d2 Z	d:d3d4Z
d5d6 Zd7d8 Zd-S );UpdateModulePathsz=Update a Wagtail project tree to use Wagtail 2.x module pathsz\bwagtail\.wagtailcore\br7   z\bwagtail\.wagtailadmin\bzwagtail.adminz\bwagtail\.wagtaildocs\bzwagtail.documentsz\bwagtail\.wagtailembeds\bzwagtail.embedsz\bwagtail\.wagtailimages\bzwagtail.imagesz\bwagtail\.wagtailsearch\bzwagtail.searchz\bwagtail\.wagtailsites\bzwagtail.sitesz\bwagtail\.wagtailsnippets\bzwagtail.snippetsz\bwagtail\.wagtailusers\bzwagtail.usersz\bwagtail\.wagtailforms\bzwagtail.contrib.formsz\bwagtail\.wagtailredirects\bzwagtail.contrib.redirectsz*\bwagtail\.contrib\.wagtailfrontendcache\bzwagtail.contrib.frontend_cachez)\bwagtail\.contrib\.wagtailroutablepage\bzwagtail.contrib.routable_pagez-\bwagtail\.contrib\.wagtailsearchpromotions\bz!wagtail.contrib.search_promotionsz%\bwagtail\.contrib\.wagtailsitemaps\bzwagtail.contrib.sitemapsz'\bwagtail\.contrib\.wagtailstyleguide\bzwagtail.contrib.styleguidez\bwagtail\.tests\bzwagtail.testz\bwagtail\.core\.utils\bzwagtail.coreutilsz\bwagtail\.core\bz!\bwagtail\.admin\.edit_handlers\bzwagtail.admin.panelsz*\bwagtail\.contrib\.forms\.edit_handlers\bzwagtail.contrib.forms.panelsc                 C   s^   |j dddd |j ddddd	 |j d
ddd |j dddddd |j dddddd d S )N	root_pathr1   zPath to your project's rootr2   z--list
store_true
list_filesz8Show the list of files to change, without modifying them)actiondestr/   z--diffz@Show the changes that would be made, without modifying the files)rL   r/   z--ignore-dirrE   ignored_dirsNAMEzIgnore files in this directory)rL   rM   metavarr/   z--ignore-fileignored_patternsz0Ignore files with this name (supports wildcards))r5   r   r   r   r   r      s4   
zUpdateModulePaths.add_argumentsNFc                    sj  |d u rt  }dd |pg D }|d u rg }d}d}t |D ]p\}	}
}t j|	t j  t fdd|D r:q |D ]S dsFq<tfdd|D rRq<t j	|	}t jj
||d}|d	7 }|ro| j||d
}n|rw| |}n| |}|rtd||t|f  |r|d	7 }q<q |s|rtd|t||t|f  d S td|t||t|f  d S )Nc                 S   s   g | ]}t j|t j qS r   )r8   r9   abspathsep).0dir_pathr   r   r   
<listcomp>   s    z)UpdateModulePaths.run.<locals>.<listcomp>r   c                 3   s    | ]}  |V  qd S r   )
startswith)rT   ignored_dir)dirpath_with_slashr   r   	<genexpr>   s
    
z(UpdateModulePaths.run.<locals>.<genexpr>z.pyc                 3   s    | ]	}t   |V  qd S r   )fnmatch)rT   pattern)filenamer   r   rZ      s    
)startr   )relative_pathz%s - %d change%sz,
Checked %d .py file%s, %d file%s to update.z*
Checked %d .py file%s, %d file%s updated.)r8   getcwdwalkr9   rR   rS   anylowerendswithr<   relpath
_show_diff_count_changes_rewrite_filerD   r   )r   rI   rK   diffrN   rQ   absolute_ignored_dirschecked_file_countchanged_file_countdirpathdirnames	filenamesr9   r_   change_countr   )rY   r]   r   r#      sv   

zUpdateModulePaths.runc                 C   s"   | j D ]\}}t|||}q|S r   )REPLACEMENTSresub)r   liner\   replr   r   r   _rewrite_line  s   zUpdateModulePaths._rewrite_linec              
   C   s   d}d}g }g }t |dd@}|D ]5}z|d}	W n ty.   d}|jddd }
}	Y nw | |	}
||	 ||
 |
|	krF|d	7 }qW d    n1 sQw   Y  |r`tjd
|  |rv|pe|}tj	t
||d| d| d |S )Nr   Frbmodeutf-8Treplace)errorsr   SWarning - %s is not a valid UTF-8 file. Lines with decode errors have been ignored
z	%s:beforez%s:after)fromfiletofile)opendecodeUnicodeDecodeErrorrv   rE   r    stderrwritestdout
writelinesr   )r   r]   r_   rp   found_unicode_errororiginalupdatedfraw_original_lineoriginal_linert   r   r   r   rf     sN   


	zUpdateModulePaths._show_diffc              
   C   s   d}d}t |dd-}|D ]"}z|d}W n ty!   d}Y qw | |}||kr/|d7 }qW d    n1 s:w   Y  |rItjd|  |S )	Nr   Frw   rx   rz   Tr   r}   )r   r   r   rv   r    r   r   r   r]   rp   r   r   r   r   rt   r   r   r   rg   K  s,   
z UpdateModulePaths._count_changesc              
   C   s   d}d}t j|dddG}|D ]<}z|d}W n ty)   tj| d}Y qw | |}tdkr=tj|	d ntj| ||krK|d7 }qW d    n1 sVw   Y  |retj
d	|  |S )
Nr   FTrw   )inplacery   rz   )r      r   r}   )	fileinput	FileInputr   r   r    r   r   rv   CURRENT_PYTHONencoder   r   r   r   r   rh   b  s4   
zUpdateModulePaths._rewrite_file)NFFNNr   )r'   r(   r)   r   rr   compilerq   r   r#   rv   rf   rg   rh   r   r   r   r   rH      s^    ,
O
,rH   c                   @   s   e Zd ZdZdd ZdS )Versionz+List which version of Wagtail you are usingc                 C   s&   dd l }||j}td|  d S )Nr   zYou are using Wagtail )r7   get_versionVERSIONrD   )r   r7   versionr   r   r   r#     s   zVersion.runN)r'   r(   r)   r   r#   r   r   r   r   r     s    r   )r^   updatemodulepathsz	--versionc                   C   s   t jtjd S )Nr   )r8   r9   basenamer    r!   r   r   r   r   r     s   r   c                  C   sJ   t dt   t d tt D ]\} }t d| d |j  qd S )Nz?Type '%s help <subcommand>' for help on a specific subcommand.
zAvailable subcommands:
z       )rD   r   sortedCOMMANDSitemsljustr   )namecmdr   r   r   
help_index  s   r   c                 C   s(   t d|   t dt   td d S )NzUnknown command: '%s'zType '%s help' for usage.r   )rD   r   r    rC   )commandr   r   r   unknown_command  s   r   c                  C   s   zt jd } W n ty   t  Y d S w | dkrJzt jd }W n ty-   t  Y d S w zt| }W n tyB   t| Y d S w || d S zt|  }W n ty^   t|  Y d S w |t j d S )Nr   r/   r   )	r    r!   
IndexErrorr   r   KeyErrorr   r   r&   )r   help_command_namer   r   r   r   main  s8   
r   __main__)r	   )r   r[   r8   rr   r    argparser   difflibr   django.core.managementr   version_infor   REQUIRED_PYTHONr   r   formatrC   r   r   r*   rH   r   r   r   r   r   r   r'   r   r   r   r   <module>   sF   

F  	 
