
    Evg|l                     D   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(dS )    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dS )r   u&   Constraint “%(name)s” is violated.Nnameviolation_error_codeviolation_error_messagec                D   ||st          | j        j         d          || _        ||| _        ||| _        n| j        | _        |rUt          j        d| j        j         dt          d           t          |ddg          D ]\  }}|rt          | ||           d S d S )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          Y/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/models/constraints.py__init__zBaseConstraint.__init__   s     <<>* $ $ $   	+(<D%".+BD((+/+OD( 		-M4>3J   (	    !0I'JKK - -	T -D$,,,		- 		-- -    c                     dS )NF r,   s    r0   contains_expressionsz#BaseConstraint.contains_expressions:   s    ur2   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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                 $    | j         d| j        iz  S )Nr   )r   r   r5   s    r0   get_violation_error_messagez*BaseConstraint.get_violation_error_messageJ   s    +vty.AAAr2   c                     g S Nr4   )r,   r<   
connections      r0   _checkzBaseConstraint._checkM   s    	r2   c           
         g }t                      }|D ]^}}|dk    r|                    |           |s#	 |dk    r|j        j        }n|j                            |          }|j        r|j        s|j        rgn# t          $ r Y tw xY w|d         }t          |d          r}t          |d          rm|
                    |          X|                    |          C|                    t          j        dt          j        |g|z             z  |d                     |                    |                    |d                     |S )	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   s   $. 	 	 JT!!

:&&& %%!KNEE!K11*==E( E,> %BS $    #1:L//E<00 ''55=$$\22:LH$/:,*@AAB!(	     	e//FFGGGs   AA;;
BBc                     | j         j        d| j         j        }|                    dd          }d| j        i}| j        | j        | j        k    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33T^5L5LM||:<NOO$)$(4,0TTT040LF,-$0-1-FF)*b&!!r2   c                 L    |                                  \  }}} | j        |i |S rL   )rq   r%   )r,   _r-   rp   s       r0   clonezBaseConstraint.clone   s0    **,,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      s       &'a(P&Q&Q#" TSW- - - - -8   XT T TT T TT T T 15<L T T T TB B 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                                          |||           d S )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__   s     MO(   
 I"y-77 	W   	!5$; 	 	
 	
 	
 	
 	
r2   c                 H    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                 L    t          j        dt          d           || _        d S r   r   )r,   values     r0   
_set_checkzCheckConstraint._set_check   s1    K$	
 	
 	
 	

 r2   c                    g }|j         j        sBd|j        j        v s4|                    t          j        |j         dd|d                     n|j         j        sd|j        j        vrt                      }| j	        }t          |t                    r(|                    |                    |                     t          d |                                D                       r4|                    t          j        d| j        dd	|d
                     |                    |                     ||                     |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                    V  d S rL   )
isinstancer   ).0exprs     r0   	<genexpr>z)CheckConstraint._check.<locals>.<genexpr>   s,      LL:dF++LLLLLLr2   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   s   @"	E1U[5UUUMM!.TTT/ $  
 
 
 
 @	E1;34 4 JI)Q'' I!!%"<"<Y"G"GHHHLL	8I8I8K8KLLLLL 	NPDI P P PO!(     MM$00
CCDDDr2   c                    t          |d          }|                    | j                  }|                    j                  }|                    |j                  \  }}|t          fd|D                       z  S )NFr<   
alias_colsrM   c              3   B   K   | ]}                     |          V  d S rL   quote_valuer   pr=   s     r0   r   z1CheckConstraint._get_check_sql.<locals>.<genexpr>   1      HHA=44Q77HHHHHHr2   )r   build_whererx   get_compilerrM   as_sqltupler,   r<   r=   querywherecompilersqlparamss     `     r0   _get_check_sqlzCheckConstraint._get_check_sql   s    Ee444!!$.11%%1I%JJll8]-EFFVUHHHHHHHHHHHr2   c                 d    |                      ||          }|                    | j        |          S rL   )r   
_check_sqlr   r,   r<   r=   ry   s       r0   r>   zCheckConstraint.constraint_sql   s/    ##E=99''	5999r2   c                 f    |                      ||          }|                    || j        |          S rL   )r   _create_check_sqlr   r   s       r0   rA   zCheckConstraint.create_sql   s1    ##E=99..udiGGGr2   c                 8    |                     || j                  S rL   )_delete_check_sqlr   r;   s      r0   rC   zCheckConstraint.remove_sql   s    ..udi@@@r2   c                    |                     |j        |          }	 t          | j                                      ||          s(t          |                                 | j                  d S # t          $ r Y d S 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   s    44%+w4WW	T^$$**7%*@@ %4466T=V      	 	 	DD	s   AA1 1
A?>A?c           	          d| j         j        d| j        dt          | j                  | j        dn	d| j        z  | j        | j        | j        k    rdn	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     N'''NNNOOO ,4 /$2KKL /7/43WWW  3T5QQR R
 	
r2   c                     t          |t                    r@| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S t                                          |          S rL   )r   r   r   rx   r   r   r~   __eq__r,   otherr%   s     r0   r   zCheckConstraint.__eq__  sz    e_-- 		UZ' RNeo5R-1KKR 0E4QQ	 ww~~e$$$r2   c                 j    t                                                      \  }}}| j        |d<   |||fS )Nrx   )r~   rq   rx   r,   ro   r-   rp   r%   s       r0   rq   zCheckConstraint.deconstruct  s8    "WW0022dF"n{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      s3        ! $
 
 
 
 
 
 
6     HZ,,E% % %NI I I: : :H H HA A A 15<L    
 
 
$% % % % %" " " " " " " " "r2   r   c                       e Zd ZdZdZd ZdS )r   deferred	immediatec                 .    | j         j         d| j         S )Nrl   )r%   ru   _name_r5   s    r0   r   zDeferrable.__repr__$  s    .-=====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       	         d   |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          |          k    rt          d          t          |          | _
        || _        || _        |rt          |          nd| _        || _        || _        t          d |
D                       | _        t#                                          |||	           d S )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   b   K   | ]*}t          |t                    rt          |          n|V  +d S rL   )r   strr   )r   
expressions     r0   r   z,UniqueConstraint.__init__.<locals>.<genexpr>e  sO       !
 !
 (
C88HAjMMMj!
 !
 !
 !
 !
 !
r2   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     	CABBB 	6 	%    	6 	Q   )h]33 	QOPPP 	U 	USTTT 	Yz 	YWXXX 	T 	TRSSS 	V: 	VTUUU 	9 	I   *x&<== 	L   'HdE#:;; 	QOPPP)dE]33 	SQRRR.8T*:;; 	OMNNN 	VI664   Fmm"$)08uW~~~b",  !
 !
)!
 !
 !
 
 
 	!5$; 	 	
 	
 	
 	
 	
r2   c                 *    t          | j                  S rL   )r   r   r5   s    r0   r6   z%UniqueConstraint.contains_expressionso  s    D$%%%r2   c                    |                     h | j        | j        d          }|j        j        }| j        C|j        j        s7d|v s3|                    t          j
        |j         dd|d                     | j        C|j        j        s7d|v s3|                    t          j
        |j         dd|d	                     | j        rC|j        j        s7d
|v s3|                    t          j
        |j         dd|d                     | j        rC|j        j        s7d|v s3|                    t          j
        |j         dd|d                     | j        C|j        j        s7d|v s3|                    t          j
        |j         dd|d                     t'                      }|j        j        sd|vrGt)          | j        t*                    r-|                    |                    | j                             | j        rB|j        j        sd|vr2| j        D ]*}|                    |                    |                     +|                    |                     ||                     |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  sK   **+HT[+H4<+H-XX${?>%8 &)-AAAMM!. ' ' '/ $	 	 	   ?&F '7;OOOMM!. # # #/ $	 	 	   < 	9	*.BBBMM!. , , ,/ $	 	 	   $ 	;	,0DDDMM!. # # #/ $	 	 	   *J +;?SSSMM!. + + +/ $	 	 	   UU
8	J)1EEE++ Fe88HHIII$ 	J;	J,4HHH". J J
!!%"<"<Z"H"HIIIId,,UJ??@@@r2   c                    | j         d S t          |d          }|                    | j                   }|                    j                  }|                    |j                  \  }}|t          fd|D                       z  S )NFr   r   c              3   B   K   | ]}                     |          V  d S rL   r   r   s     r0   r   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>  r   r2   )rx   r   r   r   rM   r   r   r   s     `     r0   _get_condition_sqlz#UniqueConstraint._get_condition_sql  s    >!4Ee444!!$.11%%1I%JJll8]-EFFVUHHHHHHHHHHHr2   c                     | j         sd S g }| j         D ]@}t          |          }|                    |j                   |                    |           At          |                     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  s     	4* 	7 	7J.z::001IJJJ$$%5666601DD%E***
 
 	
r2   c                    fd| j         D             }fd| j        D             }|                     |          }|                     |          }|                    || j        || j        || j        || j        	  	        S )Nc                 D    g | ]}j                             |          S r4   rX   rY   r   rf   r<   s     r0   
<listcomp>z3UniqueConstraint.constraint_sql.<locals>.<listcomp>  )    RRR
%+''
33RRRr2   c                 N    g | ]!}j                             |          j        "S r4   rX   rY   columnr   s     r0   r   z3UniqueConstraint.constraint_sql.<locals>.<listcomp>  9     
 
 
9CEK!!*--4
 
 
r2   rx   r   r   r   r   r   )	re   r   r   r   _unique_sqlr   r   r   r   r,   r<   r=   re   r   rx   r   s    `     r0   r>   zUniqueConstraint.constraint_sql  s    RRRRdkRRR
 
 
 
GK|
 
 
 ++E=AA	11%GG((In#. ) 

 

 
	
r2   c                    fd| j         D             }fd| j        D             }|                     |          }|                     |          }|                    || j        || j        || j        || j        	  	        S )Nc                 D    g | ]}j                             |          S r4   r   r   s     r0   r   z/UniqueConstraint.create_sql.<locals>.<listcomp>  r   r2   c                 N    g | ]!}j                             |          j        "S r4   r   r   s     r0   r   z/UniqueConstraint.create_sql.<locals>.<listcomp>  r   r2   r   )	re   r   r   r   _create_unique_sqlr   r   r   r   r   s    `     r0   rA   zUniqueConstraint.create_sql  s    RRRRdkRRR
 
 
 
GK|
 
 
 ++E=AA	11%GG//In#. 0 

 

 
	
r2   c           
          |                      |          }fd| j        D             }|                     |          }|                    | j        || j        || j        || j                  S )Nc                 N    g | ]!}j                             |          j        "S r4   r   r   s     r0   r   z/UniqueConstraint.remove_sql.<locals>.<listcomp>  r   r2   r   )r   r   r   _delete_unique_sqlr   r   r   r   )r,   r<   r=   rx   r   r   s    `    r0   rC   zUniqueConstraint.remove_sql  s    ++E=AA	
 
 
 
GK|
 
 
 11%GG//In#. 0 	
 	
 		
r2   c                 0   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n	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__!  se    N'''kGBB|d4;6G6G'GG&VBB,=TEU@V@V,VVdi((.(BBo.NN/)BB/?$//QQlJBBT\8J8J(JJnPBB/D<P<P*PP &. )D,??@ ,4 /$2KKL /7/43WWW  3T5QQR R)
 	
r2   c                    t          |t                    r| j        |j        k    o| j        |j        k    o}| j        |j        k    om| j        |j        k    o]| j        |j        k    oM| j        |j        k    o=| j        |j        k    o-| j	        |j	        u o| j
        |j
        k    o| j        |j        k    S t                                          |          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-.. 		UZ' 	RK5</	RNeo5	R Ou'77	R LEM1		R
 Neo5	R $(99	R '5+??	R -1KK	R 0E4QQ ww~~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    "WW0022dF; 	+#{F8> 	1"&.F;? 	3#'?F< < 	- $F9> 	1"&.F;*'+':F#$T%v--r2   c           	         |j                             |          }| j        ri }| j        D ]o}|r||v r d S |j                            |          }t          ||j                  }	| j        dur|	|	dk    rt          |         j	        j
        r d S |	||j        <   p |j        di |}nh|ru| j        D ]m}
t          |
d          r:|
                                D ]$}t!          |t"                    r|j        |v r  d S %Lt!          |
t"                    r|
j        |v r d S nd |                    |j        |                                          D             }g }| j        D ]}t          |d          r|                                }|                    |          }t-          ||          }| j        du r<t/          |          t/          t1          |d          t1          |d                    z  }|                    |            |j        | }|                    |j                  }|j        j        s||                    |          }| j        sm|                                rW| j        r(tA          |!                    || j                            tA          | "                                | j#        	          d S |                    |j        |          }	 | j        tI          |                    | j                            z  %                    ||
          r(tA          | "                                | j#        	          d S # tL          $ r Y d S w xY w)NFr   r   c                 4    i | ]\  }}t          |          |S r4   )r   )r   rh   r   s      r0   
<dictcomp>z-UniqueConstraint.validate.<locals>.<dictcomp>  s4        E5 %%  r2   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   replacementsfiltersrhsrx   model_class_pkr   s                     r0   rH   zUniqueConstraint.validate]  s   )//66; /	1M"k 9 9
 zW44FF--j99&x??'u44$,$**'!"#D + FF,8ej))&x7777HH  "&"2  Jz955 $.$6$6$8$8 ' 'D)$22 'tyG7K7K &' $J22 z'7Q7Q $,$F$Fg %G % %%''	  L G( * *4!@AA @==??D..|<<!$,,	&%// !)qd1C1CVCQUEVEV/W/W WIy))))&x0H!--ek::% 	;.*D''>'::H~ 	   
;  * 55eT[II   &44662   
 
 88[' 9  G	NVHOODN,K,K%L%LLSS5 T    *88::!6        s   !A,M 
MM)r&   rm   ru   r1   rv   r6   rN   r   r   r>   rA   rC   r   r   rq   r   rH   r   r   s   @r0   r   r   (  sH        ! $D
 D
 D
 D
 D
 D
 D
L & & X&` ` `DI I I

 

 


 
 
&
 
 
&
 
 
"
 
 
8% % % % % . . . . .  15<L N N N N N N N 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.     s                      Q Q Q Q Q Q Q Q Q Q ! ! ! ! ! ! 1 1 1 1 1 1 J J J J J J J J J J J J 4 4 4 4 4 4 2 2 2 2 2 2 2 2 * * * * * * , , , , , , , , , , , , = = = = = = 6 6 6 6 6 6
Q
Q
Qp/ p/ p/ p/ p/ p/ p/ p/fT" T" T" T" T"n T" T" T"n> > > > > > > >C C C C C~ C C C C Cr2   