
    Hwg<                         d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
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 d d
lmZ g dZ G d d      Z G d de      Z G d de      Z G d de      Zy)    )Enum)
FieldErrorValidationError)connections)ExistsExpressionListFOrderBy)IndexExpression)Exact)Q)Query)DEFAULT_DB_ALIAS)gettext_lazy)BaseConstraintCheckConstraint
DeferrableUniqueConstraintc                   h    e Zd Z ed      ZdZddZed        Zd Z	d Z
d ZdefdZd	 Zd
 Zd Zy)r   u&   Constraint “%(name)s” is violated.Nc                 H    || _         ||| _        y | j                  | _        y N)nameviolation_error_messagedefault_violation_error_message)selfr   r   s      S/var/www/horilla/myenv/lib/python3.12/site-packages/django/db/models/constraints.py__init__zBaseConstraint.__init__   s%    	".+BD(+/+O+OD(    c                      y)NF r   s    r   contains_expressionsz#BaseConstraint.contains_expressions   s    r   c                     t        d      Nz.This method must be implemented by a subclass.NotImplementedErrorr   modelschema_editors      r   constraint_sqlzBaseConstraint.constraint_sql       !"RSSr   c                     t        d      r$   r%   r'   s      r   
create_sqlzBaseConstraint.create_sql"   r+   r   c                     t        d      r$   r%   r'   s      r   
remove_sqlzBaseConstraint.remove_sql%   r+   r   c                     t        d      r$   r%   )r   r(   instanceexcludeusings        r   validatezBaseConstraint.validate(   r+   r   c                 8    | j                   d| j                  iz  S )Nr   )r   r   r!   s    r   get_violation_error_messagez*BaseConstraint.get_violation_error_message+   s    ++vtyy.AAAr   c                    | j                   j                  d| j                   j                  }|j                  dd      }d| j                  i}| j
                  (| j
                  | j                  k7  r| j
                  |d<   |d|fS )N.zdjango.db.models.constraintszdjango.db.modelsr   r   r    )	__class__
__module____name__replacer   r   r   )r   pathkwargss      r   deconstructzBaseConstraint.deconstruct.   s~    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-b&!!r   c                 N    | j                         \  }}} | j                  |i |S r   )r?   r9   )r   _argsr>   s       r   clonezBaseConstraint.clone9   s,    **,4t~~t.v..r   r   )r;   r:   __qualname__rA   r   r   r   propertyr"   r*   r-   r/   r   r4   r6   r?   rC   r    r   r   r   r      s^    &'(P&Q#"P  TTT 15<L TB	"/r   r   c                   b     e Zd Zdd fd
Zd Zd Zd Zd ZdefdZ	d	 Z
 fd
Z fdZ xZS )r   Nr   c                f    || _         t        |dd      st        d      t        |   ||       y )NconditionalFzACheckConstraint.check must be a Q instance or boolean expression.rG   )checkgetattr	TypeErrorsuperr   )r   rJ   r   r   r9   s       r   r   zCheckConstraint.__init__?   s;    
umU3S  	7NOr   c                     t        |d      }|j                  | j                        }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFr(   
alias_cols
connectionc              3   @   K   | ]  }j                  |        y wr   quote_value.0pr)   s     r   	<genexpr>z1CheckConstraint._get_check_sql.<locals>.<genexpr>L        HA=44Q7H   )r   build_whererJ   get_compilerrR   as_sqltupler   r(   r)   querywherecompilersqlparamss     `     r   _get_check_sqlzCheckConstraint._get_check_sqlG   sl    Ee4!!$**-%%1I1I%Jll8]-E-EFVUHHHHHr   c                 ^    | j                  ||      }|j                  | j                  |      S r   )rf   
_check_sqlr   r   r(   r)   rJ   s       r   r*   zCheckConstraint.constraint_sqlN   s+    ##E=9''		599r   c                 `    | j                  ||      }|j                  || j                  |      S r   )rf   _create_check_sqlr   ri   s       r   r-   zCheckConstraint.create_sqlR   s-    ##E=9..udiiGGr   c                 :    |j                  || j                        S r   )_delete_check_sqlr   r'   s      r   r/   zCheckConstraint.remove_sqlV   s    ..udii@@r   c                     |j                  |j                  |      }	 t        | j                        j                  ||      st	        | j                               y # t        $ r Y y w xY w)Nmetar2   r3   )_get_field_value_map_metar   rJ   r   r6   r   )r   r(   r1   r2   r3   againsts         r   r4   zCheckConstraint.validateY   sf    //U[['/R	TZZ=&&we&<%d&F&F&HII = 		s   ?A 	A+*A+c                 |    d| j                   j                  d| j                  dt        | j                        dS )N<z: check=z name=>)r9   rD   rJ   reprr   r!   s    r   __repr__zCheckConstraint.__repr__a   s+    NN''JJO
 	
r   c                     t        |t              rO| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S t
        |   |      S r   )
isinstancer   r   rJ   r   rM   __eq__r   otherr9   s     r   r|   zCheckConstraint.__eq__h   sc    e_-		UZZ' RJJ%++-R00E4Q4QQ
 w~e$$r   c                 P    t         |          \  }}}| j                  |d<   |||fS )NrJ   )rM   r?   rJ   r   r=   rB   r>   r9   s       r   r?   zCheckConstraint.deconstructq   s1    "W02dF**wT6!!r   )r;   r:   rD   r   rf   r*   r-   r/   r   r4   ry   r|   r?   __classcell__r9   s   @r   r   r   >   sD    ?C PI:HA 15<L 
%" "r   r   c                       e Zd ZdZdZd Zy)r   deferred	immediatec                 L    | j                   j                   d| j                   S )Nr8   )r9   rD   _name_r!   s    r   ry   zDeferrable.__repr__|   s"    ..--.a}==r   N)r;   r:   rD   DEFERRED	IMMEDIATEry   r    r   r   r   r   w   s    HI>r   r   c                        e Zd Zdddddddd fd
Zed        Zd Zd Zd Zd	 Z	d
 Z
d Z fdZ fdZdefdZ xZS )r   r    N)fieldsr   	condition
deferrableinclude	opclassesr   c                ,   |st        d      |s|st        d      |r|rt        d      t        |t        d       t        f      st        d      |r|rt        d      |r|rt        d      |r|rt        d      |r|rt        d      |r|rt        d	      t        |t        d       t        f      st        d
      t        |t        d       t
        t        f      st        d      t        |t
        t        f      st        d      |r"t        |      t        |      k7  rt        d      t        |      | _        || _	        || _
        |rt        |      nd| _        || _        t        d |D              | _        t        	| =  ||       y )Nz"A unique constraint must be named.zKAt least one field or expression is required to define a unique constraint.z?UniqueConstraint.fields and expressions are mutually exclusive.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.z5UniqueConstraint with expressions cannot be deferred.zrUniqueConstraint.opclasses cannot be used with expressions. Use django.contrib.postgres.indexes.OpClass() instead.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    c              3   V   K   | ]!  }t        |t              rt        |      n| # y wr   )r{   strr	   )rW   
expressions     r   rY   z,UniqueConstraint.__init__.<locals>.<genexpr>   s*      !
 (
C8AjMjH!
s   ')rG   )
ValueErrorr{   typer   r   listr_   lenr   r   r   r   r   expressionsrM   r   )
r   r   r   r   r   r   r   r   r   r9   s
            r   r   zUniqueConstraint.__init__   s    ABB6%  6Q  )d4j!_5OPPSTTzWXXRSS:TUU9I  *tDz:&>?L  'DJe#<=PQQ)dE]3RSSVI64  Fm"$)0uW~b"  !
)!
 
 	7NOr   c                 ,    t        | j                        S r   )boolr   r!   s    r   r"   z%UniqueConstraint.contains_expressions   s    D$$%%r   c                    | j                   y t        |d      }|j                  | j                         }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFrO   rQ   c              3   @   K   | ]  }j                  |        y wr   rT   rV   s     r   rY   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>   rZ   r[   )r   r   r\   r]   rR   r^   r_   r`   s     `     r   _get_condition_sqlz#UniqueConstraint._get_condition_sql   sy    >>!Ee4!!$..1%%1I1I%Jll8]-E-EFVUHHHHHr   c                     | j                   sy g }| j                   D ]9  }t        |      }|j                  |j                         |j	                  |       ; t        | j                  t        |d            S )NF)rP   )r   r   set_wrapper_classesrR   appendr   resolve_expressionr   )r   r(   r)   index_expressionsr   index_expressions         r   _get_index_expressionsz'UniqueConstraint._get_index_expressions   s|    ** 	7J.z:001I1IJ$$%56	7 01DD%E*
 	
r   c           
         | j                   D cg c]  }|j                  j                  |       }}| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }| j                  ||      }|j                  ||| j                  || j                  || j                  |      S c c}w c c}w N)r   r   r   r   r   )r   rs   	get_fieldr   columnr   r   _unique_sqlr   r   r   r   r(   r)   
field_namer   r   r   r   s           r   r*   zUniqueConstraint.constraint_sql   s    FJkkR
%++''
3RRGK||
9CEKK!!*-44
 
 ++E=A	11%G((IInn# ) 	
 		
 S
   "C
,Cc           
         | j                   D cg c]  }|j                  j                  |       }}| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }| j                  ||      }|j                  ||| j                  || j                  || j                  |      S c c}w c c}w r   )r   rs   r   r   r   r   r   _create_unique_sqlr   r   r   r   s           r   r-   zUniqueConstraint.create_sql   s    FJkkR
%++''
3RRGK||
9CEKK!!*-44
 
 ++E=A	11%G//IInn# 0 	
 		
 S
r   c           	      8   | j                  ||      }| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }|j                  || j                  || j                  || j                  |      S c c}w r   )
r   r   rs   r   r   r   _delete_unique_sqlr   r   r   )r   r(   r)   r   r   r   r   s          r   r/   zUniqueConstraint.remove_sql   s    ++E=A	GK||
9CEKK!!*-44
 
 11%G//IInn# 0 
 	
	
s   ,Bc                    d| j                   j                  d| j                  sdndt        | j                        z  | j                  sdndt        | j                        z  dt        | j
                        z  | j                  dnd| j                  z  | j                  dnd| j                  z  | j                  sdnd	t        | j                        z  | j                  sddS d
t        | j                        z  dS )Nrv   : z
 fields=%sz expressions=%sz name=%sz condition=%sz deferrable=%rz include=%sz opclasses=%srw   )
r9   rD   r   rx   r   r   r   r   r   r   r!   s    r   ry   zUniqueConstraint.__repr__  s    NN''kkB|d4;;6G'GG&&B,=TEUEU@V,VVdii(..(Bo.NN//)B/?$///QQllBT\\8J(JJnnBP	
 		
 +:D<P*PP	
 		
r   c                    t        |t              r| j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S t        | -  |      S r   )r{   r   r   r   r   r   r   r   r   r   rM   r|   r}   s     r   r|   zUniqueConstraint.__eq__  s    e-.		UZZ' RKK5<</RNNeoo5R OOu'7'77R LLEMM1	R
 NNeoo5R $$(9(99R 00E4Q4QQ	 w~e$$r   c                 T   t         |          \  }}}| j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j
                  r| j
                  |d<   | j                  r| j                  |d<   || j                  |fS )Nr   r   r   r   r   )rM   r?   r   r   r   r   r   r   r   s       r   r?   zUniqueConstraint.deconstruct%  s    "W02dF;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;T%%v--r   c           	         |j                   j                  |      }| j                  ri }| j                  D ]p  }|r||v r y |j                  j	                  |      }t        ||j                        }	|	"|	dk(  rt        |   j                  j                  r y |	||j                  <   r  |j                  di |}n'|rv| j                  D ]g  }
t        |
d      r8|
j                         D ]$  }t        |t               s|j                  |v s#  y  Gt        |
t               sX|
j                  |v sg y  |j#                  |j                  |      j%                         D ci c]  \  }}t!        |      | }}}g }| j                  D ]H  }t        |t&              r|j(                  }|j+                  t-        ||j/                  |                   J  |j                  | }|j1                  |j                        }|j2                  j4                  s||j7                  |      }| j8                  s|j;                         rn| j                  rt=        | j?                               |jA                         D ]5  \  }}|D ]+  }|| u st=        |jC                  || j                               7 y y |j#                  |j                  |      }	 | j8                  tE        |j                  | j8                              z  jG                  ||      rt=        | j?                               y c c}}w # tH        $ r Y y w xY w)Nr   flattenro   )pkrq   r    )%_default_managerr3   r   rs   r   rK   attnamer   features!interprets_empty_strings_as_nullsr   filterr   hasattrr   r{   r	   rr   itemsr
   r   r   r   replace_expressions_get_pk_val_stateaddingr2   r   existsr   r6   get_constraintsunique_error_messager   rJ   r   )r   r(   r1   r2   r3   querysetlookup_kwargsr   fieldlookup_valuer   exprvaluereplacementsr   model_class_pkconstraints
constraintrt   s                      r   r4   zUniqueConstraint.validate3  s   ))//6;;M"kk 9
zW4--j9&x?' B&#E*33UU ,8ejj)9 'x77H "&"2"2 Jz95$.$6$6$8 'D)$2tyyG7K &' $J2z'7Q %-$A$Ag %B %%'	 E5 %%L  K(( XdG,??D""5t/G/G/U#VW	X
 'x4H!--ekk:%%.*D''>':H~~ ##)$*J*J*LMM +3*B*B*D &E;&1 
%-"1 ( = =eT[[ Q#  ! 33g3VGNNVHOODNN,K%LLSS5 T  *$*J*J*LMM?F  s   #L.AL4 4	M ?M )r;   r:   rD   r   rE   r"   r   r   r*   r-   r/   ry   r|   r?   r   r4   r   r   s   @r   r   r      sl      $;Pz & &I


$
$
 

%. 15<L @r   r   N)enumr   django.core.exceptionsr   r   	django.dbr   django.db.models.expressionsr   r   r	   r
   django.db.models.indexesr   django.db.models.lookupsr   django.db.models.query_utilsr   django.db.models.sql.queryr   django.db.utilsr   django.utils.translationr   rA   __all__r   r   r   r   r    r   r   <module>r      s]     > ! K K 4 * * , , 6
Q+/ +/\6"n 6"r> >s~ sr   