o
    wvXj³  ã                   @   sX   d Z ddlmZmZmZ ddlZddlmZ ddlm	Z	 ddl
mZ G dd„ de	ƒZdS )	zGThe ``celery upgrade`` command, used to upgrade from previous versions.é    )Úabsolute_importÚprint_functionÚunicode_literalsN)Údefaults)ÚCommand)Úpass1c                   @   sh   e Zd ZdZdhZdd„ Zdd„ Zdd„ Z			
ddd„Zdd„ Z	ddd„Z
eejfdd„Zddd„Zd	S )Úupgradez!Perform upgrade between versions.Úsettingsc                 C   sD   |  d¡}|jddddd� |jddddd� |jd	ddd
d� d S )NzUpgrading Optionsz--djangoÚ
store_trueFzUpgrade Django project)ÚactionÚdefaultÚhelpz--compatz Maintain backwards compatibilityz--no-backupzDont backup original files)Úadd_argument_groupÚadd_argument)ÚselfÚparserÚgroup© r   úO/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/bin/upgrade.pyÚadd_arguments   s   
þþ
þzupgrade.add_argumentsc                 C   s   dS )Nz0%(prog)s <command> settings [filename] [options]r   )r   Úcommandr   r   r   Úusage   s   zupgrade.usagec                 O   sT   z|d }W n t y   |  d¡‚w || jvr |  d |¡¡‚t| |ƒ|i |¤ŽS )Nr   z5missing upgrade type: try `celery upgrade settings` ?zunknown upgrade type: {0})Ú
IndexErrorÚ
UsageErrorÚchoicesÚformatÚgetattr)r   ÚargsÚkwargsr   r   r   r   Úrun"   s   ÿÿ
zupgrade.runNFc                    sà   |d u r	ˆ  d¡‚ˆ |¡}|s|rˆjnt‰ td |¡ˆjd� ‡ ‡fdd„|D ƒ}tdd„ |D ƒƒrg|s;ˆ |¡ t	 
|dd	¡�}	|D ]	\}
}|	 |¡ qEW d   ƒ n1 sYw   Y  td
ˆjd� d S tdˆjd� d S )Nz$missing settings filename to upgradezprocessing {0}...©Úfilec                    s   g | ]}ˆ  |ˆ ¡‘qS r   )Ú_to_new_key©Ú.0Úline©Ú	keyfilterr   r   r   Ú
<listcomp>6   s    ÿz$upgrade.settings.<locals>.<listcomp>c                 s   s   � | ]}|d  V  qdS )r   Nr   )r$   Únr   r   r   Ú	<genexpr>9   s   € z#upgrade.settings.<locals>.<genexpr>Úwúutf-8z'Changes to your setting have been made!z(Does not seem to require any changes :-))r   Ú_slurpÚ_compat_keyr   Úprintr   ÚstderrÚanyÚ_backupÚcodecsÚopenÚwriteÚstdout)r   r   ÚfilenameÚ	no_backupÚdjangoÚcompatr   ÚlinesÚ	new_linesÚwrite_fhÚ_r%   r   r&   r   r	   ,   s,   

ÿ
ÿÿ
ÿ
ÿzupgrade.settingsc                 C   s@   t  |dd¡�}dd„ |D ƒW  d   ƒ S 1 sw   Y  d S )NÚrr,   c                 S   s   g | ]}|‘qS r   r   r#   r   r   r   r(   G   s    z"upgrade._slurp.<locals>.<listcomp>)r3   r4   )r   r7   Úread_fhr   r   r   r-   E   s   $ÿzupgrade._slurpú.origc              	   C   s¶   g }d  ||g¡}td |¡| jd� t |dd¡�7}t |dd¡�}|D ]}| |¡ | |¡ q%W d   ƒ n1 s<w   Y  W d   ƒ |S W d   ƒ |S 1 sTw   Y  |S )NÚ zwriting backup to {0}...r    r?   r,   r+   )Újoinr/   r   r0   r3   r4   r5   Úappend)r   r7   Úsuffixr;   Úbackup_filenamer@   Ú	backup_fhr%   r   r   r   r2   I   s&   
ÿ
þÿ
ÿü
ÿûzupgrade._backupc                 C   sR   t t|dd„ d�ƒD ]}| |||| ƒ¡}||kr$d|vr$d|f  S q
d|fS )Nc                 S   s   t | ƒS )N)Úlen)Úxr   r   r   Ú<lambda>X   s    z%upgrade._to_new_key.<locals>.<lambda>)ÚkeyÚCELERY_CELERYé   r   )ÚreversedÚsortedÚreplace)r   r%   r'   ÚsourceÚold_keyÚnew_liner   r   r   r"   U   s   €zupgrade._to_new_keyÚCELERYc                 C   s$   |  ¡ }| |¡sd ||g¡}|S )Nr>   )ÚupperÚ
startswithrC   )r   rK   Ú	namespacer   r   r   r.   ^   s   
zupgrade._compat_key)NFFF)rA   )rT   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r	   r-   r2   r   r   Ú_TO_NEW_KEYr"   r.   r   r   r   r   r      s    

ÿ
	r   )r[   Ú
__future__r   r   r   r3   Ú
celery.appr   Úcelery.bin.baser   Úcelery.utils.functionalr   r   r   r   r   r   Ú<module>   s    