U
     f                     @   sh   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 d dl	m
Z
mZ G dd deZdd	 ZdS )
    N)List)
AppCommand)color_style)_make_writeablesignalcommandc                       sB   e Zd ZU dZg Zee ed< dZ fddZ	e
dd Z  ZS )CommandzfCreates a Django management command directory structure for the given app name in the app's directory.requires_system_checksTc                    sN   t  | |jddddddd |jdd	dd
ddd |jddddd d S )Nz--namez-nstorecommand_namesamplez*The name to use for the management command)actiondestdefaulthelpz--basez-bbase_commandZBasezdThe base class used for implementation of this command. Should be one of Base, App, Label, or NoArgsz	--dry-run
store_trueFz Do not actually create any files)r   r   r   )superadd_argumentsadd_argument)selfparser	__class__ X/tmp/pip-unpacked-wheel-1isl55vw/django_extensions/management/commands/create_command.pyr      s.             zCommand.add_argumentsc                 K   s   |}t d|jf| d S )NZcommand_template)copy_templatepath)r   argsoptionsZappr   r   r   handle_app_config&   s    zCommand.handle_app_config)__name__
__module____qualname__r   r   r   str__annotations__Zcan_import_settingsr   r   r   __classcell__r   r   r   r   r      s   
r   c                 K   sD  ddl }t }t|ddd }t|ddd }|d d	|d
   }}|d }	|d }
tj|jd d| }t|D ]\}}}|t|d d }|rtj	tj||s|	st
tj|| t|D ]\}}|dr||= q|D ]N}|ds|dr
qtj||}tj|||d|d}tj	|rtj|||d}tj	|r|
dkrt|d|  q|
dkrt|d|  t|dL}| }|d|}|d|}|	st|d}|| W 5 Q R X W 5 Q R X |	szt|| t| W q tk
r:   tjd|  Y qX qqtdS )z=Copy the specified template directory to the copy_to locationr   NERRORc                 S   s   | S Nr   xr   r   r   <lambda>1       zcopy_template.<locals>.<lambda>SUCCESSc                 S   s   | S r'   r   r(   r   r   r   r*   2   r+   r
   z	%sCommandr   dry_run	verbosityconf   .)z.pycz.pyo)z	.DS_Store__pycache__r   z.tmplz%s already existsz%srz{{ command_name }}z{{ base_command }}wzlNotice: Couldn't set permission bits on %s. You're probably using an uncommon filesystem setup. No problem.
)django_extensionsr   getattrosr   join__path__walklenexistsmkdir	enumerate
startswithendswithreplacerstripprintopenreadwriteshutilcopymoder   OSErrorsysstderr)Ztemplate_nameZcopy_tor   r5   styler&   r,   r
   r   r-   r.   Ztemplate_dirdsubdirsfilesZrelative_dirisubdirfZpath_oldZpath_newZfp_origdataZfp_newr   r   r   r   ,   sT    


r   )r7   rJ   rG   typingr   Zdjango.core.management.baser   Zdjango.core.management.colorr   Z"django_extensions.management.utilsr   r   r   r   r   r   r   r   <module>   s   