o
    þÞh%t  ã                   @   s  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„ dƒZ%G dd„ de%ƒZ&G dd„ deƒZ'G d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                   @   s˜   e Zd ZedƒZdZdZdZddddœdd„Ze	dd„ ƒZ
d	d
„ Zdd„ Zdd„ Zedd„ ƒZdefdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r   u&   Constraint â€œ%(name)sâ€� is violated.N)Úviolation_error_codeÚviolation_error_message©Únamer   r   c                G   sš   |d u r|st | jj› d�ƒ‚|| _|d ur|| _|d ur!|| _n| j| _|rItjd| jj› d�t	dd� t
|ddgƒD ]\}}|rHt| ||ƒ q<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Úattr© r-   ú\/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/db/models/constraints.pyÚ__init__    s,   ÿü€÷zBaseConstraint.__init__c                 C   s   dS )NFr-   ©r)   r-   r-   r.   Úcontains_expressions<   s   z#BaseConstraint.contains_expressionsc                 C   ó   t dƒ‚©Nz.This method must be implemented by a subclass.©ÚNotImplementedError©r)   ÚmodelÚschema_editorr-   r-   r.   Úconstraint_sql@   ó   zBaseConstraint.constraint_sqlc                 C   r2   r3   r4   r6   r-   r-   r.   Ú
create_sqlC   r:   zBaseConstraint.create_sqlc                 C   r2   r3   r4   r6   r-   r-   r.   Ú
remove_sqlF   r:   zBaseConstraint.remove_sqlc                 C   sR   |j j}| |¡D ]^}}||v r dS ||ƒ}|jr&|  ||j|¡r& dS q	dS )NTF)Ú_metaÚ	get_fieldÚ_get_expr_referencesÚ	generatedÚ_expression_refs_excludeÚ
expression)Úclsr7   rB   Úexcluder>   Ú
field_nameÚ__Úfieldr-   r-   r.   rA   I   s   
ÿ€z'BaseConstraint._expression_refs_excludec                 C   r2   r3   r4   )r)   r7   ÚinstancerD   Úusingr-   r-   r.   ÚvalidateV   r:   zBaseConstraint.validatec                 C   s   | j d| ji S )Nr   )r   r   r0   r-   r-   r.   Úget_violation_error_messageY   s   z*BaseConstraint.get_violation_error_messagec                 C   s   g S ©Nr-   )r)   r7   Ú
connectionr-   r-   r.   Ú_check\   s   zBaseConstraint._checkc           
   	   C   s
  ddl m} g }tƒ }|D ]l^}}|dkst|jj|ƒr!| |¡ |s$qz|dkr.|jj}n|j |¡}|jr=|j	s=|j
r?W qW n	 tyI   Y qw |d }	t|dƒryt|dƒry| |	¡d u ry| |	¡d u ry| tjdt |g| ¡ |dd�¡ q| | |d	¡¡ |S )
Nr   )ÚCompositePrimaryKeyÚpkÚget_transformÚ
get_lookupz.'constraints' refers to the joined field '%s'.zmodels.E041)ÚobjÚidÚconstraints)Ú!django.db.models.fields.compositerO   ÚsetÚ
isinstancer=   rP   Úaddr>   Úis_relationÚmany_to_manyÚone_to_manyr   ÚhasattrrQ   rR   Úappendr   ÚErrorr	   ÚjoinÚextendÚ_check_local_fields)
r)   r7   Ú
referencesrO   ÚerrorsÚfieldsrE   ÚlookupsrG   Úfirst_lookupr-   r-   r.   Ú_check_references_   sJ   

ÿÿÿþÿüÿ€z BaseConstraint._check_referencesc                 C   sh   d| j j| j jf }| dd¡}d| ji}| jd ur%| j| jkr%| j|d< | jd ur/| j|d< |d|fS )Nz%s.%szdjango.db.models.constraintszdjango.db.modelsr   r   r   r-   )r"   Ú
__module__r#   Úreplacer   r   r$   r   )r)   ÚpathÚkwargsr-   r-   r.   Údeconstruct‡   s   





zBaseConstraint.deconstructc                 C   s   |   ¡ \}}}| j|i |¤ŽS rL   )rm   r"   )r)   Ú_r*   rl   r-   r-   r.   Úclone”   s   zBaseConstraint.clone)r#   ri   Ú__qualname__rn   r$   r   r   Únon_db_attrsr/   Úpropertyr1   r9   r;   r<   ÚclassmethodrA   r   rJ   rK   rN   rh   rm   ro   r-   r-   r-   r.   r      s(    ÿ

(r   c                       s˜   e Zd Zdddddœ‡ fdd„
Zdd„ Zdd„ ZeeeƒZd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdefdd„Zdd„ Z‡ fdd„Z‡ fdd„Z‡  ZS )r   N)Ú	conditionÚcheckr   r   c                   sL   |d urt jdtdd� |}|| _t|ddƒstdƒ‚tƒ j|||d� 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   rt   Úgetattrr!   Úsuperr/   )r)   r   rt   ru   r   r   ©r"   r-   r.   r/   ž   s"   	ýÿ
ýzCheckConstraint.__init__c                 C   s   t jdtdd� | jS ©Nrv   r   r   ©r%   r&   r   rt   r0   r-   r-   r.   Ú
_get_check¹   s   ýzCheckConstraint._get_checkc                 C   s   t jdtdd� || _d S r{   r|   )r)   Úvaluer-   r-   r.   Ú
_set_checkÁ   s   ý
zCheckConstraint._set_checkc                 C   sÄ   g }|j jsd|jjv s| tj|j› d�d|dd�¡ |S |j js(d|jjvr`tƒ }| j	}t
|tƒr;| | |¡¡ tdd„ | ¡ D ƒƒrW| tjd| j›d	�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                 s   s   � | ]}t |tƒV  qd S rL   )rX   r   )Ú.0Úexprr-   r-   r.   Ú	<genexpr>å   ó   € z)CheckConstraint._check.<locals>.<genexpr>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€   r=   Úrequired_db_featuresr^   r   ÚWarningÚdisplay_namerW   rt   rX   r   Úupdater?   ÚanyÚflattenr   ra   rh   )r)   r7   rM   rd   rc   rt   r-   r-   r.   rN   Ë   sB   ÿ
ùÿíÿÿ
ûÿ	zCheckConstraint._checkc                    sR   t |dd�}| | j¡}|jˆ jd�}| |ˆ j¡\}}|t‡ fdd„|D ƒƒ S )NF©r7   Ú
alias_cols©rM   c                 3   ó   � | ]}ˆ   |¡V  qd S rL   ©Úquote_value©r„   Úp©r8   r-   r.   r†   ÷   r‡   z1CheckConstraint._get_check_sql.<locals>.<genexpr>)r   Úbuild_wherert   Úget_compilerrM   Úas_sqlÚtuple©r)   r7   r8   ÚqueryÚwhereÚcompilerÚsqlÚparamsr-   r—   r.   Ú_get_check_sqlò   s
   zCheckConstraint._get_check_sqlc                 C   s   |   ||¡}| | j|¡S rL   )r¢   Ú
_check_sqlr   ©r)   r7   r8   ru   r-   r-   r.   r9   ù   s   zCheckConstraint.constraint_sqlc                 C   s   |   ||¡}| || j|¡S rL   )r¢   Ú_create_check_sqlr   r¤   r-   r-   r.   r;   ý   s   zCheckConstraint.create_sqlc                 C   s   |  || j¡S rL   )Ú_delete_check_sqlr   r6   r-   r-   r.   r<     s   zCheckConstraint.remove_sqlc                 C   sR   |j |j|d�}zt| jƒj||d�st|  ¡ | jd�‚W d S  ty(   Y d S w )N©ÚmetarD   ©rI   ©Úcode)	Ú_get_field_expression_mapr=   r   rt   ru   r   rK   r   r   )r)   r7   rH   rD   rI   Úagainstr-   r-   r.   rJ     s   
ÿÿÿzCheckConstraint.validatec                 C   sV   d| j j| jt| jƒ| jd u rdnd| j | jd u s | j| jkr$df S d| j f S )Nz<%s: condition=%s name=%s%s%s>Ú ú violation_error_code=%rú violation_error_message=%r)r"   rp   rt   Úreprr   r   r   r$   r0   r-   r-   r.   Ú__repr__  s   
ÿ
þöózCheckConstraint.__repr__c                    sF   t |tƒr| j|jko| j|jko| j|jko| j|jkS tƒ  |¡S rL   )rX   r   r   rt   r   r   ry   Ú__eq__©r)   Úotherrz   r-   r.   r³      s   

ÿ
þ
üzCheckConstraint.__eq__c                    s$   t ƒ  ¡ \}}}| j|d< |||fS )Nrt   )ry   rm   rt   ©r)   rk   r*   rl   rz   r-   r.   rm   *  s   

zCheckConstraint.deconstruct)r#   ri   rp   r/   r}   r   rr   ru   rN   r¢   r9   r;   r<   r   rJ   r²   r³   rm   Ú__classcell__r-   r-   rz   r.   r   ™   s$    	ù
'

r   c                   @   s   e Zd ZdZdZdd„ ZdS )r   ÚdeferredÚ	immediatec                 C   s   | j j› d| j› �S )NÚ.)r"   rp   Ú_name_r0   r-   r-   r.   r²   5  s   zDeferrable.__repr__N)r#   ri   rp   ÚDEFERREDÚ	IMMEDIATEr²   r-   r-   r-   r.   r   0  s    r   c                
       sœ   e Zd Zddddddddddœ	‡ fdd„
Zedd„ ƒZdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡ fdd„Z‡ fdd„Zdefdd„Z‡  ZS )r   r-   N)	re   r   rt   Ú
deferrableÚincludeÚ	opclassesÚnulls_distinctr   r   c       	            sf  |st dƒ‚|
s|st dƒ‚|
r|rt dƒ‚t|ttfƒs!t dƒ‚|r)|r)t dƒ‚|r1|r1t dƒ‚|r9|r9t dƒ‚|
rA|rAt dƒ‚|
rI|rIt d	ƒ‚t|ttfƒsTtd
ƒ‚t|tttfƒs`tdƒ‚t|ttfƒsktdƒ‚t|ttfƒsvtdƒ‚|r„t	|ƒt	|ƒkr„t dƒ‚t|ƒ| _
|| _|| _|r•t|ƒnd| _|| _|| _tdd„ |
D ƒƒ| _tƒ j|||	d� 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.r-   c                 s   s&   � | ]}t |tƒrt|ƒn|V  qd S rL   )rX   Ústrr   ©r„   rB   r-   r-   r.   r†   v  s
   € ÿ
ÿz,UniqueConstraint.__init__.<locals>.<genexpr>r   )Ú
ValueErrorrX   r   r   r   r!   Úlistr›   ÚboolÚlenre   rt   r¾   r¿   rÀ   rÁ   Úexpressionsry   r/   )r)   re   r   rt   r¾   r¿   rÀ   rÁ   r   r   rÈ   rz   r-   r.   r/   :  sh   ÿÿÿÿÿ

þ
ýzUniqueConstraint.__init__c                 C   s
   t | jƒS rL   )rÆ   rÈ   r0   r-   r-   r.   r1   €  s   
z%UniqueConstraint.contains_expressionsc                 C   s¶  |  h | j£| j£d¡}|jj}| jd ur-|jjs-d|v s-| t	j
|j› d�d|dd�¡ | jd urJ|jjsJd|v sJ| t	j
|j› d�d|d	d�¡ | jre|jjsed
|v se| t	j
|j› d�d|dd�¡ | jr€|jjs€d|v s€| t	j
|j› d�d|dd�¡ | jd ur�|jjs�d|v s�| t	j
|j› d�d|dd�¡ tƒ }|jjs¨d|vr·t| jtƒr·| | | j¡¡ | jrÐ|jjsÂd|vrÐ| jD ]
}| | |¡¡ qÅ| |  ||¡¡ |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¿   r=   r‰   rt   rˆ   rÉ   r^   r   rŠ   r‹   r¾   rÊ   rË   r1   rÌ   rÁ   rÍ   rW   rX   r   rŒ   r?   rÈ   ra   rh   )r)   r7   rM   rd   r‰   rc   rB   r-   r-   r.   rN   „  sš   
ÿ
øÿ
ÿ
øÿÿ
øÿÿ
øÿ
ÿ
øÿÿ
ÿÿ
zUniqueConstraint._checkc                    s`   | j d u rd S t|dd�}| | j ¡}|jˆ jd�}| |ˆ j¡\}}|t‡ fdd„|D ƒƒ S )NFr�   r‘   c                 3   r’   rL   r“   r•   r—   r-   r.   r†   í  r‡   z6UniqueConstraint._get_condition_sql.<locals>.<genexpr>)rt   r   r˜   r™   rM   rš   r›   rœ   r-   r—   r.   Ú_get_condition_sqlæ  s   
z#UniqueConstraint._get_condition_sqlc                 C   sN   | j sd S g }| j D ]}t|ƒ}| |j¡ | |¡ q
t|Ž  t|dd�¡S )NF)r�   )rÈ   r   Úset_wrapper_classesrM   r^   r   Úresolve_expressionr   )r)   r7   r8   Úindex_expressionsrB   Úindex_expressionr-   r-   r.   Ú_get_index_expressionsï  s   

ÿz'UniqueConstraint._get_index_expressionsc                    ód   ‡ fdd„| j D ƒ}‡ fdd„| jD ƒ}|  ˆ |¡}|  ˆ |¡}|jˆ || j|| j|| j|| jd�	S )Nc                    ó   g | ]}ˆ j  |¡‘qS r-   ©r=   r>   ©r„   rE   ©r7   r-   r.   Ú
<listcomp>ü  ó    z3UniqueConstraint.constraint_sql.<locals>.<listcomp>c                    ó   g | ]	}ˆ j  |¡j‘qS r-   ©r=   r>   Úcolumnr×   rØ   r-   r.   rÙ   ý  ó    ÿ©rt   r¾   r¿   rÀ   rÈ   rÁ   )	re   r¿   rÎ   rÓ   Ú_unique_sqlr   r¾   rÀ   rÁ   ©r)   r7   r8   re   r¿   rt   rÈ   r-   rØ   r.   r9   û  ó"   
ÿ÷zUniqueConstraint.constraint_sqlc                    rÔ   )Nc                    rÕ   r-   rÖ   r×   rØ   r-   r.   rÙ     rÚ   z/UniqueConstraint.create_sql.<locals>.<listcomp>c                    rÛ   r-   rÜ   r×   rØ   r-   r.   rÙ     rÞ   rß   )	re   r¿   rÎ   rÓ   Ú_create_unique_sqlr   r¾   rÀ   rÁ   rá   r-   rØ   r.   r;     râ   zUniqueConstraint.create_sqlc              
      sN   |   ˆ |¡}‡ fdd„| jD ƒ}|  ˆ |¡}|jˆ | j|| j|| j|| jd�S )Nc                    rÛ   r-   rÜ   r×   rØ   r-   r.   rÙ   #  rÞ   z/UniqueConstraint.remove_sql.<locals>.<listcomp>rß   )rÎ   r¿   rÓ   Ú_delete_unique_sqlr   r¾   rÀ   rÁ   )r)   r7   r8   rt   r¿   rÈ   r-   rØ   r.   r<   !  s   
ÿøzUniqueConstraint.remove_sqlc                 C   sð   d| j j| js	dndt| jƒ | jsdndt| jƒ dt| jƒ | jd u r'dnd| j | jd u r2dnd| j | js;dndt| jƒ | j	sFdnd	t| j	ƒ | j
d u rSdnd
| j
 | jd u r^dnd| j | jd u sm| j| jkrqdf S d| j f S )Nz<%s:%s%s%s%s%s%s%s%s%s%s>r®   z
 fields=%sz expressions=%sz name=%sz condition=%sz deferrable=%rz include=%sz opclasses=%sz nulls_distinct=%rr¯   r°   )r"   rp   re   r±   rÈ   r   rt   r¾   r¿   rÀ   rÁ   r   r   r$   r0   r-   r-   r.   r²   2  s*   
ÿ
ÿ
þìézUniqueConstraint.__repr__c                    sŽ   t |tƒrA| j|jko@| j|jko@| j|jko@| j|jko@| j|jko@| j|jko@| j|jko@| j	|j	u o@| j
|j
ko@| j|jkS tƒ  |¡S rL   )rX   r   r   re   rt   r¾   r¿   rÀ   rÈ   rÁ   r   r   ry   r³   r´   rz   r-   r.   r³   N  s*   

ÿ
þ
ý
ü
û
ú
ù
ø
	özUniqueConstraint.__eq__c                    s€   t ƒ  ¡ \}}}| jr| j|d< | jr| j|d< | jr | j|d< | jr(| j|d< | jr0| j|d< | jd ur:| j|d< || j|fS )Nre   rt   r¾   r¿   rÀ   rÁ   )	ry   rm   re   rt   r¾   r¿   rÀ   rÁ   rÈ   r¶   rz   r-   r.   rm   ^  s   






zUniqueConstraint.deconstructc                    sÚ  ˆj  |¡}ˆjr�i }g }ˆjD ]I}ˆ r|ˆ v r d S ˆj |¡}	|	jr8ˆ r1ˆ ˆ|	jˆ ¡r1 d S | |	j	¡ qt
||	jƒ}
ˆjdurG|
d u sQ|
dkrTt| jjrT d S |
||	j	< qg }|r”|jˆjˆ d�}|D ]+}|| }ˆjdu r�t|ƒ}tt||ƒƒtt|dƒt|dƒƒB }| |¡ qh|||< qh|j|i |¤Ž}nZˆ r¯t‡ ‡‡fdd„ˆjD ƒƒr¯d S dd„ |jˆjˆ d� ¡ D ƒ}g }ˆjD ].}t|d	ƒrÎ| ¡ }| |¡}t||ƒ}ˆjdu rìt|ƒtt|dƒt|dƒƒB }| |¡ qÃ|j|Ž }| ˆj¡}|jj�s| ˆj¡�r|j |d
�}ˆj!�s<| "¡ �r:ˆj�r1ˆj#ˆj$k�r1| %ˆˆj¡}t&||j'd�‚t&ˆ (¡ ˆj)d�‚d S |jˆjˆ d�}zˆj!t*| ˆj!¡ƒ@ j+||d��r_t&ˆ (¡ ˆj)d�‚W d S  t,�yl   Y d S w )NFr®   r§   Tc                 3   s   � | ]
}ˆ  ˆ|ˆ ¡V  qd S rL   )rA   rÃ   ©rD   r7   r)   r-   r.   r†   Ÿ  s
   € ÿ
ÿz,UniqueConstraint.validate.<locals>.<genexpr>c                 S   s   i | ]	\}}t |ƒ|“qS r-   )r   )r„   rG   r~   r-   r-   r.   Ú
<dictcomp>¤  s    ÿÿz-UniqueConstraint.validate.<locals>.<dictcomp>Úget_expression_for_validation)rP   rª   r©   )-Ú_default_managerrI   re   r=   r>   r@   rA   rB   r^   r   rx   ÚattnamerÁ   r   rˆ   Ú!interprets_empty_strings_as_nullsr¬   r   r   r   r   Úfilterr�   rÈ   Úitemsr]   rç   Úreplace_expressionsÚ_get_pk_valÚ_stateÚaddingÚ
_is_pk_setrD   rt   Úexistsr   r$   Úunique_error_messager   r«   rK   r   r
   ru   r   )r)   r7   rH   rD   rI   ÚquerysetÚlookup_kwargsÚgenerated_field_namesrE   rG   Úlookup_valueÚlookup_argsÚfield_expression_maprB   Úlhsrt   ÚreplacementsÚfiltersr…   ÚrhsÚmodel_class_pkÚvalidation_error_messager­   r-   rå   r.   rJ   n  sÂ   
ÿ
ÿýÿ
ÿ
þÿü






ÿÿÿþþñÿÿþýÿzUniqueConstraint.validate)r#   ri   rp   r/   rr   r1   rN   rÎ   rÓ   r9   r;   r<   r²   r³   rm   r   rJ   r·   r-   r-   rz   r.   r   9  s.    õF
b	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   rn   Ú__all__r   r   r   r   r-   r-   r-   r.   Ú<module>   s,      	