o
    Jho(                     @   sl  d dl m Z  d dlZ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 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 d dlmZ ejejejejdZeeZeeZdZG dd deZ	d"dej ej!ej"ej#f fddZ$dd Z%dd Z&dd Z'dd Z(dd Z)d"ddZ*e+d kre,e*ej-d!d  dS dS )#    )getpassN)connectionsdefault_migration_table)logger)utils)CONFIG_FILENAME)find_config)read_config)save_config)config_changed)update_argparser_defaults)r            z.yoyo-migratec                   @   s   e Zd ZdS )InvalidArgumentN)__name__
__module____qualname__ r   r   S/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/yoyo/scripts/main.pyr   /   s    r   returnc              	   C   s   dddddd}t  \}}}|| \}}|jpt }t|jr!|nd}i }	| D ]\}
}zt||d|
|	|
< W q* tj	yD   Y q*w d|	v rQ|	d 
 |	d< t||	 t||	 |j D ]}t||	 q`|| }|j|| d j |||fS )	z
    Parse the config file and command line args.

    :return: tuple of ``(parsed config file, argument parser, parsed arguments)``
    
getbooleangetgetint)
batch_modesourcesdatabase	verbositymigration_tableNDEFAULTr   r   )make_argparserparse_known_argsconfigr	   r
   use_config_fileitemsgetattrconfigparserNoOptionErrorsplitr   choicesvalues
parse_args__dict__update)argvconfig_argsglobalparser	argparser
subparsersglobal_args_
configfiler#   defaultsargnamegettersubpargsr   r   r   r,   3   s4   




r,   c                  C   s   t jdd} | jddddd | jdd	d
tdd | jddddtj  dd | jddddddd t jd| gd}|jdd}ddlm	} ddlm
} ddlm} || | || | || | | ||fS ) zY
    Return a top-level ArgumentParser parser object,
    plus a list of sub_parsers
    F)add_helpz--configz-cNzPath to config file)defaulthelpz-vr   countzAVerbose output. Use multiple times to increase level of verbosity)destactionr=   r>   z-bz--batchr   
store_truez-Run in batch mode. Turns off all user promptsz--no-config-filez
--no-cacher$   store_falseTz%Don't look for a yoyo.ini config fileyoyo)progparentszCommands help)r>   r   )migrate)newmigration)init)argparseArgumentParseradd_argumentmin_verbositysysstdoutisattyadd_subparsers rG   rH   rI   install_argparsers)global_parserr2   r3   rG   rH   rI   r   r   r   r!   j   sH   
	
r!   c                 C   s   t jt|  d dS )zI
    Configure the python logging module with the requested loglevel
    levelN)loggingbasicConfigverbosity_levelsrU   r   r   r   configure_logging   s   rZ   c                 C   s"   t d|rt| | d S d S )NzSave migration configuration to {}?
This is saved in plain text and contains your database password.

Answering 'y' means you do not have to specify the migration source or database connection for future runs)r   confirmformatr   )r#   pathr   r   r   prompt_save_config   s   r^   c              	      s^  t |D ]}tj|t}tj|sqt|d fdd	}|dd |dddd  | jp1t}| j	smt
d	||rjt | zt
d
|rUt| W  dS W  dS  tyi   td| Y  dS w  dS td| z| jp|dd| _W n
 tjy   Y nw zt| dsdd| _W  dS W  dS  tjy   Y  dS w d S )Nr    c                    sn   z	  || W d S  tjy6   z || }W n tjy%   Y Y d S w |r,||} ||| Y d S w N)r   r'   r(   set)oldnamenewname	transformsectionvaluer#   legacy_configr   r   transfer_setting   s   z/upgrade_legacy_config.<locals>.transfer_settingdburir   r   c                 S   s   | dkrt S | S )NNoner   )vr   r   r   <lambda>   s    z'upgrade_legacy_config.<locals>.<lambda>z*Move legacy configuration in {!r} to {!r}?z%Delete legacy configuration file {!r}zGCould not remove %r. Manually remove this file to avoid future warningsTzaFound legacy configuration in %r. Run yoyo in interactive mode to update your configuration filesF)Nr    )reversedosr]   joinLEGACY_CONFIG_FILENAMEisfiler
   r#   r   r   r   r[   r\   r   unlinkOSErrorr   warnr   r   r'   r(   varsr   )r;   r#   r   dirr]   rh   config_pathr   rf   r   upgrade_legacy_config   sp   




rx   c                 C   s   z| j }W n ty   |dd}Y nw z| j}W n ty8   z|dd}W n tjy5   t}Y nw Y nw |d u rAtdz| jrWt	d| }t
|}|j|dj}W n	 tya   Y nw t
||S )Nr    r   r   zPlease specify a database urizPassword for %s: )password)r   AttributeErrorr   r   r'   r(   r   r   prompt_passwordr   r   	parse_uri_replaceuriget_backend)r;   r#   ri   r   ry   parsedr   r   r   r      s6   


r   c           
   
   C   s  t | \}}}t|dd d u r|tj |d | g ko&|dg k}t|dd }|j}t	t
tt|}t| t|drN|ddd|j t|dra|dd|jdd t|d	rp|dd	|j |dd
t|d
r}dnd |ddtt|d |rt|||rt| S zt|dr|||}W n ty } z||jd  W Y d }~nd }~ww |r|jr|js|jpt }	t!||	rt"||	 |S )Nfuncr   r    r    r   %z%%r   r   onoffr   r   )#r,   r&   print_usagerN   stderrexitsectionsr%   r   minmax_verbositymaxrM   rZ   ru   r   r`   ro   r   r   replacer   strrx   mainr   r   errorr;   r$   r   r#   r   r   r^   )
r/   r#   r2   r;   config_is_emptyr   r   exitcodeeconfig_filer   r   r   r     sJ   



r   __main__r   r_   ).r   rJ   r'   rW   rn   rN   typingtrD   r   r   r   r   yoyo.configr   r	   r
   r   r   r   ERRORWARNINFODEBUGrY   r   rM   r   r   rp   	Exceptionr   TupleConfigParserrK   	Namespacer,   r!   rZ   r^   rx   r   r   r   r   r/   r   r   r   r   <module>   sN   
70E
/