
    sgh%t                     *   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Zd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_messagenamer   r   c                `   |$|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          `/var/www/enzed_healthcare/enzed_env/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    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_sqlC   r?   r2   c                     t        d      r8   r9   r;   s      r0   
remove_sqlzBaseConstraint.remove_sqlF   r?   r2   c                     |j                   j                  }|j                  |      D ]>  ^}}||v r y ||      }|j                  s | j	                  ||j
                  |      s> y y)NTF)_meta	get_field_get_expr_references	generated_expression_refs_exclude
expression)clsr<   rJ   excluderF   
field_name__fields           r0   rI   z'BaseConstraint._expression_refs_excludeI   so    KK))	$99*E 	OJW$j)E3#?#?u''$ 	 r2   c                     t        d      r8   r9   )r,   r<   instancerL   usings        r0   validatezBaseConstraint.validateV   r?   r2   c                 8    | j                   d| j                  iz  S )Nr   )r   r   r5   s    r0   get_violation_error_messagez*BaseConstraint.get_violation_error_messageY   s    ++vtyy.AAAr2   c                     g S Nr4   )r,   r<   
connections      r0   _checkzBaseConstraint._check\   s    	r2   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         z  |d             # |j)                  |j+                  |d	             |S # t        $ r Y Sw xY w)
Nr   )CompositePrimaryKeypkget_transform
get_lookupz.'constraints' refers to the joined field '%s'.zmodels.E041)objidconstraints)!django.db.models.fields.compositer[   set
isinstancerE   r\   addrF   is_relationmany_to_manyone_to_manyr   hasattrr]   r^   appendr   Errorr
   joinextend_check_local_fields)
r,   r<   
referencesr[   errorsfieldsrM   lookupsrO   first_lookups
             r0   _check_referencesz BaseConstraint._check_references_   sR   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   r4   )r%   
__module__r&   replacer   r   r'   r   )r,   pathkwargss      r0   deconstructzBaseConstraint.deconstruct   s    ..33T^^5L5LM||:<NO$))$((4,,0T0TT040L0LF,-$$0-1-F-FF)*b&!!r2   c                 N    | j                         \  }}} | j                  |i |S rW   )r{   r%   )r,   _r-   rz   s       r0   clonezBaseConstraint.clone   s,    **,4t~~t.v..r2   )r&   rw   __qualname__r}   r'   r   r   non_db_attrsr1   propertyr6   r>   rA   rC   classmethodrI   r   rS   rU   rY   rt   r{   r~   r4   r2   r0   r   r      s    &'(P&Q#"FL TSW-8  TTT 
 
 15<L TB&P"/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   r   getattrr$   superr1   )r,   r   r   r   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   r   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hintr_   r`   c              3   <   K   | ]  }t        |t                y wrW   )rd   r   ).0exprs     r0   	<genexpr>z)CheckConstraint._check.<locals>.<genexpr>   s     L:dF+Ls   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   rE   required_db_featuresrj   r   Warningdisplay_namerc   r   rd   r   updaterG   anyflattenr   rm   rt   )r,   r<   rX   rp   ro   r   s         r0   rY   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rX   c              3   @   K   | ]  }j                  |        y wrW   quote_valuer   pr=   s     r0   r   z1CheckConstraint._get_check_sql.<locals>.<genexpr>        HA=44Q7H   )r   build_wherer   get_compilerrX   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 rW   )r   
_check_sqlr   r,   r<   r=   r   s       r0   r>   zCheckConstraint.constraint_sql   s+    ##E=9''		599r2   c                 `    | j                  ||      }|j                  || j                  |      S rW   )r   _create_check_sqlr   r   s       r0   rA   zCheckConstraint.create_sql   s-    ##E=9..udiiGGr2   c                 :    |j                  || j                        S rW   )_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metarL   rR   code)	_get_field_expression_maprE   r   r   r   r   rU   r   r   )r,   r<   rQ   rL   rR   againsts         r0   rS   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%   r   r   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 rW   )rd   r   r   r   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 )Nr   )r   r{   r   r,   ry   r-   rz   r%   s       r0   r{   zCheckConstraint.deconstruct*  s2    "W02dF"nn{T6!!r2   )r&   rw   r   r1   r   r   r   r   rY   r   r>   rA   rC   r   rS   r   r   r{   __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 )Nrv   )r%   r   _name_r5   s    r0   r   zDeferrable.__repr__5  s"    ..--.a}==r2   N)r&   rw   r   DEFERRED	IMMEDIATEr   r4   r2   r0   r   r   0  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)	rq   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.r4   c              3   V   K   | ]!  }t        |t              rt        |      n| # y wrW   )rd   strr   )r   rJ   s     r0   r   z,UniqueConstraint.__init__.<locals>.<genexpr>v  s*      !
 (
C8AjMjH!
s   ')r   )
ValueErrorrd   r   r   r   r$   listr   boollenrq   r   r   r   r   r   expressionsr   r1   )r,   rq   r   r   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 rW   )r   r   r5   s    r0   r6   z%UniqueConstraint.contains_expressions  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 )Nra   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)rn   rq   r   rE   r   r   r   r   rj   r   r   r   r   r   r   r6   r   r   r   rc   rd   r   r   rG   r   rm   rt   )r,   r<   rX   rp   r   ro   rJ   s          r0   rY   zUniqueConstraint._check  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".. J
!!%"<"<Z"HIJ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rW   r   r   s     r0   r   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  r   r   )r   r   r   r   rX   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_classesrX   rj   r   resolve_expressionr   )r,   r<   r=   index_expressionsrJ   index_expressions         r0   _get_index_expressionsz'UniqueConstraint._get_index_expressions  s|    ** 	7J.z:001I1IJ$$%56	7 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)r   r   r   r   r   r   )rq   rE   rF   r   columnr   r   _unique_sqlr   r   r   r   r,   r<   r=   rM   rq   r   r   r   s           r0   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                  || j                  	      S c c}w c c}w r   )rq   rE   rF   r   r   r   r   _create_unique_sqlr   r   r   r   r   s           r0   rA   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   rE   rF   r   r   _delete_unique_sqlr   r   r   r   )r,   r<   r=   r   rM   r   r   s          r0   rC   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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%   r   rq   r   r   r   r   r   r   r   r   r   r   r'   r5   s    r0   r   zUniqueConstraint.__repr__2  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 rW   )rd   r   r   rq   r   r   r   r   r   r   r   r   r   r   r   s     r0   r   zUniqueConstraint.__eq__N  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 )Nrq   r   r   r   r   r   )	r   r{   rq   r   r   r   r   r   r   r   s       r0   r{   zUniqueConstraint.deconstruct^  s    "W02dF;;#{{F8>>"&..F;??#'??F< << $F9>>"&..F;*'+':':F#$T%%v--r2   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 |j!                  j                        }	  jB                  tU        |j+                   jB                              z  jW                  ||	      r%tM         jQ                          jR                        y c c}}	w # tX        $ r Y y w xY w)
NFr   r   Tc              3   D   K   | ]  }j                  |        y wrW   )rI   )r   rJ   rL   r<   r,   s     r0   r   z,UniqueConstraint.validate.<locals>.<genexpr>  s(       --eZIs    get_expression_for_validation)r\   r   r   )-_default_managerrR   rq   rE   rF   rH   rI   rJ   rj   r   r   attnamer   r	   r   !interprets_empty_strings_as_nullsr   r   r   r   r   filterr   r   itemsri   r  replace_expressions_get_pk_val_stateadding
_is_pk_setrL   r   existsr   r'   unique_error_messager   r   rU   r   r   r   r   )r,   r<   rQ   rL   rR   querysetlookup_kwargsgenerated_field_namesrM   rO   lookup_valuelookup_argsfield_expression_maprJ   lhsr   r   replacementsfiltersr   rhsmodel_class_pkvalidation_error_messager   s   `` `                    r0   rS   zUniqueConstraint.validaten  s5   ))//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 ($ #8 	?J!5j!AJ**e3
m$%eC&<$="3-vj$/GA %	 $**954>j1	? 'xE}EH 3 "&"2"2   %-$F$Fg %G %%'	 E5 %%L  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  !( 88[[' 9 G	NNVHOODNN,K%LLSS5 T  *88:!66 Yf  s   >P;A'Q 	QQ)r&   rw   r   r1   r   r6   rY   r   r   r>   rA   rC   r   r   r{   r   rS   r   r   s   @r0   r   r   9  sy     ! $D
L & &`DI


&
&
"
8% .  15<L j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   r}   __all__r   r   r   r   r4   r2   r0   <module>r3     ss        Q Q ! 1 J J 4 2 * , , = 6
QA/ A/HT"n T"n> >_~ _r2   