
­­­­­­­­­­­­­­­­­­
<!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!   sql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   r9   __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r:   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"   rC   rD   r   rE   r   r   r   r"   W   s    
z&PostgresqlMigrator.alter_change_columnrG   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   rH   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,   rF   r2   _r(   r!   r   r   _changei   s    

z3SqliteMigrator.alter_change_column.<locals>._change)Z_update_column)r!   r&   r.   r(   rL   r   rK   r   r"   g   s    z"SqliteMigrator.alter_change_columnN)T)r:   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 rI   )r   strorm)migratorr   argskwargsmethodr   r   wrappers   s    
zget_model.<locals>.wrapperr   )rS   rT   r   rR   r   	get_modelq   s    rU   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   r5   ZProxyobjr   dictrN   listopsr   r   rO   )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)	rZ   r   r   r   inforS   rP   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 rI   r   r   rP   funcrQ   r   r   r      r   z!Migrator.python.<locals>.<lambda>N)rZ   append)r!   r`   rP   rQ   r   r_   r   python   s    zMigrator.pythonc                 G   s   | j | jj|f|  dS )zExecure raw SQL.N)rZ   ra   rO   r2   r1   r   r   r   r2      s    zMigrator.sqlc                 C   s   t  | _dS )zClean the operations.N)rY   rZ   )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)
        )rN   _metadb_tabler   rZ   ra   create_table)r!   r   r   r   r   re      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)rN   rc   rd   rZ   ra   rO   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_classrZ   ra   rO   Z
add_columnrc   rd   r4   rg   	add_indexr!   r   fieldsr7   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.Trf   )rh   ri   rZ   ra   rO   r)   rc   rd   r4   rg   rj   rk   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   )r7   ).0r(   namesr   r   
<listcomp>   s     
 z)Migrator.drop_columns.<locals>.<listcomp>r   Tr   )rc   rl   valuespop__del_field__rg   r   r,   
index_namerd   r4   rZ   ra   rO   
drop_indexZdrop_column)	r!   r   rq   rQ   rl   r   r(   r,   rv   r   rp   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)
rc   Zremove_fieldr7   delattrr   r5   r6   Z	rel_modelZrelated_nameZreverse_rel)r!   r   r(   r   r   r   ru      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)rc   rl   r   r5   r6   r4   ru   r7   ri   rZ   ra   rO   rename_columnrd   )r!   r   Zold_namenew_namer(   r   r   r   r{      s    zMigrator.rename_columnc                 C   s@   | j |jj= ||j_|| j |jj< | j| j|jj| |S )zRename table in database.)rN   rc   rd   rZ   ra   rO   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.rg   Frz   rf   )rt   rc   indexesra   rl   getr   r5   r6   rZ   rO   rj   rd   )r!   r   columnsrQ   rg   columns_colr(   r   r   r   rj     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.rz   c                    s    g | ]\}} |kr||fqS r   r   )ro   colsrJ   r   r   r   rr     s      z'Migrator.drop_index.<locals>.<listcomp>)rc   rl   r   r   r5   r6   ra   rO   r   r,   rv   rd   r~   rZ   rw   )r!   r   r   r   r   r(   rv   r   r   r   rw     s    zMigrator.drop_indexc                 G   s<   |D ]2}|j j| }d|_| j| j|j j|j q|S )zAdd not null.F)	rc   rl   r#   rZ   ra   rO   r%   rd   r4   r!   r   rq   r7   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)	rc   rl   r#   rZ   ra   rO   drop_not_nullrd   r4   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.)	rc   rl   defaultsdefaultrZ   ra   rO   Zapply_defaultrd   )r!   r   r7   r   r(   r   r   r   add_default0  s    zMigrator.add_defaultN)T)r:   r;   r<   r=   r[   r]   rb   r2   r^   re   Zcreate_modelrU   r   Zremove_modelrm   Z
add_fieldsrn   Zchange_fieldsrx   Zremove_fieldsru   r{   Zrename_fieldr}   rj   rw   r%   r   r   r   r   r   r   rV   z   sH   




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