o
    ht                     @   sn   d dl mZ d dlmZ d dlmZ g dZG dd dZG dd deZG d	d
 d
eZ	G dd deZ
dS )    )Enum)Q)Query)CheckConstraint
DeferrableUniqueConstraintc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )BaseConstraintc                 C   s
   || _ d S N)name)selfr
    r   d/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/db/models/constraints.py__init__
   s   
zBaseConstraint.__init__c                 C      t dNz.This method must be implemented by a subclass.NotImplementedErrorr   modelschema_editorr   r   r   constraint_sql      zBaseConstraint.constraint_sqlc                 C   r   r   r   r   r   r   r   
create_sql   r   zBaseConstraint.create_sqlc                 C   r   r   r   r   r   r   r   
remove_sql   r   zBaseConstraint.remove_sqlc                 C   s0   d| j j| j jf }|dd}|dd| jifS )Nz%s.%szdjango.db.models.constraintszdjango.db.modelsr   r
   )	__class__
__module____name__replacer
   )r   pathr   r   r   deconstruct   s   zBaseConstraint.deconstructc                 C   s   |   \}}}| j|i |S r	   )r   r   )r   _argskwargsr   r   r   clone   s   zBaseConstraint.cloneN)	r   r   __qualname__r   r   r   r   r   r#   r   r   r   r   r   	   s    r   c                       s\   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z fddZ	 fddZ
  ZS )r   c                   s*   || _ t|ddstdt | d S )NZconditionalFzACheckConstraint.check must be a Q instance or boolean expression.)checkgetattr	TypeErrorsuperr   )r   r%   r
   r   r   r   r   !   s   zCheckConstraint.__init__c                    sR   t |dd}|| j}|j jd}|| j\}}|t fdd|D  S )NFr   Z
alias_cols
connectionc                 3       | ]}  |V  qd S r	   Zquote_value.0pr   r   r   	<genexpr>/       z1CheckConstraint._get_check_sql.<locals>.<genexpr>)r   build_wherer%   get_compilerr,   as_sqltupler   r   r   querywherecompilersqlparamsr   r2   r   _get_check_sql*   s
   zCheckConstraint._get_check_sqlc                 C   s   |  ||}|| j|S r	   )r?   Z
_check_sqlr
   r   r   r   r%   r   r   r   r   1   s   zCheckConstraint.constraint_sqlc                 C   s   |  ||}||| j|S r	   )r?   Z_create_check_sqlr
   r@   r   r   r   r   5   s   zCheckConstraint.create_sqlc                 C   s   | || jS r	   )Z_delete_check_sqlr
   r   r   r   r   r   9   s   zCheckConstraint.remove_sqlc                 C   s   d| j j| j| jf S )Nz<%s: check='%s' name=%r>)r   r   r%   r
   r   r   r   r   __repr__<   s   zCheckConstraint.__repr__c                    s.   t |tr| j|jko| j|jkS t |S r	   )
isinstancer   r
   r%   r(   __eq__r   otherr)   r   r   rD   ?   s   
zCheckConstraint.__eq__c                    s$   t   \}}}| j|d< |||fS )Nr%   )r(   r   r%   r   r   r!   r"   r)   r   r   r   D   s   

zCheckConstraint.deconstruct)r   r   r$   r   r?   r   r   r   rB   rD   r   __classcell__r   r   r)   r   r       s    	r   c                   @   s   e Zd ZdZdZdS )r   deferredZ	immediateN)r   r   r$   ZDEFERREDZ	IMMEDIATEr   r   r   r   r   J   s    r   c                       sh   e Zd Zddddd fdd
Zdd Zdd	 Zd
d Zdd Zdd Z fddZ	 fddZ
  ZS )r   Nr   	condition
deferrableinclude	opclassesc                   s   |st dt|td tfst d|r|rt d|r#|r#t d|r+|r+t dt|td tfs8t dt|td ttfsFt dt|ttfsQt d|r_t|t|kr_t d	t|| _|| _	|| _
|rpt|nd
| _|| _t | d S )Nz=At least one field is required to define a unique constraint.z0UniqueConstraint.condition must be a Q instance.z4UniqueConstraint with conditions cannot be deferred.z8UniqueConstraint with include fields cannot be deferred.z3UniqueConstraint with opclasses cannot be deferred.z:UniqueConstraint.deferrable must be a Deferrable instance.z1UniqueConstraint.include must be a list or tuple.z3UniqueConstraint.opclasses must be a list or tuple.z]UniqueConstraint.fields and UniqueConstraint.opclasses must have the same number of elements.r   )
ValueErrorrC   typer   r   listr8   lenfieldsrK   rL   rM   rN   r(   r   )r   rS   r
   rK   rL   rM   rN   r)   r   r   r   P   sD   

zUniqueConstraint.__init__c                    s`   | j d u rd S t|dd}|| j }|j jd}|| j\}}|t fdd|D  S )NFr*   r+   c                 3   r-   r	   r.   r/   r2   r   r   r3      r4   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>)rK   r   r5   r6   r,   r7   r8   r9   r   r2   r   _get_condition_sql~   s   
z#UniqueConstraint._get_condition_sqlc              	      R    fdd| j D } fdd| jD }|  |}|j || j|| j|| jdS )Nc                       g | ]	} j |jqS r   _meta	get_fieldcolumnr0   
field_namer   r   r   
<listcomp>       z3UniqueConstraint.constraint_sql.<locals>.<listcomp>c                    rV   r   rW   r[   r]   r   r   r^      r_   rJ   )rS   rM   rT   Z_unique_sqlr
   rL   rN   r   r   r   rS   rM   rK   r   r]   r   r         
zUniqueConstraint.constraint_sqlc              	      rU   )Nc                    rV   r   rW   r[   r]   r   r   r^      r_   z/UniqueConstraint.create_sql.<locals>.<listcomp>c                    rV   r   rW   r[   r]   r   r   r^      r_   rJ   )rS   rM   rT   Z_create_unique_sqlr
   rL   rN   r`   r   r]   r   r      ra   zUniqueConstraint.create_sqlc                    s<   |   |} fdd| jD }|j | j|| j|| jdS )Nc                    rV   r   rW   r[   r]   r   r   r^      r_   z/UniqueConstraint.remove_sql.<locals>.<listcomp>rJ   )rT   rM   Z_delete_unique_sqlr
   rL   rN   )r   r   r   rK   rM   r   r]   r   r      s   zUniqueConstraint.remove_sqlc              
   C   sr   d| j j| j| j| jd u rdnd| j | jd u rdnd| j | js#dndt| j | js0df S dt| j f S )Nz<%s: fields=%r name=%r%s%s%s%s> z condition=%sz deferrable=%sz include=%sz opclasses=%s)	r   r   rS   r
   rK   rL   rM   reprrN   rA   r   r   r   rB      s   zUniqueConstraint.__repr__c                    s^   t |tr)| j|jko(| j|jko(| j|jko(| j|jko(| j|jko(| j|jkS t 	|S r	   )
rC   r   r
   rS   rK   rL   rM   rN   r(   rD   rE   r)   r   r   rD      s   





zUniqueConstraint.__eq__c                    sd   t   \}}}| j|d< | jr| j|d< | jr| j|d< | jr%| j|d< | jr-| j|d< |||fS )NrS   rK   rL   rM   rN   )r(   r   rS   rK   rL   rM   rN   rG   r)   r   r   r      s   





zUniqueConstraint.deconstruct)r   r   r$   r   rT   r   r   r   rB   rD   r   rH   r   r   r)   r   r   O   s    .	

	r   N)enumr   Zdjango.db.models.query_utilsr   Zdjango.db.models.sql.queryr   __all__r   r   r   r   r   r   r   r   <module>   s    *