o
    Jh7                     @   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mZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ dd Zdd	 Zd
d Zd!ddZdefddZdefddZdefddZdefddZdefddZdefddZdefddZdefddZdd  ZdS )"    N)read_migrationsdefault_migration_table	ancestorsdescendants)topological_sort)InvalidArgumentget_backend)utilsc                 C   s  t jdd}|jdddd |jddd d	d
 |jdddddd |jdddtdd t jdd}|jddddd |jddddd t jd|gd}|jd d!d"dd#d |jd$d%d&dd'd |jd(d)| ||gd*}|jtd(d+ |jd,d-d.d/ |jd0d1| ||gd*}|jtd0d+ |jd2td3d4d5 |jd6d7| ||gd*}|jt	d6d+ |jd8| ||gd9d:}|jt
d8d+ |jd;| ||gd<d:}	|	jtd;d+ |jd=| ||gd>d:}
|
jtd=d+ |jd?| ||gd@d:}|jtd?d+ |jdA| |gdBd:}|jtdAd+ d S )CNF)add_helpsources*z%Source directory of migration scripts)nargshelpz-dz
--databasezIDatabase, eg 'sqlite:///path/to/sqlite.db' or 'postgresql://user@host/db')defaultr   z-pz--prompt-passwordprompt_password
store_truez Prompt for the database password)destactionr   z--migration-tablemigration_tablestorez3Name of table to use for storing migration metadata)r   r   r   r   z-mz--matchz7Select migrations matching PATTERN (regular expression)PATTERN)r   metavarz-rz
--revisionzBApply/rollback migration with id REVISION and all its dependenciesREVISION)r
   parentsz-az--allallzNSelect all migrations, regardless of whether they have been previously appliedz-fz--forceforcez@Force apply/rollback of steps even if previous steps have failedapplyzApply migrations)r   r   )funccommand_namez-1z--onezZApply a single migration. If there are no unapplied migrations, reapply the last migration)r   developzdApply migrations without prompting. If there are no unapplied migrations, reapply the last migrationz-nzAct on the last N migrations   )typer   r   listzuList all available and applied migrations. Each listed migration is prefixed with either A (applied) or U (unapplied)rollbackzRollback migrations)r   r   reapplyz Rollback then reapply migrationsmarkz0Mark migrations as applied, without running themunmarkz4Unmark applied migrations, without rolling them backz
break-lockzBreak migration locks)argparseArgumentParseradd_argumentr   
add_parserset_defaultsr   r   intlist_migrationsr#   r$   r%   r&   
break_lock)global_parser
subparsersstandard_options_parserfilter_parserapply_parserparser_applyparser_developparser_listparser_rollbackparser_reapplyparser_markparser_unmarkparser_break_lock r<   V/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/yoyo/scripts/migrate.pyinstall_argparsers!   s   	r>   c                    s&   |s| S t |j |  fddS )Nc                    s    | j d uS Nidmsearchr<   r=   <lambda>   s    z#filter_migrations.<locals>.<lambda>)recompilerE   filter)
migrationspatternr<   rD   r=   filter_migrations   s   rL   c                    s    s| S |dv s
J  fdd| D }t |dkr td t |dkr6td dd	d
 |D |d }|dkrSt|| }||hB | fdd} | S t|| }||hB | fdd} | S )N>   r   r#   c                    s   g | ]	} |j v r|qS r<   r@   .0rC   )revisionr<   r=   
<listcomp>   s    z*migrations_to_revision.<locals>.<listcomp>r   z!'{}' doesn't match any revisions.r    z:'{}' matches multiple revisions. Please specify one of {}.z, c                 s   s    | ]}|j V  qd S r?   r@   rM   r<   r<   r=   	<genexpr>   s    z)migrations_to_revision.<locals>.<genexpr>r   c                       |  v S r?   r<   rB   target_plus_depsr<   r=   rF          z(migrations_to_revision.<locals>.<lambda>c                    rR   r?   r<   rB   rS   r<   r=   rF      rU   )lenr   formatjoinr   rI   r   )rJ   rO   	directiontargetstargetdepsr<   )rO   rT   r=   migrations_to_revision   s.   



r]   c                 C   sL  | j }| j}|std|s| jtthv rdnd}t| }t|| j}t	|| j
|}|dkr4||}n||}| jsF| j
sFt||| j}| jre| j
se| jse| jtu ret|dkretd |d d }| js|rtd tdtt|dd	 |D ]
}td
j|d q|d| j tt|dd|}tj|dds|g S |S )Nz-Please specify the migration source directoryr   r#   r    z}Only rolling back a single migration.To roll back multiple migrations, either use interactive mode or use --revision or --all Selected%d migration:%d migrations:z
  [{m.id}]rB   z{} {} to {}zthis migrationzthese %d migrationsy)r   )r   databaser   r   r%   r   r   rL   matchr]   rO   to_applyto_rollback
batch_modeprompt_migrationsr   r   r#   rV   warningswarnprintr	   pluralrW   titleconfirmreplace)argsbackendrY   r   dburirJ   rC   promptr<   r<   r=   get_migrations   sH   


rt   returnc                 C   P   t | |}|  t| |}||| j W d    dS 1 s!w   Y  dS Nr   )r   lockrt   apply_migrationsr   rp   configrq   rJ   r<   r<   r=   r        



r   c                 C   sh   t | |}| ! t| |}||| j ||}||| j W d    dS 1 s-w   Y  dS rw   )r   rx   rt   rollback_migrationsr   re   ry   rz   r<   r<   r=   r$   	  s   




r$   c                 C   rv   rw   )r   rx   rt   r}   r   rz   r<   r<   r=   r#     r|   r#   c                 C   s  d| _ t| |}| t t| |d}|r7tdtt|dd |D ]}td|j d q#|	|| j
 nAt| |dd | j }td	tt|dd |D ]}td|j d qP||| j
 t| |d}|	|| j
 W d    d
S W d    d
S 1 sw   Y  d
S )NTr   Applyingr`   ra   z  []r#   
Reapplyingr   )rg   r   rx   rt   rk   r	   rl   rV   rA   ry   r   nr}   )rp   r{   rq   rJ   rC   r<   r<   r=   r     s:   



r   c                 C   L   t | |}|  t| |}|| W d    dS 1 sw   Y  dS rw   )r   rx   rt   mark_migrationsrz   r<   r<   r=   r%   6     



r%   c                 C   r   rw   )r   rx   rt   unmark_migrationsrz   r<   r<   r=   r&   >  r   r&   c                 C   s   t | |}|  dS rw   )r   r.   )rp   r{   rq   r<   r<   r=   r.   F  s   
r.   c                    s   t | |}t| j }t|| j}d\ tj r%dj d djd|	 ) |
t|}|| fdd|D }ttj|dd	 W d    d
S 1 sUw   Y  d
S )N)AUz[92m{APPLIED}[0m)APPLIEDz[91m{UNAPPLIED}[0m)	UNAPPLIEDc                 3   s*    | ]}|v r
 n|j |jfV  qd S r?   )rA   
source_dirrM   r   r   appliedr<   r=   rQ   Z  s
    
z"list_migrations.<locals>.<genexpr>)STATUSIDSOURCE)headersr   )r   r   r   rL   rd   sysstdoutisattyrW   rx   	__class__r   rf   rk   tabulate)rp   r{   rq   rJ   datar<   r   r=   r-   L  s$   





		r-   c           	         s  G fdddt fdd|D }d}|t|k r|| }|j  du r>| |j}|dkr8|r5dnd	 n|r<d	nd d
 fdddD }td
 td|jjf  t	d|f |}|dkrtd
 td|f  td|f  td
 td td
 td|f  td|f  td td
 td td td
 td q|dv r||_|d7 }q|dkrt|jj
 q|dkrtt||d }q|dkrtd|d }|dkrn$|d kr||d D ]}d	|_qn|d!kr|D ]}d|_qn|t|k s|d"d |D S )#z
    Iterate through the list of migrations and prompt the user to
    apply/rollback each. Return a list of user selected migrations.

    direction
        one of 'apply' or 'rollback'
    c                       s    e Zd Zd fdd	Z  ZS )z-prompt_migrations.<locals>.prompted_migrationNc                    s   t |   || _|| _d S r?   )super__init__	migrationchoice)selfr   r   )r   prompted_migrationr<   r=   r   l  s   
z6prompt_migrations.<locals>.prompted_migration.__init__r?   )__name__
__module____qualname__r   __classcell__r<   r   )r   r=   r   k  s    r   c                    s   g | ]} |qS r<   r<   rM   r   r<   r=   rP   q  s    z%prompt_migrations.<locals>.<listcomp>r   Nr   r   rb   r^   c                 3   s(    | ]}| kr|  n| V  qd S r?   )upperlower)rN   o)r   r<   r=   rQ   ~  s   & z$prompt_migrations.<locals>.<genexpr>z	ynvdaqjk?z[%s]zShall I %s this migration??zy: %s this migrationzn: don't %s itzv: view this migration in fullz5d: %s the selected migrations, skipping any remainingz"a: %s all the remaining migrationsz$q: cancel without making any changeszj: skip to next migrationz k: back up to previous migrationz?: show this helpynr    vjkdaqc                 s   s     | ]}|j d kr|jV  qdS )rb   N)r   r   rM   r<   r<   r=   rQ     s    )objectrV   r   
is_appliedr   rX   rk   rA   r	   rs   sourceminmaxro   )	rq   rJ   rY   	to_promptpositionmigr   optionsresponser<   )r   r   r=   rh   b  sr   	@rh   r?   )r'   r   rG   ri   r   yoyor   r   r   r   yoyo.migrationsr   yoyo.scripts.mainr   r   r	   r>   rL   r]   rt   r,   r   r$   r#   r   r%   r&   r.   r-   rh   r<   r<   r<   r=   <module>   s.    
!1
