
    0~hJ                     
   d dl Z d dlmZ 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 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)
FieldErrorValidationError)connections)ExistsExpressionListFOrderBy)IndexExpression)Exact)Q)Query)DEFAULT_DB_ALIAS)RemovedInDjango60Warning)gettext_lazy)BaseConstraintCheckConstraint
DeferrableUniqueConstraintc                   t    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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          e/var/www/peopleoo.sandbox-dev.co.uk/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$,-     c                      y)NF r'   s    r+   contains_expressionsz#BaseConstraint.contains_expressions8   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      r3   r4   r6   s      r+   
create_sqlzBaseConstraint.create_sql?   r:   r-   c                     t        d      r3   r4   r6   s      r+   
remove_sqlzBaseConstraint.remove_sqlB   r:   r-   c                     t        d      r3   r4   )r'   r7   instanceexcludeusings        r+   validatezBaseConstraint.validateE   r:   r-   c                 8    | j                   d| j                  iz  S )Nr   )r   r   r0   s    r+   get_violation_error_messagez*BaseConstraint.get_violation_error_messageH   s    ++vtyy.AAAr-   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   r/   )r    
__module__r!   replacer   r   r"   r   )r'   pathkwargss      r+   deconstructzBaseConstraint.deconstructK   s    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-$$0-1-F-FF)*b&!!r-   c                 N    | j                         \  }}} | j                  |i |S N)rL   r    )r'   _r(   rK   s       r+   clonezBaseConstraint.cloneX   s,    **,4t~~t.v..r-   )r!   rH   __qualname__rO   r"   r   r   r,   propertyr1   r9   r<   r>   r   rC   rE   rL   rP   r/   r-   r+   r   r      sm    &'(P&Q#" TSW-8  TTT 15<L TB"/r-   r   c                   d     e Zd Zd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   r   c                h    || _         t        |dd      st        d      t        |   |||       y )NconditionalFzACheckConstraint.check must be a Q instance or boolean expression.r   )checkgetattrr   superr,   )r'   rV   r   r   r   r    s        r+   r,   zCheckConstraint.__init__^   sE     
umU3S  	!5$; 	 	
r-   c                     t        |d      }|j                  | j                        }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFr7   
alias_cols
connectionc              3   @   K   | ]  }j                  |        y wrN   quote_value.0pr8   s     r+   	<genexpr>z1CheckConstraint._get_check_sql.<locals>.<genexpr>q        HA=44Q7H   )r   build_whererV   get_compilerr]   as_sqltupler'   r7   r8   querywherecompilersqlparamss     `     r+   _get_check_sqlzCheckConstraint._get_check_sqll   sl    Ee4!!$**-%%1I1I%Jll8]-E-EFVUHHHHHr-   c                 ^    | j                  ||      }|j                  | j                  |      S rN   )rq   
_check_sqlr   r'   r7   r8   rV   s       r+   r9   zCheckConstraint.constraint_sqls   s+    ##E=9''		599r-   c                 `    | j                  ||      }|j                  || j                  |      S rN   )rq   _create_check_sqlr   rt   s       r+   r<   zCheckConstraint.create_sqlw   s-    ##E=9..udiiGGr-   c                 :    |j                  || j                        S rN   )_delete_check_sqlr   r6   s      r+   r>   zCheckConstraint.remove_sql{   s    ..udii@@r-   c                     |j                  |j                  |      }	 t        | j                        j                  ||      s%t	        | j                         | j                        y # t        $ r Y y w xY w)NmetarA   rB   code)_get_field_value_map_metar   rV   r   rE   r   r   )r'   r7   r@   rA   rB   againsts         r+   rC   zCheckConstraint.validate~   su    //U[['/R	TZZ=&&we&<%446T=V=V  =  		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: check=z name=  violation_error_code=%r violation_error_message=%r>)r    rQ   rV   reprr   r   r   r"   r0   s    r+   __repr__zCheckConstraint.__repr__   s    NN''JJO ,,4 /$2K2KKL //7//43W3WW  R
 	
 3T5Q5QQR
 	
r-   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 rN   )
isinstancer   r   rV   r   r   rX   __eq__r'   otherr    s     r+   r   zCheckConstraint.__eq__   s    e_-		UZZ' RJJ%++-R--1K1KKR 00E4Q4QQ	 w~e$$r-   c                 P    t         |          \  }}}| j                  |d<   |||fS )NrV   )rX   rL   rV   r'   rJ   r(   rK   r    s       r+   rL   zCheckConstraint.deconstruct   s1    "W02dF**wT6!!r-   )r!   rH   rQ   r,   rq   r9   r<   r>   r   rC   r   r   rL   __classcell__r    s   @r+   r   r   ]   sF    37QU
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 )NrG   )r    rQ   _name_r0   s    r+   r   zDeferrable.__repr__   s"    ..--.a}==r-   N)r!   rH   rQ   DEFERRED	IMMEDIATEr   r/   r-   r+   r   r      s    HI>r-   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 fdZ fdZdefdZ xZS )r   r/   N)	fieldsr   	condition
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.r/   c              3   V   K   | ]!  }t        |t              rt        |      n| # y wrN   )r   strr
   )rb   
expressions     r+   rd   z,UniqueConstraint.__init__.<locals>.<genexpr>   s*      !
 (
C8AjMjH!
s   ')r   )
ValueErrorr   r   r   r   r   listrj   boollenr   r   r   r   r   r   expressionsrX   r,   )r'   r   r   r   r   r   r   r   r   r   r   r    s              r+   r,   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$; 	 	
r-   c                 ,    t        | j                        S rN   )r   r   r0   s    r+   r1   z%UniqueConstraint.contains_expressions   s    D$$%%r-   c                    | j                   y t        |d      }|j                  | j                         }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFrZ   r\   c              3   @   K   | ]  }j                  |        y wrN   r_   ra   s     r+   rd   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  re   rf   )r   r   rg   rh   r]   ri   rj   rk   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)r[   )r   r   set_wrapper_classesr]   appendr	   resolve_expressionr   )r'   r7   r8   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                  || j                  	      S c c}w c c}w N)r   r   r   r   r   r   )r   r   	get_fieldr   columnr   r   _unique_sqlr   r   r   r   r'   r7   r8   
field_namer   r   r   r   s           r+   r9   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                  || j                  	      S c c}w c c}w r   )r   r   r   r   r   r   r   _create_unique_sqlr   r   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           
      N   | j                  ||      }| j                  D cg c]'  }|j                  j                  |      j                  ) }}| j                  ||      }|j                  || j                  || j                  || j                  || j                        S c c}w r   )r   r   r   r   r   r   _delete_unique_sqlr   r   r   r   )r'   r7   r8   r   r   r   r   s          r+   r>   zUniqueConstraint.remove_sql9  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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    rQ   r   r   r   r   r   r   r   r   r   r   r   r"   r0   s    r+   r   zUniqueConstraint.__repr__J  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)
 	
r-   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 rN   )r   r   r   r   r   r   r   r   r   r   r   r   rX   r   r   s     r+   r   zUniqueConstraint.__eq__f  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$$r-   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 )Nr   r   r   r   r   r   )	rX   rL   r   r   r   r   r   r   r   r   s       r+   rL   zUniqueConstraint.deconstructv  s    "W02dF;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;*'+':':F#$T%%v--r-   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 |}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/        ||j1                  |                   J  |j                  | }|j3                  |j                        }|j4                  j6                  s||j9                  |      }| j:                  s|j=                         rz| j                  r%t?        | jA                         | jB                        |jE                         D ]5  \  }}|D ]+  }|| u st?        |jG                  || j                               7 y y |j%                  |j                  |      }	 | j:                  tI        |j                  | j:                              z  jK                  ||      r%t?        | jA                         | jB                        y c c}}w # tL        $ r Y y w xY w)	NFr   flattenrz   )pkr}   r|   r/   )'_default_managerrB   r   r   r   rW   attnamer   r   features!interprets_empty_strings_as_nullsr   filterr   hasattrr   r   r
   r   itemsr   r   r   r   replace_expressions_get_pk_val_stateaddingrA   r   existsr   rE   r   get_constraintsunique_error_messager   rV   r   )r'   r7   r@   rA   rB   querysetlookup_kwargsr   fieldlookup_valuer   exprvaluereplacementsr   model_class_pkconstraints
constraintr   s                      r+   rC   zUniqueConstraint.validate  sN   ))//6;;M"kk 9
zW4--j9&x?''u4$,$*'!"(#D#DE ,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~~ ##)88:!66  +3*B*B*D &E;&1 
%-"1 ( = =eT[[ Q#  ! 33g3VG	NNVHOODNN,K%LLSS5 T  *88:!66 ER  s   1M,A'M 	M&%M&)r!   rH   rQ   r,   rR   r1   r   r   r9   r<   r>   r   r   rL   r   rC   r   r   s   @r+   r   r      sr     ! $D
L & &I


&
&
"
8% .  15<L Lr-   r   )#r#   enumr   typesr   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.deprecationr   django.utils.translationr   rO   __all__r   r   r   r   r/   r-   r+   <module>r      sj       > ! K K 4 * * , , = 6
QG/ G/TJ"n J"Z> >_~ _r-   