o
    b[                     @   s  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mZmZmZmZ ddlmZmZmZ d	d
 ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZ G d#d$ d$eZ!G d%d& d&e!Z"G d'd( d(e!Z#G d)d* d*e!Z$G d+d, d,e!Z%d-S ).    )models)	Operation)
ModelState)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameField)field_referencesget_referencesresolve_relationc                 C   s6   t  }|D ]}||v rtd|| f || qd S )Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   e/var/www/secure340b-portal/env/lib/python3.10/site-packages/django/db/migrations/operations/models.py_check_for_duplicates   s   
r   c                       s8   e Zd Zdd Zedd Zdd Z fddZ  ZS )	ModelOperationc                 C   s
   || _ d S Nname)selfr   r   r   r   __init__      
zModelOperation.__init__c                 C   
   | j  S r   )r   lowerr   r   r   r   
name_lower      
zModelOperation.name_lowerc                 C   s   |  | jkS r   r    r"   r   r   	app_labelr   r   r   references_model   s   zModelOperation.references_modelc                    s   t  ||p|| j| S r   )superreducer'   r   r   	operationr&   	__class__r   r   r)   "   s   zModelOperation.reduce)	__name__
__module____qualname__r   r   r"   r'   r)   __classcell__r   r   r,   r   r      s    
r   c                       sr   e Zd ZdZg dZd fdd	Zdd Zdd	 Zd
d Zdd Z	dd Z
edd Zdd Z fddZ  ZS )CreateModelzCreate a model's table.)fieldsoptionsmanagersNc                    sz   || _ |pi | _|ptjf| _|pg | _t | tddd | j D  tddd | jD  tddd | jD  d S )Nr3   c                 s       | ]\}}|V  qd S r   r   .0r   _r   r   r   	<genexpr>6       z'CreateModel.__init__.<locals>.<genexpr>basesc                 s   s8    | ]}t |d r|jjn
t|tr| n|V  qdS )_metaN)hasattrr=   Zlabel_lower
isinstancestrr    )r8   baser   r   r   r:   7   s    
r5   c                 s   r6   r   r   r7   r   r   r   r:   <   r;   )	r3   r4   r   Modelr<   r5   r(   r   r   )r   r   r3   r4   r<   r5   r,   r   r   r   .   s   


zCreateModel.__init__c                 C   sn   | j | jd}| jr| j|d< | jr| jtjfkr| j|d< | jr0| jdt fgkr0| j|d< | jj	g |fS )N)r   r3   r4   r<   objectsr5   )
r   r3   r4   r<   r   rB   r5   Managerr-   r0   r   kwargsr   r   r   deconstruct>   s   


zCreateModel.deconstructc              
   C   s6   | t|| jt| jt| jt| jt| j	 d S r   )
Z	add_modelr   r   listr3   dictr4   tupler<   r5   r   r&   stater   r   r   state_forwardsO   s   
zCreateModel.state_forwardsc                 C   2   |j || j}| |jj|r|| d S d S r   apps	get_modelr   allow_migrate_model
connectionaliasZcreate_modelr   r&   schema_editor
from_stateto_statemodelr   r   r   database_forwardsY      zCreateModel.database_forwardsc                 C   2   |j || j}| |jj|r|| d S d S r   rP   rQ   r   rR   rS   rT   Zdelete_modelrU   r   r   r   database_backwards^   r[   zCreateModel.database_backwardsc                 C   s    d| j ddr
dnd| jf S )NzCreate %smodel %sproxyFzproxy  )r4   getr   r!   r   r   r   describec   s    zCreateModel.describec                 C   s   | j S r   r"   r!   r   r   r   migration_name_fragmentf   s   z#CreateModel.migration_name_fragmentc                 C   s   |  }|| jkrdS ||f}| jD ]}|tjur,t|tjjtfr,t	|||kr, dS q| j
D ]\}}t|| jf||r@ dS q0dS )NTF)r    r"   r<   r   rB   r?   rA   Z	ModelBaser@   r   r3   r   )r   r   r&   r"   Zreference_model_tuplerA   _namefieldr   r   r   r'   j   s   

zCreateModel.references_modelc                    s  t  tr| j jkr| jddsg S t  tr.| j jkr.t j| j	| j| j
| jdgS t  tr`| j jkr`i | j j} jD ]}| jvrQ||d  qDt| j| j	|| j
| jdgS t  tr| j jkrt| j| j	i | j j ji| j
| jdgS t  tr| j jkrt| j| j	i | jd ji| j
| jdgS t  tr| j jkrt  trt| j| j	 j jfg | j| j
| jdgS t  trt| j fdd| j	D | j| j
| jdgS t  tr7| j }dD ] }||d }|rttt fdd	|D }|r|||< q|d}| jkr"|d= t| j fd
d| j	D || j
| jdgS t  tr| j }dD ]}||}|rY fdd|D ||< qD|d}| j krk j|d< t| j fdd| j	D || j
| jdgS t! " |S )Nr_   F)r3   r4   r<   r5   order_with_respect_toc                    s(   g | ]\}}|| j kr jn|fqS r   )r   rf   r8   nvr+   r   r   
<listcomp>       z&CreateModel.reduce.<locals>.<listcomp>)unique_togetherindex_togetherc                 3   s&    | ]}t  fd d|D V  qdS )c                 3   s    | ]
}| j kr|V  qd S r   rc   r8   frk   r   r   r:      s    z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>NrJ   r8   r3   rk   r   r   r:      s    
z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|   jkr||fqS r   r$   rh   rk   r   r   rl      s    c                    s"   h | ]}t  fd d|D qS )c                 3   s$    | ]}| j kr jn|V  qd S r   old_namenew_namerp   rk   r   r   r:      s   " z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rr   rs   rk   r   r   	<setcomp>   s    z%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ]\}}| j kr jn||fqS r   rt   rh   rk   r   r   rl      rm   )#r?   DeleteModelr"   r4   ra   RenameModelold_name_lowerr2   rv   r3   r<   r5   AlterModelOptionsALTER_OPTION_KEYSpopr   AlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTorg   r
   model_name_lowerr   rf   r	   r   copyr   filterboolr   ru   r(   r)   )r   r+   r&   r4   keyr   optionrg   r,   rk   r   r)   |   s   

	

			

	











zCreateModel.reduce)NNN)r.   r/   r0   __doc__serialization_expand_argsr   rG   rM   rZ   r^   rb   propertyrd   r'   r)   r1   r   r   r,   r   r2   )   s    

r2   c                   @   L   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
dd ZdS )rx   zDrop a model's table.c                 C   s   d| j i}| jjg |fS Nr   )r   r-   r0   rE   r   r   r   rG      s   zDeleteModel.deconstructc                 C   s   | || j d S r   )remove_modelr"   rK   r   r   r   rM        zDeleteModel.state_forwardsc                 C   r\   r   r]   rU   r   r   r   rZ   
  r[   zDeleteModel.database_forwardsc                 C   rN   r   rO   rU   r   r   r   r^     r[   zDeleteModel.database_backwardsc                 C   s   dS )NTr   r%   r   r   r   r'     s   zDeleteModel.references_modelc                 C   
   d| j  S )NzDelete model %sr   r!   r   r   r   rb     r   zDeleteModel.describec                 C   r   )Nz	delete_%src   r!   r   r   r   rd     r#   z#DeleteModel.migration_name_fragmentN)r.   r/   r0   r   rG   rM   rZ   r^   r'   rb   r   rd   r   r   r   r   rx      s    
rx   c                       s   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zedd Z fddZ  ZS )ry   zRename a model.c                    s   || _ || _t | d S r   )ru   rv   r(   r   )r   ru   rv   r,   r   r   r   $  s   zRenameModel.__init__c                 C   r   r   )ru   r    r!   r   r   r   rz   )  r#   zRenameModel.old_name_lowerc                 C   r   r   )rv   r    r!   r   r   r   new_name_lower-  r#   zRenameModel.new_name_lowerc                 C      | j | jd}| jjg |fS )Nrt   )ru   rv   r-   r0   rE   r   r   r   rG   1     zRenameModel.deconstructc                 C   s   |j || jf  }| j|_||j || jf< || jf}d|| jf }t }t||D ]2\}}}	}
d }|
jr=|	 }||j	_
|
jrL|d u rH|	 }||j	_|r\||j|< ||j|jf q*|j|dd ||| j |j|| jdd d S )Nz%s.%sTdelay)r   rz   clonerv   r   r   r   r   toremote_fieldrY   throughr3   r   r&   r"   Zreload_modelsr   reload_model)r   r&   rL   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadmodel_stater   rf   	referenceZchanged_fieldr   r   r   rM   <  s,   

zRenameModel.state_forwardsc                 C   s>  |j || j}| |jj|r|j || j}|||jj	|jj	 |jj
D ]0}|j|kr6|}|| jf}	n|j}|jjj|jjjf}	|j j|	 j|jj}
|||j|
 q't|jj|jj}|D ]9\}}|j|jkss|jjjjstqc|jj}|jj}|||jj	|jj	 |||j|jj|j|jj qcd S d S r   )rP   rQ   rv   rR   rS   rT   ru   alter_db_tabler=   db_tableZrelated_objectsZrelated_modelr   r&   
model_name	get_fieldrf   r   Zalter_fieldziplocal_many_to_manyrY   r   r   auto_created)r   r&   rV   rW   rX   	new_model	old_modelZrelated_objectrY   Zrelated_keyZto_fieldr3   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rZ   W  sX   
zRenameModel.database_forwardsc                 C   s\   | j | j| _| _ | j| j| _| _| |||| | j | j| _| _ | j| j| _| _d S r   )rz   r   ru   rv   rZ   r   r&   rV   rW   rX   r   r   r   r^     s
   zRenameModel.database_backwardsc                 C   s   |  | jkp|  | jkS r   )r    rz   r   r%   r   r   r   r'     s   zRenameModel.references_modelc                 C      d| j | jf S )NzRename model %s to %srt   r!   r   r   r   rb        zRenameModel.describec                 C   r   )Nzrename_%s_%s)rz   r   r!   r   r   r   rd        z#RenameModel.migration_name_fragmentc                    sH   t |tr| j|jkrt| j|jgS tt| ||p#|	| j| S r   )
r?   ry   r   rz   ru   rv   r(   r   r)   r'   r*   r,   r   r   r)     s   

	zRenameModel.reduce)r.   r/   r0   r   r   r   rz   r   rG   rM   rZ   r^   r'   rb   r   rd   r)   r1   r   r   r,   r   ry   !  s     

3	
ry   c                       s   e Zd Z fddZ  ZS )ModelOptionOperationc                    s0   t || jtfr| j|jkr|gS t ||S r   )r?   r-   rx   r"   r(   r)   r*   r,   r   r   r)     s   zModelOptionOperation.reduce)r.   r/   r0   r)   r1   r   r   r,   r   r     s    r   c                       sT   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	e
dd Z  ZS )AlterModelTablezRename a model's table.c                       || _ t | d S r   )tabler(   r   )r   r   r   r,   r   r   r        zAlterModelTable.__init__c                 C   r   )Nr   r   )r   r   r-   r0   rE   r   r   r   rG     r   zAlterModelTable.deconstructc                 C   s.   | j |j|| jf jd< |j|| jdd d S )Nr   Tr   )r   r   r"   r4   r   rK   r   r   r   rM     s   zAlterModelTable.state_forwardsc           	      C   s   |j || j}| |jj|rH|j || j}|||jj|jj t	|jj
|jj
D ]\}}|jjjjrG||jj|jjjj|jjjj q,d S d S r   )rP   rQ   r   rR   rS   rT   r   r=   r   r   r   r   r   r   )	r   r&   rV   rW   rX   r   r   r   r   r   r   r   rZ     s$   

z!AlterModelTable.database_forwardsc                 C      |  ||||S r   rZ   r   r   r   r   r^     r   z"AlterModelTable.database_backwardsc                 C   s"   d| j | jd ur| jf S df S )NzRename table for %s to %sz	(default)r   r!   r   r   r   rb     s   zAlterModelTable.describec                 C   r   )Nzalter_%s_tablerc   r!   r   r   r   rd     r#   z'AlterModelTable.migration_name_fragment)r.   r/   r0   r   r   rG   rM   rZ   r^   rb   r   rd   r1   r   r   r,   r   r     s    r   c                       sh   e Zd ZdZ fddZedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd Z  ZS )r~   Nc                    s.   |rt t|}t| | j| t | d S r   )r   r   setattrr   r(   r   )r   r   r   r,   r   r   r     s   z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jS r   )getattrr   r!   r   r   r   r     s   z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r   )r   r   r   r-   r0   rE   r   r   r   rG     s   z(AlterTogetherOptionOperation.deconstructc                 C   s4   |j || jf }| j|j| j< |j|| jdd d S NTr   )r   r"   r   r4   r   r   r   r&   rL   r   r   r   r   rM     s   z+AlterTogetherOptionOperation.state_forwardsc                 C   sp   |j || j}| |jj|r6|j || j}t|d| j }||t|j| jt	 t|j| jt	  d S d S )Nzalter_%s)
rP   rQ   r   rR   rS   rT   r   r   r=   r   )r   r&   rV   rW   rX   r   r   Zalter_togetherr   r   r   rZ     s   z.AlterTogetherOptionOperation.database_forwardsc                 C   r   r   r   r   r   r   r   r^     r   z/AlterTogetherOptionOperation.database_backwardsc                    s,   |  ||o| j pt fdd| jD S )Nc                 3   s    | ]} |v V  qd S r   r   rs   r   r   r   r:     r;   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r'   r   anyr   r   r   r&   r   r   r   references_field  s   z-AlterTogetherOptionOperation.references_fieldc                 C   s   d| j | jt| jp
df S )Nz"Alter %s for %s (%s constraint(s))r`   )r   r   lenr   r!   r   r   r   rb   "  s   z%AlterTogetherOptionOperation.describec                 C   r   )Nzalter_%s_%s)r"   r   r!   r   r   r   rd   %  r   z4AlterTogetherOptionOperation.migration_name_fragment)r.   r/   r0   r   r   r   r   rG   rM   rZ   r^   r   rb   r   rd   r1   r   r   r,   r   r~     s    
	r~   c                       $   e Zd ZdZdZ fddZ  ZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    rn   c                       t  || d S r   r(   r   )r   r   rn   r,   r   r   r   1  r   zAlterUniqueTogether.__init__r.   r/   r0   r   r   r   r1   r   r   r,   r   r   *      r   c                       r   )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    ro   c                    r   r   r   )r   r   ro   r,   r   r   r   <  r   zAlterIndexTogether.__init__r   r   r   r,   r   r   5  r   r   c                       s`   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zedd Z  ZS )r   z9Represent a change with the order_with_respect_to option.rg   c                    r   r   )rg   r(   r   )r   r   rg   r,   r   r   r   E  r   z AlterOrderWithRespectTo.__init__c                 C   r   )Nr   rg   )r   rg   r-   r0   rE   r   r   r   rG   I  r   z#AlterOrderWithRespectTo.deconstructc                 C   s2   |j || jf }| j|jd< |j|| jdd d S )Nrg   Tr   )r   r"   rg   r4   r   r   r   r   r   rM   T     z&AlterOrderWithRespectTo.state_forwardsc                 C   s   |j || j}| |jj|rI|j || j}|jjr,|jjs,|||j	d d S |jjrK|jjsM|j	d}|
 sAd|_||| d S d S d S d S )N_orderr   )rP   rQ   r   rR   rS   rT   r=   rg   Zremove_fieldr   Zhas_defaultdefaultZ	add_field)r   r&   rV   rW   rX   Zto_modelZ
from_modelrf   r   r   r   rZ   Y  s   z)AlterOrderWithRespectTo.database_forwardsc                 C   s   |  |||| d S r   r   r   r   r   r   r^   k  s   z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |  ||o| jd u p|| jkS r   )r'   rg   r   r   r   r   r   n  s   
z(AlterOrderWithRespectTo.references_fieldc                 C   r   )Nz%Set order_with_respect_to on %s to %sr   r!   r   r   r   rb   w  r   z AlterOrderWithRespectTo.describec                 C   r   )Nzalter_%s_order_with_respect_torc   r!   r   r   r   rd   z  r#   z/AlterOrderWithRespectTo.migration_name_fragment)r.   r/   r0   r   r   r   rG   rM   rZ   r^   r   rb   r   rd   r1   r   r   r,   r   r   @  s    	r   c                       s\   e Zd ZdZg dZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
edd Z  ZS )r{   z
    Set new model options that don't directly affect the database schema
    (like verbose_name, permissions, ordering). Python code in migrations
    may still need them.
    )Zbase_manager_nameZdefault_manager_nameZdefault_related_nameZget_latest_byZmanagedZorderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                    r   r   )r4   r(   r   )r   r   r4   r,   r   r   r     r   zAlterModelOptions.__init__c                 C   r   )N)r   r4   )r   r4   r-   r0   rE   r   r   r   rG     r   zAlterModelOptions.deconstructc                 C   s\   |j || jf }i |j| j|_| jD ]}|| jvr"|j|d q|j|| jdd d S )NFTr   )r   r"   r4   r|   r}   r   )r   r&   rL   r   r   r   r   r   rM     s   

z AlterModelOptions.state_forwardsc                 C      d S r   r   r   r   r   r   rZ        z#AlterModelOptions.database_forwardsc                 C   r   r   r   r   r   r   r   r^     r   z$AlterModelOptions.database_backwardsc                 C   r   )NzChange Meta options on %sr   r!   r   r   r   rb     r   zAlterModelOptions.describec                 C   r   )Nzalter_%s_optionsrc   r!   r   r   r   rd     r#   z)AlterModelOptions.migration_name_fragment)r.   r/   r0   r   r|   r   rG   rM   rZ   r^   rb   r   rd   r1   r   r   r,   r   r{     s    r{   c                       sZ   e Zd ZdZdgZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
edd Z  ZS )AlterModelManagerszAlter the model's managers.r5   c                    r   r   )r5   r(   r   )r   r   r5   r,   r   r   r     r   zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r-   r0   r   r5   r!   r   r   r   rG     s   
zAlterModelManagers.deconstructc                 C   s2   |j || jf }t| j|_|j|| jdd d S r   )r   r"   rH   r5   r   r   r   r   r   rM     r   z!AlterModelManagers.state_forwardsc                 C   r   r   r   r   r   r   r   rZ     r   z$AlterModelManagers.database_forwardsc                 C   r   r   r   r   r   r   r   r^     r   z%AlterModelManagers.database_backwardsc                 C   r   )NzChange managers on %sr   r!   r   r   r   rb     r   zAlterModelManagers.describec                 C   r   )Nzalter_%s_managersrc   r!   r   r   r   rd     r#   z*AlterModelManagers.migration_name_fragment)r.   r/   r0   r   r   r   rG   rM   rZ   r^   rb   r   rd   r1   r   r   r,   r   r     s    r   c                   @   s   e Zd ZdZedd ZdS )IndexOperationindexesc                 C   r   r   )r   r    r!   r   r   r   r     r#   zIndexOperation.model_name_lowerN)r.   r/   r0   r   r   r   r   r   r   r   r     s    r   c                   @   r   )AddIndexzAdd an index on a model.c                 C   s"   || _ |jstd| || _d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)r   r   r   index)r   r   r   r   r   r   r     s   
zAddIndex.__init__c                 C   sH   |j || jf }g |j| j | j |j| j< |j|| jdd d S r   )r   r   r4   r   r   r   r   r   r   r   r   rM     s   "zAddIndex.state_forwardsc                 C   6   |j || j}| |jj|r||| j d S d S r   )rP   rQ   r   rR   rS   rT   	add_indexr   rU   r   r   r   rZ        zAddIndex.database_forwardsc                 C   s6   |j || j}| |jj|r||| j d S d S r   )rP   rQ   r   rR   rS   rT   remove_indexr   rU   r   r   r   r^     r   zAddIndex.database_backwardsc                 C   r   )N)r   r   )r   r   r-   r0   rE   r   r   r   rG      r   zAddIndex.deconstructc                 C   sN   | j jrd| j jddd | j jD | jf S d| j jd| j j| jf S )Nz!Create index %s on %s on model %sz, c                 S   s   g | ]}t |qS r   )r@   )r8   Z
expressionr   r   r   rl     s    z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)r   Zexpressionsr   joinr   r3   r!   r   r   r   rb     s   zAddIndex.describec                 C      d| j | jj f S Nz%s_%s)r   r   r   r    r!   r   r   r   rd        z AddIndex.migration_name_fragmentNr.   r/   r0   r   r   rM   rZ   r^   rG   rb   r   rd   r   r   r   r   r     s    	r   c                   @   r   )RemoveIndexzRemove an index from a model.c                 C      || _ || _d S r   r   r   r   r   r   r   r   r   r         
zRemoveIndex.__init__c                    L   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                       g | ]
}|j  j kr|qS r   r   )r8   idxr!   r   r   rl   '      z.RemoveIndex.state_forwards.<locals>.<listcomp>Tr   r   r   r4   r   r   )r   r&   rL   r   r   r   r!   r   rM   $     zRemoveIndex.state_forwardsc                 C   sP   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rP   rQ   r   rR   rS   rT   r   r   get_index_by_namer   r   )r   r&   rV   rW   rX   rY   from_model_stater   r   r   r   rZ   *     zRemoveIndex.database_forwardsc                 C   P   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rP   rQ   r   rR   rS   rT   r   r   r   r   r   )r   r&   rV   rW   rX   rY   to_model_stater   r   r   r   r^   1  r   zRemoveIndex.database_backwardsc                 C   r   Nr   )r   r   r-   r0   rE   r   r   r   rG   8  r   zRemoveIndex.deconstructc                 C   r   )NzRemove index %s from %sr   r   r!   r   r   r   rb   C  r   zRemoveIndex.describec                 C      d| j | j f S Nzremove_%s_%sr   r   r    r!   r   r   r   rd   F     z#RemoveIndex.migration_name_fragmentNr   r   r   r   r   r     s    r   c                   @   r   )AddConstraintconstraintsc                 C   r   r   r   
constraint)r   r   r   r   r   r   r   N  r   zAddConstraint.__init__c                 C   sD   |j || jf }g |j| j | j|j| j< |j|| jdd d S r   )r   r   r4   r   r   r   r   r   r   r   rM   R  s   zAddConstraint.state_forwardsc                 C   r   r   )rP   rQ   r   rR   rS   rT   add_constraintr   rU   r   r   r   rZ   W  r   zAddConstraint.database_forwardsc                 C   r   r   )rP   rQ   r   rR   rS   rT   remove_constraintr   rU   r   r   r   r^   \  r   z AddConstraint.database_backwardsc                 C      | j jg | j| jdfS )Nr   )r-   r.   r   r   r!   r   r   r   rG   a     zAddConstraint.deconstructc                 C   s   d| j j| jf S )Nz Create constraint %s on model %s)r   r   r   r!   r   r   r   rb   g  r   zAddConstraint.describec                 C   r   r   )r   r   r   r    r!   r   r   r   rd   j  r   z%AddConstraint.migration_name_fragmentNr.   r/   r0   r   r   rM   rZ   r^   rG   rb   r   rd   r   r   r   r   r   K  s    r   c                   @   r   )RemoveConstraintr   c                 C   r   r   r   r   r   r   r   r   r  r   zRemoveConstraint.__init__c                    r   )Nc                    r   r   r   )r8   cr!   r   r   rl   y  r   z3RemoveConstraint.state_forwards.<locals>.<listcomp>Tr   r   )r   r&   rL   r   r   r   r!   r   rM   v  r   zRemoveConstraint.state_forwardsc                 C   sP   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rP   rQ   r   rR   rS   rT   r   r   get_constraint_by_namer   r   )r   r&   rV   rW   rX   rY   r   r   r   r   r   rZ   |  r   z"RemoveConstraint.database_forwardsc                 C   r   r   )rP   rQ   r   rR   rS   rT   r   r   r   r   r   )r   r&   rV   rW   rX   rY   r   r   r   r   r   r^     r   z#RemoveConstraint.database_backwardsc                 C   r   r   )r-   r.   r   r   r!   r   r   r   rG     r   zRemoveConstraint.deconstructc                 C   r   )Nz"Remove constraint %s from model %sr   r!   r   r   r   rb     r   zRemoveConstraint.describec                 C   r   r   r   r!   r   r   r   rd     r   z(RemoveConstraint.migration_name_fragmentNr   r   r   r   r   r   o  s    r   N)&Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r3   r   r	   r
   r   r   utilsr   r   r   r   r   r2   rx   ry   r   r   r~   r   r   r   r{   r   r   r   r   r   r   r   r   r   r   <module>   s6    
 R' 6<?;#8.$