
    `?im                        d dl m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 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 g dZ  G d d      Z! G d de!      Z" G d de      Z# G d de!      Z$y)    )Enum)NoneType)checks)FieldDoesNotExistValidationError)connections)
LOOKUP_SEP)ExistsExpressionListFRawSQL)IndexExpression)ExactIsNull)Q)Query)DEFAULT_DB_ALIAS)gettext_lazy)BaseConstraintCheckConstraint
DeferrableUniqueConstraintc                       e Zd Z ed      ZdZdZdZddddZe	d        Z
d Zd Zd Ze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violation_error_codeviolation_error_messagec                Z    || _         ||| _        ||| _        y | j                  | _        y N)namer   r   default_violation_error_message)selfr   r   r   s       n/home/cursorai/projects/django-cronjob-utils/venv/lib/python3.12/site-packages/django/db/models/constraints.py__init__zBaseConstraint.__init__   s5     	+(<D%".+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,   r1   r$   c                     t        d      r*   r+   r-   s      r"   
remove_sqlzBaseConstraint.remove_sql/   r1   r$   c                 (   |j                   j                  }|j                  |      D ]h  ^}}|dk(  r|j                   j                  }n ||      }||v s|j                  |v r y|j
                  sJ| j                  ||j                  |      sh y y)NpkTF)_meta	get_field_get_expr_referencesr7   r   	generated_expression_refs_exclude
expression)clsr.   r=   excluder9   
field_name__fields           r"   r<   z'BaseConstraint._expression_refs_exclude2   s    KK))	$99*EOJT!!*-W$

g(=3#?#?u''$   F r$   c                     t        d      r*   r+   )r!   r.   instancer?   usings        r"   validatezBaseConstraint.validateB   r1   r$   c                 8    | j                   d| j                  iz  S )Nr   )r   r   r'   s    r"   get_violation_error_messagez*BaseConstraint.get_violation_error_messageE   s    ++vtyy.AAAr$   c                     g S r   r&   )r!   r.   
connections      r"   checkzBaseConstraint.checkH   s    	r$   c           
         ddl m} g }t               }|D ]  ^}}|dk7  s t        |j                  j
                  |      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  |d             " |j)                  |j+                  |d	             |S # t        $ r Y Rw xY w)
Nr   )CompositePrimaryKeyr7   get_transform
get_lookupz.'constraints' refers to the joined field '%s'.zmodels.E041)objidconstraints)!django.db.models.fields.compositerM   set
isinstancer8   r7   addr9   is_relationmany_to_manyone_to_manyr   hasattrrN   rO   appendr   Errorr	   joinextend_check_local_fields)
r!   r.   
referencesrM   errorsfieldsr@   lookupsrB   first_lookups
             r"   _check_referencesz BaseConstraint._check_referencesK   sN   I$. JT!Z@S%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E	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   r&   )	__class__
__module____name__replacer   r   r    r   )r!   pathkwargss      r"   deconstructzBaseConstraint.deconstructs   s    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-$$0-1-F-FF)*b&!!r$   c                 N    | j                         \  }}} | j                  |i |S r   )rn   rh   )r!   _argsrm   s       r"   clonezBaseConstraint.clone   s,    **,4t~~t.v..r$   )rj   ri   __qualname__rp   r    r   r   non_db_attrsr#   propertyr(   r0   r3   r5   classmethodr<   r   rF   rH   rK   re   rn   rr   r&   r$   r"   r   r      s    &'(P&Q#"FL -1$	P  TTT   15<L TB&P"/r$   r   c                   j     e Zd Zddd fd
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   Nr   c                h    || _         t        |dd      st        d      t        |   |||       y )NconditionalFzECheckConstraint.condition must be a Q instance or boolean expression.r   r   r   )	conditiongetattr	TypeErrorsuperr#   )r!   r{   r   r   r   rh   s        r"   r#   zCheckConstraint.__init__   sE     #y-7W  	!5$; 	 	
r$   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hintrP   rQ   c              3   <   K   | ]  }t        |t                y wr   )rU   r   ).0exprs     r"   	<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   r8   required_db_featuresr[   r   Warningdisplay_namerT   r{   rU   r   updater:   anyflattenr   r^   re   )r!   r.   rJ   ra   r`   r{   s         r"   rK   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r$   c                     t        |d      }|j                  | j                        }|j                  j                        }|j                  |j                        \  }}|t        fd|D              z  S )NFr.   
alias_colsrJ   c              3   @   K   | ]  }j                  |        y wr   quote_valuer   pr/   s     r"   r   z1CheckConstraint._get_check_sql.<locals>.<genexpr>        HA=44Q7   )r   build_wherer{   get_compilerrJ   as_sqltupler!   r.   r/   querywherecompilersqlparamss     `     r"   _get_check_sqlzCheckConstraint._get_check_sql   sl    Ee4!!$..1%%1I1I%Jll8]-E-EFVUHHHHHr$   c                 ^    | j                  ||      }|j                  | j                  |      S r   )r   
_check_sqlr   r!   r.   r/   rK   s       r"   r0   zCheckConstraint.constraint_sql   s+    ##E=9''		599r$   c                 `    | j                  ||      }|j                  || j                  |      S r   )r   _create_check_sqlr   r   s       r"   r3   zCheckConstraint.create_sql   s-    ##E=9..udiiGGr$   c                 :    |j                  || j                        S r   )_delete_check_sqlr   r-   s      r"   r5   zCheckConstraint.remove_sql   s    ..udii@@r$   c                    |j                  |j                  |      }|r| j                  || j                  |      ry t	        | j                        j                  ||      s%t        | j                         | j                        y )Nmetar?   rE   code)	_get_field_expression_mapr8   r<   r{   r   rK   r   rH   r   )r!   r.   rD   r?   rE   againsts         r"   rF   zCheckConstraint.validate   sx    44%++w4Wt44UDNNGT &&we&<!0029R9R  =r$   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>)rh   rs   r{   reprr   r   r   r    r'   s    r"   __repr__zCheckConstraint.__repr__   s    NN''NN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 r   )rU   r   r   r{   r   r   r~   __eq__r!   otherrh   s     r"   r   zCheckConstraint.__eq__   s    e_-		UZZ' RNNeoo5R--1K1KKR 00E4Q4QQ	 w~e$$r$   c                 P    t         |          \  }}}| j                  |d<   |||fS )Nr{   )r~   rn   r{   r!   rl   rq   rm   rh   s       r"   rn   zCheckConstraint.deconstruct   s2    "W02dF"nn{T6!!r$   )rj   ri   rs   r#   rK   r   r0   r3   r5   r   rF   r   r   rn   __classcell__rh   s   @r"   r   r      sN     " $
&%N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   )rh   rs   _name_r'   s    r"   r   zDeferrable.__repr__  s"    ..--.a}==r$   N)rj   ri   rs   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d Z fdZ fdZdefdZ xZS )r   r&   N)	rb   r   r{   
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r   )rU   strr   )r   r=   s     r"   r   z,UniqueConstraint.__init__.<locals>.<genexpr>D  s*      !
)
 (
C8AjMjH)s   ')rz   )
ValueErrorrU   r   r   r   r}   listr   boollenrb   r{   r   r   r   r   expressionsr~   r#   )r!   rb   r   r{   r   r   r   r   r   r   r   rh   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 r   )r   r   r'   s    r"   r(   z%UniqueConstraint.contains_expressionsN  s    D$$%%r$   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 )NrR   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)r_   rb   r   r8   r   r{   r   r   r[   r   r   r   r   r   r   r(   r   r   r   rT   rU   r   r   r:   r   r^   re   )r!   r.   rJ   ra   r   r`   r=   s          r"   rK   zUniqueConstraint.checkR  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?@r$   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r   r   r   s     r"   r   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  r   r   )r{   r   r   r   rJ   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)r   )r   r   set_wrapper_classesrJ   r[   r   resolve_expressionr   )r!   r.   r/   index_expressionsr=   index_expressions         r"   _get_index_expressionsz'UniqueConstraint._get_index_expressions  sw    **J.z:001I1IJ$$%56 + 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   )rb   r8   r9   r   columnr   r   _unique_sqlr   r   r   r   r!   r.   r/   r@   rb   r   r{   r   s           r"   r0   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   )rb   r8   r9   r   r   r   r   _create_unique_sqlr   r   r   r   r   s           r"   r3   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   r8   r9   r   r   _delete_unique_sqlr   r   r   r   )r!   r.   r/   r{   r@   r   r   s          r"   r5   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   )rh   rs   rb   r   r   r   r{   r   r   r   r   r   r   r    r'   s    r"   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)
 	
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 r   )rU   r   r   rb   r{   r   r   r   r   r   r   r   r~   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 ''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 )Nrb   r{   r   r   r   r   )	r~   rn   rb   r{   r   r   r   r   r   r   s       r"   rn   zUniqueConstraint.deconstruct,  s    "W02dF;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;*'+':':F#$T%%v--r$   c           	          j                   j                  |      } j                  ri }g } j                  D ]  }r|v r y j                  j	                  |      }	|	j
                  r=r j                  |	j                        r y |j                  |	j                         ot        ||	j                        }
 j                  dur|
"|
dk(  rt        |   j                  j                  r y |
||	j                  <    g }|r|j!                  j                        }|D ]m  }||   } j                  du rSt#        |      }t%        t'        ||            t%        t)        |d      t)        |d            z  }|j                  |       i|||<   o  |j*                  |i |}nr!t-         fd j.                  D              ry |j!                  j                        j1                         D 	ci c]  \  }	}t#        |	      | }}	}g } j.                  D ]  }t3        |d      r|j5                         }|j7                  |      }t'        ||      } j                  du r,t%        |      t%        t)        |d      t)        |d            z  }|j                  |         |j*                  | }|j9                  j                        }|j:                  j<                  s-|j?                  j                        r|jA                  |      } jB                  s|jE                         r} j                  rL jF                   jH                  k(  r3|jK                   j                        }tM        ||jN                        tM         jQ                          jR                        y r j                   jB                        ry |j!                  j                        } jB                  tU        |j+                   jB                              z  jW                  ||	      r%tM         jQ                          jR                        y c c}}	w )
NFr   r   Tc              3   D   K   | ]  }j                  |        y wr   )r<   )r   r=   r?   r.   r!   s     r"   r   z,UniqueConstraint.validate.<locals>.<genexpr>m  s(      "2J --eZI"2s    get_expression_for_validation)r7   r   r   ),_default_managerrE   rb   r8   r9   r;   r<   r=   r[   r   r|   attnamer   r   r   !interprets_empty_strings_as_nullsr   r   r   r   r   filterr   r   itemsrZ   r   replace_expressions_get_pk_val_stateadding
_is_pk_setr?   r{   existsr   r    unique_error_messager   r   rH   r   r
   rK   )r!   r.   rD   r?   rE   querysetlookup_kwargsgenerated_field_namesr@   rB   lookup_valuelookup_argsfield_expression_mapr=   lhsr{   valuereplacementsfiltersr   rhsmodel_class_pkvalidation_error_messager   s   `` `                    r"   rF   zUniqueConstraint.validate<  s:   ))//6;;M$&!"kk
zW4--j9??4#@#@u//$ )00<#*8U]]#CL++58(0(B. + %!&h'H'H!I 0<M%**-3 *4 K$'/'I'Ig (J ($ #8J!5j!AJ**e3
m$%eC&<$="3-vj$/GA %	 $**954>j1 #8 'xE}EH 3 "&"2"2   %-$F$Fg %G %%'%%LE5 %%%   G((4!@A==?D..|<!$,	&&%/ !)qd1CVCQUEV/W WIy) ) 'x0H!--ekk:%%(*=*=ekk*J''>':H~~ KK44;;<
 08/L/Lt{{0, *05::  &44622  !* 488t~~w 88[[' 9 G (G!HHOOu P  &44622 as   >Q)rj   ri   rs   r#   ru   r(   rK   r   r   r0   r3   r5   r   r   rn   r   rF   r   r   s   @r"   r   r     sy     ! $D
L & &`DI


&
&
"
8% .  15<L lr$   r   N)%enumr   typesr   django.corer   django.core.exceptionsr   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.translationr   rp   __all__r   r   r   r   r&   r$   r"   <module>r      sj       E ! 1 J J 4 2 * , , 6
Qo/ o/dv"n v"r> >a~ ar$   