
    g|l                     *   d dl 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
 d dl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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)    N)Enum)NoneType)checks)FieldDoesNotExist
FieldErrorValidationError)connections)
LOOKUP_SEP)ExistsExpressionListFRawSQL)IndexExpression)ExactIsNull)Q)Query)DEFAULT_DB_ALIAS)RemovedInDjango60Warning)gettext_lazy)BaseConstraintCheckConstraint
DeferrableUniqueConstraintc                       e Zd Z ed      ZdZdZdddddZed        Z	d Z
d Zd Zdefd	Zd
 Zd Zd Zd Zd Zy)r   u&   Constraint “%(name)s” is violated.Nnameviolation_error_codeviolation_error_messagec                `   |$|s"t        | j                  j                   d      || _        ||| _        ||| _        n| j                  | _        |r[t        j                  d| j                  j                   dt        d       t        |ddg      D ]  \  }}|s	t        | ||        y y )Nz<.__init__() missing 1 required keyword-only argument: 'name'z Passing positional arguments to z is deprecated.   
stacklevelr   r   )	TypeError	__class____name__r   r   r   default_violation_error_messagewarningswarnr   zipsetattr)selfr   r   r   argsargattrs          t/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/models/constraints.py__init__zBaseConstraint.__init__   s     <>>**+ ,# $  	+(<D%".+BD(+/+O+OD(MM24>>3J3J2K L (	 !0I'JK	TD$, L     c                      y)NF r,   s    r0   contains_expressionsz#BaseConstraint.contains_expressions:   s    r2   c                     t        d      Nz.This method must be implemented by a subclass.NotImplementedErrorr,   modelschema_editors      r0   constraint_sqlzBaseConstraint.constraint_sql>       !"RSSr2   c                     t        d      r8   r9   r;   s      r0   
create_sqlzBaseConstraint.create_sqlA   r?   r2   c                     t        d      r8   r9   r;   s      r0   
remove_sqlzBaseConstraint.remove_sqlD   r?   r2   c                     t        d      r8   r9   )r,   r<   instanceexcludeusings        r0   validatezBaseConstraint.validateG   r?   r2   c                 8    | j                   d| j                  iz  S )Nr   )r   r   r5   s    r0   get_violation_error_messagez*BaseConstraint.get_violation_error_messageJ   s    ++vtyy.AAAr2   c                     g S Nr4   )r,   r<   
connections      r0   _checkzBaseConstraint._checkM   s    	r2   c           
         g }t               }|D ]   ^}}|dk7  r|j                  |       |s	 |dk(  r|j                  j                  }n|j                  j	                  |      }|j
                  r|j                  s|j                  r|	 |d   }t        |d      st        |d      s|j                  |      |j                  |      |j                  t        j                  dt        j                   |g|z         z  |d              |j#                  |j%                  |d             |S # t        $ r Y 3w xY w)	Npkr   get_transform
get_lookupz.'constraints' refers to the joined field '%s'.zmodels.E041)objidconstraints)setadd_metarP   	get_fieldis_relationmany_to_manyone_to_manyr   hasattrrQ   rR   appendr   Errorr
   joinextend_check_local_fields)	r,   r<   
referenceserrorsfields
field_namelookupsfieldfirst_lookups	            r0   _check_referencesz BaseConstraint._check_referencesP   s8   $. JT!

:&%!KKNNE!KK11*=E((E,>,>%BSBS CT
 #1:L/E<0''5=$$\2:LLH$//:,*@AB!(	1 %/@ 	e//FG' % s   AD66	EEc                 H   | j                   j                  d| j                   j                  }|j                  dd      }d| j                  i}| j
                  (| j
                  | j                  k7  r| j
                  |d<   | j                  | j                  |d<   |d|fS )N.zdjango.db.models.constraintszdjango.db.modelsr   r   r   r4   )r%   
__module__r&   replacer   r   r'   r   )r,   pathkwargss      r0   deconstructzBaseConstraint.deconstructv   s    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-$$0-1-F-FF)*b&!!r2   c                 N    | j                         \  }}} | j                  |i |S rL   )rq   r%   )r,   _r-   rp   s       r0   clonezBaseConstraint.clone   s,    **,4t~~t.v..r2   )r&   rm   __qualname__rs   r'   r   r   r1   propertyr6   r>   rA   rC   r   rH   rJ   rN   rj   rq   rt   r4   r2   r0   r   r      sx    &'(P&Q#" TSW-8  TTT 15<L TB$L"/r2   r   c                        e Zd Zddddd fd
Zd Zd Z eee      Z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)	conditioncheckr   r   c                    |t        j                  dt        d       |}|| _        t	        |dd      st        d      t        |   |||       y )N=CheckConstraint.check is deprecated in favor of `.condition`.r!   r"   conditionalFzECheckConstraint.condition must be a Q instance or boolean expression.r   )r(   r)   r   rx   getattrr$   superr1   )r,   r   rx   ry   r   r   r%   s         r0   r1   zCheckConstraint.__init__   sg     MMO(
 I"y-7W  	!5$; 	 	
r2   c                 R    t        j                  dt        d       | j                  S Nr{   r!   r"   r(   r)   r   rx   r5   s    r0   
_get_checkzCheckConstraint._get_check   s#    K$	

 ~~r2   c                 J    t        j                  dt        d       || _        y r   r   )r,   values     r0   
_set_checkzCheckConstraint._set_check   s     K$	

 r2   c                    g }|j                   j                  sOd|j                  j                  v s7|j	                  t        j                  |j                   dd|d             |S |j                   j                  sd|j                  j                  vrt               }| j                  }t        |t              r |j                  |j                  |             t        d |j                         D              r6|j	                  t        j                  d| j                   dd	|d
             |j#                  | j%                  ||             |S )N supports_table_check_constraintsz$ does not support check constraints.OA constraint won't be created. Silence this warning if you don't care about it.zmodels.W027hintrS   rT   c              3   <   K   | ]  }t        |t                y wrL   )
isinstancer   ).0exprs     r0   	<genexpr>z)CheckConstraint._check.<locals>.<genexpr>   s     L8K:dF+8Ks   zCheck constraint zS contains RawSQL() expression and won't be validated during the model full_clean().z0Silence this warning if you don't care about it.zmodels.W045)featuresr   rX   required_db_featuresr^   r   Warningdisplay_namerV   rx   r   r   update_get_expr_referencesanyflattenr   ra   rj   )r,   r<   rM   rd   rc   rx   s         r0   rN   zCheckConstraint._check   s0   @@1U[[5U5UUMM!..//ST/ $
> ' @@1;;334 JI)Q'!!%"<"<Y"GHL	8I8I8KLLNN+DII= 9P PO!( MM$00
CDr2   c                     t        |d      }|j                  | j                        }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFr<   
alias_colsrM   c              3   @   K   | ]  }j                  |        y wrL   quote_valuer   pr=   s     r0   r   z1CheckConstraint._get_check_sql.<locals>.<genexpr>        HA=44Q7   )r   build_whererx   get_compilerrM   as_sqltupler,   r<   r=   querywherecompilersqlparamss     `     r0   _get_check_sqlzCheckConstraint._get_check_sql   sl    Ee4!!$..1%%1I1I%Jll8]-E-EFVUHHHHHr2   c                 ^    | j                  ||      }|j                  | j                  |      S rL   )r   
_check_sqlr   r,   r<   r=   ry   s       r0   r>   zCheckConstraint.constraint_sql   s+    ##E=9''		599r2   c                 `    | j                  ||      }|j                  || j                  |      S rL   )r   _create_check_sqlr   r   s       r0   rA   zCheckConstraint.create_sql   s-    ##E=9..udiiGGr2   c                 :    |j                  || j                        S rL   )_delete_check_sqlr   r;   s      r0   rC   zCheckConstraint.remove_sql   s    ..udii@@r2   c                     |j                  |j                  |      }	 t        | j                        j	                  ||      s%t        | j                         | j                        y # t        $ r Y y w xY w)NmetarF   rG   code)	_get_field_expression_maprX   r   rx   ry   r   rJ   r   r   )r,   r<   rE   rF   rG   againsts         r0   rH   zCheckConstraint.validate   sw    44%++w4W	T^^$**7%*@%446T=V=V  A  		s   AA+ +	A76A7c           	      (   d| j                   j                  d| j                  dt        | j                        | j
                  dnd| j
                  z  | j                  | j                  | j                  k(  rdd	S d| j                  z  d	S )N<z: condition=z name=  violation_error_code=%r violation_error_message=%r>)r%   ru   rx   reprr   r   r   r'   r5   s    r0   __repr__zCheckConstraint.__repr__   s    NN''NNO ,,4 /$2K2KKL //7//43W3WW  R
 	
 3T5Q5QQR
 	
r2   c                    t        |t              rj| j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S t        |   |      S rL   )r   r   r   rx   r   r   r~   __eq__r,   otherr%   s     r0   r   zCheckConstraint.__eq__  s    e_-		UZZ' RNNeoo5R--1K1KKR 00E4Q4QQ	 w~e$$r2   c                 P    t         |          \  }}}| j                  |d<   |||fS )Nrx   )r~   rq   rx   r,   ro   r-   rp   r%   s       r0   rq   zCheckConstraint.deconstruct  s2    "W02dF"nn{T6!!r2   )r&   rm   ru   r1   r   r   rv   ry   rN   r   r>   rA   rC   r   rH   r   r   rq   __classcell__r%   s   @r0   r   r      sl     ! $
6 Z,E%NI:HA 15<L 
$%" "r2   r   c                       e Zd ZdZdZd Zy)r   deferred	immediatec                 L    | j                   j                   d| j                   S )Nrl   )r%   ru   _name_r5   s    r0   r   zDeferrable.__repr__$  s"    ..--.a}==r2   N)r&   rm   ru   DEFERRED	IMMEDIATEr   r4   r2   r0   r   r     s    HI>r2   r   c            
            e Zd Zdd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d Z fdZ fdZdefdZ xZS )r   r4   N)	re   r   rx   
deferrableinclude	opclassesnulls_distinctr   r   c       	         `   |st        d      |
s|st        d      |
r|rt        d      t        |t        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        t        f      st        d
      t        |t        t        t        f      st        d      t        |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"        | I  |||	       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.nulls_distinct must be a bool.z]UniqueConstraint.fields and UniqueConstraint.opclasses must have the same number of elements.r4   c              3   V   K   | ]!  }t        |t              rt        |      n| # y wrL   )r   strr   )r   
expressions     r0   r   z,UniqueConstraint.__init__.<locals>.<genexpr>e  s*      !
)
 (
C8AjMjH)s   ')r   )
ValueErrorr   r   r   r   r$   listr   boollenre   rx   r   r   r   r   expressionsr~   r1   )r,   re   r   rx   r   r   r   r   r   r   r   r%   s              r0   r1   zUniqueConstraint.__init__)  s    ABB6%  6Q  )h]3OPPSTTzWXXRSS:TUU9I  *x&<=L  'HdE#:;OPP)dE]3QRR.8T*:;MNNVI64  Fm"$)0uW~b",  !
)!
 
 	!5$; 	 	
r2   c                 ,    t        | j                        S rL   )r   r   r5   s    r0   r6   z%UniqueConstraint.contains_expressionso  s    D$$%%r2   c                    |j                  h | j                  | j                  d      }|j                  j                  }| j
                  O|j                  j                  s9d|v s5|j                  t        j                  |j                   dd|d             | j                  O|j                  j                  s9d|v s5|j                  t        j                  |j                   dd|d	             | j                  rO|j                  j                  s9d
|v s5|j                  t        j                  |j                   dd|d             | j                  rO|j                  j                   s9d|v s5|j                  t        j                  |j                   dd|d             | j"                  O|j                  j$                  s9d|v s5|j                  t        j                  |j                   dd|d             t'               }|j                  j                  sd|vrDt)        | j
                  t*              r*|j-                  |j/                  | j
                               | j                  rK|j                  j                   sd|vr1| j0                  D ]"  }|j-                  |j/                  |             $ |j3                  | j5                  ||             |S )NrU   supports_partial_indexesz5 does not support unique constraints with conditions.r   zmodels.W036r   &supports_deferrable_unique_constraintsz0 does not support deferrable unique constraints.zmodels.W038supports_covering_indexesz: does not support unique constraints with non-key columns.zmodels.W039supports_expression_indexesz4 does not support unique constraints on expressions.zmodels.W044*supports_nulls_distinct_unique_constraintsz9 does not support unique constraints with nulls distinct.zmodels.W047)rb   re   r   rX   r   rx   r   r   r^   r   r   r   r   r   r   r6   r   r   r   rV   r   r   r   r   r   ra   rj   )r,   r<   rM   rd   r   rc   r   s          r0   rN   zUniqueConstraint._checks  s   **+HT[[+H4<<+H-X${{??>>%88)-AAMM!../ 0' '/ $	 ??&FF7;OOMM!../ 0# #/ $	 <<99*.BBMM!../ 0, ,/ $	 $$;;,0DDMM!../ 0# #/ $	 *JJ;?SSMM!../ 0+ +/ $	 U
88)1EE+e88HI$$;;,4HH"..
!!%"<"<Z"HI /d,,UJ?@r2   c                    | j                   y t        |d      }|j                  | j                         }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFr   r   c              3   @   K   | ]  }j                  |        y wrL   r   r   s     r0   r   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  r   r   )rx   r   r   r   rM   r   r   r   s     `     r0   _get_condition_sqlz#UniqueConstraint._get_condition_sql  sy    >>!Ee4!!$..1%%1I1I%Jll8]-E-EFVUHHHHHr2   c                     | j                   sy g }| j                   D ]9  }t        |      }|j                  |j                         |j	                  |       ; t        | j                  t        |d            S )NF)r   )r   r   set_wrapper_classesrM   r^   r   resolve_expressionr   )r,   r<   r=   index_expressionsr   index_expressions         r0   _get_index_expressionsz'UniqueConstraint._get_index_expressions  sw    **J.z:001I1IJ$$%56 + 01DD%E*
 	
r2   c                    | j                   D cg c]  }|j                  j                  |       }}| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }| j                  ||      }|j                  ||| j                  || j                  || j                  || j                  	      S c c}w c c}w N)rx   r   r   r   r   r   )re   rX   rY   r   columnr   r   _unique_sqlr   r   r   r   r,   r<   r=   rf   re   r   rx   r   s           r0   r>   zUniqueConstraint.constraint_sql  s    FJkkRk
%++''
3kRGK||
GSEKK!!*-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                  || j                  	      S c c}w c c}w r   )re   rX   rY   r   r   r   r   _create_unique_sqlr   r   r   r   r   s           r0   rA   zUniqueConstraint.create_sql  s    FJkkRk
%++''
3kRGK||
GSEKK!!*-44| 	 
 ++E=A	11%G//IInn#.. 0 

 
	
 S
r   c           
      N   | j                  ||      }| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }|j                  || j                  || j                  || j                  || j                        S c c}w r   )r   r   rX   rY   r   r   _delete_unique_sqlr   r   r   r   )r,   r<   r=   rx   rf   r   r   s          r0   rC   zUniqueConstraint.remove_sql  s    ++E=A	GK||
GSEKK!!*-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nd
t        | j                        z  | j                  dnd| j                  z  | j                  dnd| j                  z  | j                  | j                  | j                  k(  rddS d| j                  z  dS )Nr   :r   z
 fields=%sz expressions=%sz name=%sz condition=%sz deferrable=%rz include=%sz opclasses=%sz nulls_distinct=%rr   r   r   )r%   ru   re   r   r   r   rx   r   r   r   r   r   r   r'   r5   s    r0   r   zUniqueConstraint.__repr__!  sn   NN''kkB|d4;;6G'GG&&B,=TEUEU@V,VVdii(..(Bo.NN//)B/?$///QQllBT\\8J(JJnnB/D<P*PP &&. )D,?,??@ ,,4 /$2K2KKL //7//43W3WW  R)
 	
. 3T5Q5QQR)
 	
r2   c                 Z   t        |t              r| j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xri | j                  |j                  k(  xrN | j                  |j                  u xr4 | j                  |j                  k(  xr | j                  |j                  k(  S t        | 5  |      S rL   )r   r   r   re   rx   r   r   r   r   r   r   r   r~   r   r   s     r0   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 ''5+?+??	R --1K1KK	R 00E4Q4QQ w~e$$r2   c                    t         |          \  }}}| j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j
                  r| j
                  |d<   | j                  r| j                  |d<   | j                  | j                  |d<   || j                  |fS )Nre   rx   r   r   r   r   )	r~   rq   re   rx   r   r   r   r   r   r   s       r0   rq   zUniqueConstraint.deconstructM  s    "W02dF;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;*'+':':F#$T%%v--r2   c           	         |j                   j                  |      }| j                  ri }| j                  D ]~  }|r||v r y |j                  j	                  |      }t        ||j                        }	| j                  dur|	"|	dk(  rt        |   j                  j                  r y |	||j                  <     |j                  d
i |}ne|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 ]  }t        |d      r|j)                         }|j+                  |      }t-        ||      }| j                  du r,t/        |      t/        t1        |d      t1        |d            z  }|j3                  |         |j                  | }|j5                  |j                        }|j6                  j8                  s||j;                  |      }| j<                  sg|j?                         rV| j                  r%tA        |jC                  || j                              tA        | jE                         | jF                        y |j%                  |j                  |      }	 | j<                  tI        |j                  | j<                              z  jK                  ||	      r%tA        | jE                         | jF                        y c c}}w # tL        $ r Y y w xY w)NFr   r   r   get_expression_for_validationT)rP   r   r   r4   )'_default_managerrG   re   rX   rY   r}   attnamer   r	   r   !interprets_empty_strings_as_nullsr   filterr   r]   r   r   r   r   itemsr  replace_expressionsr   r   r   r^   _get_pk_val_stateaddingrF   rx   existsr   unique_error_messagerJ   r   r   ry   r   )r,   r<   rE   rF   rG   querysetlookup_kwargsrf   rh   lookup_valuer   r   r   replacementsfiltersrhsrx   model_class_pkr   s                      r0   rH   zUniqueConstraint.validate]  sU   ))//6;;M"kk
zW4--j9&x?''u4$,$*'!"(#D#DE ,8ejj)% *& 'x77H "&"2"2Jz95$.$6$6$8D)$2tyyG7K & %9 $J2z'7Q #3 %-$F$Fg %G %%'%%LE5 %%%   G((4!@A==?D..|<!$,	&&%/ !)qd1CVCQUEV/W WIy) ) 'x0H!--ekk:%%.*D''>':H~~ ;; * 55eT[[I  &44622  ! 88[[' 9 G	NNVHOODNN,K%LLSS5 T  *88:!66 IV  s   1M.A'M4 4	N ?N )r&   rm   ru   r1   rv   r6   rN   r   r   r>   rA   rC   r   r   rq   r   rH   r   r   s   @r0   r   r   (  sy     ! $D
L & &`DI


&
&
"
8% .  15<L Nr2   r   ))r(   enumr   typesr   django.corer   django.core.exceptionsr   r   r   	django.dbr	   django.db.models.constantsr
   django.db.models.expressionsr   r   r   r   django.db.models.indexesr   django.db.models.lookupsr   r   django.db.models.query_utilsr   django.db.models.sql.queryr   django.db.utilsr   django.utils.deprecationr   django.utils.translationr   rs   __all__r   r   r   r   r4   r2   r0   <module>r#     ss        Q Q ! 1 J J 4 2 * , , = 6
Qp/ p/fT"n T"n> >C~ Cr2   