
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    /Xp*                     @   s   d dl Zd dlmZmZmZm	Z
mZmZmZmZmZmZmZmZ d dlmZ G dd deZG dd deeZG dd	 d	eeZG d
d dee
Z	dd ZG dd deZdS )    N)MySQLMigratorPostgresqlMigratorSchemaMigratorSqliteMigrator	OperationSQLEntityClausePostgresqlDatabase	operationSqliteDatabaseMySQLDatabase)LOGGERc                       sZ   e Zd ZdZe fddZdddZedd Zd	d
 Z	edd Z
edd Z  ZS )r   zImplement migrations.c                    sF   t |trt|S t |tr$t|S t |tr6t|S tt| 	|S )zInitialize migrator by db.)

isinstancer
   r   r   r   r   r   superr   from_database)clsdatabase	__class__ H/opt/alt/python38/lib/python3.8/site-packages/peewee_migrate/migrator.pyr      s    


zSchemaMigrator.from_databaseTc                    s    fddS )Nc                      s   j  dS )Ncascade
drop_tabler   r   modelr   r   <lambda>       z+SchemaMigrator.drop_table.<locals>.<lambda>r   selfr   r   r   r   r   r      s    zSchemaMigrator.drop_tablec                 C   s.   |  |||g}|js*|| ||g |S )zChange column.)alter_change_columnnullextendadd_not_null)r!   tablecolumn_namefieldZ
operationsr   r   r   change_column   s    zSchemaMigrator.change_columnc                 C   s>   |j d }|_ | j |}||_ ttdt|td|S )Support change columns.TALTER TABLEzALTER COLUMN)r#   r   compilerfield_definitionr	   r   r   )r!   r&   columnr(   
field_nullfield_clauser   r   r   r"   '   s    z"SchemaMigrator.alter_change_columnc                 G   s   t t|f| S )zExecute raw SQL.)r	   r   r!   sqlZparamsr   r   r   r2   .   s    zSchemaMigrator.sqlc                 C   sn   |j d }|_ ||_| j |}||_ tdt|td|g}t|tj	r`|
| | n||_t| S )zKeep fieldname unchanged.Tr+   z
ADD COLUMN)r#   	db_columnr   r,   r-   r   r   r   pwForeignKeyFieldr$   Zget_inline_fk_sqlnamer	   )r!   r&   r'   r(   r/   r0   partsr   r   r   alter_add_column3   s    zSchemaMigrator.alter_add_column)T)__name__
__module____qualname____doc__classmethodr   r   r   r)   r"   r2   r8   __classcell__r   r   r   r   r      s   



r   c                       s    e Zd ZdZ fddZ  ZS )r   z Support the migrations in MySQL.c                    s4   t t| |||}|jd }|jdtd |S r*      ZTYPE)r   r   r"   nodesinsertr   r!   r&   r'   r(   clauser0   r   r   r   r"   K   s    
z!MySQLMigrator.alter_change_columnr9   r:   r;   r<   r"   r>   r   r   r   r   r   G   s   r   c                       s    e Zd ZdZ fddZ  ZS )r   z%Support the migrations in postgresql.c                    s4   t t| |||}|jd }|jdtd |S r?   )r   r   r"   rB   rC   r   rD   r   r   r   r"   W   s    
z&PostgresqlMigrator.alter_change_columnrF   r   r   r   r   r   S   s   r   c                   @   s"   e Zd ZdZdddZdd ZdS )	r   z!Support the migrations in sqlite.Tc                    s    fddS )z0SQLite doesnt support cascade syntax by default.c                      s    j ddS )NFr   r   r   r   r   r   r   e   r   z+SqliteMigrator.drop_table.<locals>.<lambda>r   r    r   rG   r   r   c   s    zSqliteMigrator.drop_tablec                    s    fdd} |||S )r*   c                    s&   j  }| }||\}}|S N)r   r,   r-   Z
parse_node)r'   Z
column_defr,   rE   r2   _r(   r!   r   r   _changei   s    

z3SqliteMigrator.alter_change_column.<locals>._change)Z_update_column)r!   r&   r.   r(   rK   r   rJ   r   r"   g   s    z"SqliteMigrator.alter_change_columnN)T)r9   r:   r;   r<   r   r"   r   r   r   r   r   _   s   
r   c                    s    fdd}|S )zConvert string to model class.c                    s4   t |tr" | | j| f||S  | |f||S rH   )r   strorm)migratorr   argskwargsmethodr   r   wrappers   s    
zget_model.<locals>.wrapperr   )rR   rS   r   rQ   r   	get_modelq   s    rT   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e	Z
ed(ddZeZedd ZeZedd ZeZedd ZeZdd Zedd ZeZedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zd'S ))MigratorzProvide migrations.c                 C   s:   t |tjr|j}|| _t | _t | _t	
| j| _dS )zInitialize the migrator.N)r   r4   ZProxyobjr   dictrM   listopsr   r   rN   )r!   r   r   r   r   __init__~   s    zMigrator.__init__c                 C   sD   | j D ]0}t|tr0td|j|j |  q|  q|   dS )zRun operations.z%s %sN)	rY   r   r   r   inforR   rO   runclean)r!   Zopnr   r   r   r\      s    


zMigrator.runc                    s   | j  fdd dS )zRun python code.c                      s
    S rH   r   r   rO   funcrP   r   r   r      r   z!Migrator.python.<locals>.<lambda>N)rY   append)r!   r_   rO   rP   r   r^   r   python   s    zMigrator.pythonc                 G   s   | j | jj|f|  dS )zExecure raw SQL.N)rY   r`   rN   r2   r1   r   r   r   r2      s    zMigrator.sqlc                 C   s   t  | _dS )zClean the operations.N)rX   rY   )r!   r   r   r   r]      s    zMigrator.cleanc                 C   s*   || j |jj< | j|j_| j|j |S )zUCreate model and table in database.

        >> migrator.create_table(model)
        )rM   _metadb_tabler   rY   r`   create_table)r!   r   r   r   r   rd      s    
zMigrator.create_tableTc                 C   s&   | j |jj= | j| j|| dS )zaDrop model and table from database.

        >> migrator.drop_table(model, cascade=True)
        N)rM   rb   rc   rY   r`   rN   r   r    r   r   r   r      s    zMigrator.drop_tablec                 K   sh   |  D ]Z\}}||| | j| j|jj|j| |j	r| j| jj
|jj|jfdd q|S )zCreate new fields.Tunique)itemsadd_to_classrY   r`   rN   Z
add_columnrb   rc   r3   rf   	add_indexr!   r   fieldsr6   r(   r   r   r   add_columns   s      
zMigrator.add_columnsc                 K   sh   |  D ]Z\}}||| | j| j|jj|j| |j	r| j| jj
|jj|jfdd q|S )zChange fields.Tre   )rg   rh   rY   r`   rN   r)   rb   rc   r3   rf   ri   rj   r   r   r   change_columns   s        
zMigrator.change_columnsc           	         s    fdd|j j D }|dd}|D ]n}| || |jrx| j }||j j	|j
f}| j| j|j j	| | j| jj|j j	|j
|d q*|S )zRemove fields from model.c                    s   g | ]}|j  kr|qS r   )r6   ).0r(   namesr   r   
<listcomp>   s     
 z)Migrator.drop_columns.<locals>.<listcomp>r   Tr   )rb   rk   valuespop__del_field__rf   r   r,   
index_namerc   r3   rY   r`   rN   
drop_indexZdrop_column)	r!   r   rp   rP   rk   r   r(   r,   ru   r   ro   r   drop_columns   s    
zMigrator.drop_columnsc                 C   sF   |j |j t||j t|tjrBt|j|j |jj j	|j= dS )zDelete field from model.N)
rb   Zremove_fieldr6   delattrr   r4   r5   Z	rel_modelZrelated_nameZreverse_rel)r!   r   r(   r   r   r   rt      s
    zMigrator.__del_field__c                 C   s~   |j j| }t|tjr|j}| || | |_|_||| t|tjr^|jd  |_}| j	
| j|j j|| |S )zRename field in model._id)rb   rk   r   r4   r5   r3   rt   r6   rh   rY   r`   rN   rename_columnrc   )r!   r   Zold_namenew_namer(   r   r   r   rz      s    zMigrator.rename_columnc                 C   s@   | j |jj= ||j_|| j |jj< | j| j|jj| |S )zRename table in database.)rM   rb   rc   rY   r`   rN   rename_table)r!   r   r{   r   r   r   r|      s
    zMigrator.rename_tablec                 O   sz   | dd}|jj||f g }|D ]0}|jj|}t|tjrL|d }|| q&| j	| j
j|jj||d |S )zCreate indexes.rf   Fry   re   )rs   rb   indexesr`   rk   getr   r4   r5   rY   rN   ri   rc   )r!   r   columnsrP   rf   columns_colr(   r   r   r   ri     s    zMigrator.add_indexc                    s   g } D ]0}|j j|}t|tjr.|d }|| q| jj	 
|j j|} fdd|j jD |j _| j| j|j j| |S )zDrop indexes.ry   c                    s    g | ]\}} |kr||fqS r   r   )rn   ZcolsrI   r   r   r   rq     s      z'Migrator.drop_index.<locals>.<listcomp>)rb   rk   r~   r   r4   r5   r`   rN   r   r,   ru   rc   r}   rY   rv   )r!   r   r   r   r   r(   ru   r   r   r   rv     s    zMigrator.drop_indexc                 G   s<   |D ]2}|j j| }d|_| j| j|j j|j q|S )zAdd not null.F)	rb   rk   r#   rY   r`   rN   r%   rc   r3   r!   r   rp   r6   r(   r   r   r   r%     s
    zMigrator.add_not_nullc                 G   s<   |D ]2}|j j| }d|_| j| j|j j|j q|S )zDrop not null.T)	rb   rk   r#   rY   r`   rN   drop_not_nullrc   r3   r   r   r   r   r   '  s
    zMigrator.drop_not_nullc                 C   s>   |j j| }| |j j|< |_| j| j|j j|| |S )zAdd default.)	rb   rk   defaultsdefaultrY   r`   rN   Zapply_defaultrc   )r!   r   r6   r   r(   r   r   r   add_default0  s    zMigrator.add_defaultN)T)r9   r:   r;   r<   rZ   r\   ra   r2   r]   rd   Zcreate_modelrT   r   Zremove_modelrl   Z
add_fieldsrm   Zchange_fieldsrw   Zremove_fieldsrt   rz   Zrename_fieldr|   ri   rv   r%   r   r   r   r   r   r   rU   z   sH   












rU   )Zpeeweer4   Zplayhouse.migrater   ZMqMr   ZPgMr   ZScMr   ZSqMr   r   r   r	   r
   r   r   r   Zpeewee_migrater   rT   objectrU   r   r   r   r   <module>   s   8:	