
    Evg1                        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	 d dl
mZ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gZ G d dee          Z G d d          Zej         G d deej                              Z ej         G d deej!                              Z"ej         G d dee                      Z#ej         G d deej$                              Z%ej         G d de                      Z&ej         G d de                      Z' G d de          Z( G d  d!          Z) G d" d#e          Z* G d$ d%          Z+dS )&    N)lookups)SimpleArrayField)ArrayMaxLengthValidator)checks
exceptions)FieldFuncIntegerField	TransformValue)CheckFieldDefaultMixin)ExactIn)gettext_lazy   )prefix_validation_error   )AttributeSetter
ArrayFieldc                   >    e Zd ZdZ ed           ed          dZdZd fd	Zed             Z	e	j
        d	             Z	e fd
            Z fdZ fdZed             Zd Zd Z fdZd ZddZ fdZd Zd Zd Z fdZ fdZ fdZ fdZd Z xZS )r   Fz+Item %(nth)s in the array did not validate:z(Nested arrays must have the same length.)item_invalidnested_array_mismatch)listz[]Nc                     || _         t          | j         dd           | _        || _        | j        r"g | j        t          | j                  | _        t          | j         d          r| j        | _         t                      j
        di | d S )Ndb_collationfrom_db_value )
base_fieldgetattrr   sizedefault_validatorsr   hasattr_from_db_valuer   super__init__)selfr   r    kwargs	__class__s       a/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/postgres/fields/array.pyr%   zArrayField.__init__   s    $#DO^TJJ	9 	'(''	22'D# 4?O44 	5!%!4D""6"""""    c                 r    	 | j         d         S # t          $ r t          d| j        j        z            w xY w)Nmodelz$'%s' object has no attribute 'model')__dict__KeyErrorAttributeErrorr(   __name__r&   s    r)   r,   zArrayField.model)   sN    	=)) 	 	 	 69PP  	s    '6c                 2    || j         d<   || j        _        d S )Nr,   )r-   r   r,   )r&   r,   s     r)   r,   zArrayField.model2   s    !&g %r*   c                 ~    t          |t          t          f          p t                                          |          S N)
isinstancer   tupler$   _choices_is_value)clsvaluer(   s     r)   r7   zArrayField._choices_is_value7   s.    %$//S5773L3LU3S3SSr*   c                     t                      j        di |}| j        j        r+|                    t          j        d| d                     n| j                                        }|rd                    d |D                       }|r-|                    t          j        d|z  | d                     d                    d |D                       }|r-|                    t          j        d	|z  | d
                     |S )Nz/Base field for array cannot be a related field.zpostgres.E002)objidz
    c              3   n   K   | ]0}t          |t          j                  |j        d |j        dV  1dS z ()N)r5   r   Errormsgr<   .0
base_checks     r)   	<genexpr>z#ArrayField.check.<locals>.<genexpr>I   sY       / /"!*fl;;/!+?/ / / / / /r*   z'Base field for array has errors:
    %szpostgres.E001c              3   n   K   | ]0}t          |t          j                  |j        d |j        dV  1dS r>   )r5   r   WarningrA   r<   rB   s     r)   rE   z#ArrayField.check.<locals>.<genexpr>V   sY       1 1"!*fn==1!+?1 1 1 1 1 1r*   z)Base field for array has warnings:
    %szpostgres.W004r   )	r$   checkr   remote_fieldappendr   r@   joinrG   )r&   r'   errorsbase_checkserror_messageswarning_messagesr(   s         r)   rH   zArrayField.check;   so   ((((?' &	MME&      ///11K !) / /&1/ / / " "
 " MMFW $.     $,== 1 1&11 1 1 $ $ 
 $ MMH./ $.	     r*   c                 ~    t                                          |           | j                            |           d S r4   )r$   set_attributes_from_namer   )r&   namer(   s     r)   rQ   z#ArrayField.set_attributes_from_namef   s7    ((...0066666r*   c                      d| j         j        z  S )NzArray of %s)r   descriptionr1   s    r)   rT   zArrayField.descriptionj   s    t:::r*   c                 T    | j         pd}| j                            |          d|dS N [])r    r   db_typer&   
connectionr    s      r)   rZ   zArrayField.db_typen   s2    yB?22:>>>>EEr*   c                 T    | j         pd}| j                            |          d|dS rV   )r    r   cast_db_typer[   s      r)   r^   zArrayField.cast_db_typer   s2    yB?77
CCCCTTTJJr*   c                 ^    t                                          |          }| j        |d<   |S )N	collation)r$   db_parametersr   )r&   r\   	db_paramsr(   s      r)   ra   zArrayField.db_parametersv   s-    GG))*55	!%!2	+r*   c                 R    d                     |                     |                    S )Nz%s::{})formatrZ   )r&   r9   compilerr\   s       r)   get_placeholderzArrayField.get_placeholder{   s     t||J77888r*   c                 `     t          |t          t          f          r fd|D             S |S )Nc                 J    g | ]}j                             |d            S )F)prepared)r   get_db_prep_value)rC   ir\   r&   s     r)   
<listcomp>z0ArrayField.get_db_prep_value.<locals>.<listcomp>   s@        11!Z%1PP  r*   )r5   r   r6   )r&   r9   r\   ri   s   ` ` r)   rj   zArrayField.get_db_prep_value~   sQ    edE]++ 	        r*   c                     t                                                      \  }}}}|dk    rd}|                    | j                                        | j        d           ||||fS )Nz/django.contrib.postgres.fields.array.ArrayFieldz)django.contrib.postgres.fields.ArrayField)r   r    )r$   deconstructupdater   cloner    )r&   rR   pathargsr'   r(   s        r)   rn   zArrayField.deconstruct   sy    #(77#6#6#8#8 dD&DDD>D"o3355	 	
 	
 	
 T4''r*   c                 v     t          |t                    r"t          j        |          } fd|D             }|S )Nc                 D    g | ]}j                             |          S r   )r   	to_python)rC   valr&   s     r)   rl   z(ArrayField.to_python.<locals>.<listcomp>   s)    DDDT_..s33DDDr*   )r5   strjsonloads)r&   r9   valss   `  r)   ru   zArrayField.to_python   sC    eS!! 	E:e$$DDDDDtDDDEr*   c                 0     ||S  fd|D             S )Nc                 H    g | ]}j                             |          S r   )r   r   )rC   itemr\   
expressionr&   s     r)   rl   z-ArrayField._from_db_value.<locals>.<listcomp>   s=     
 
 
 O))$
JGG
 
 
r*   r   )r&   r9   r~   r\   s   ` ``r)   r#   zArrayField._from_db_value   sD    =L
 
 
 
 
 

 
 
 	
r*   c                    g }|                      |          }| j        }|D ]W}||                    d            t          |j        |          }|                    |                    |                     Xt          j        |          S r4   )value_from_objectr   rJ   r   attnamevalue_to_stringrx   dumps)r&   r;   valuesrz   r   rv   s         r)   r   zArrayField.value_to_string   s    %%c**_
 	? 	?C{d####%j&8#>>j88==>>>>z&!!!r*   c                    t                                          |          }|r|S d|vr:	 t          |          }|dz  }t          || j                  S # t
          $ r Y nw xY w	 |                    d          \  }}t          |          dz   }t          |          }t          ||          S # t
          $ r Y d S w xY w)N_r   )r$   get_transformintIndexTransformFactoryr   
ValueErrorsplitSliceTransformFactory)r&   rR   	transformindexstartendr(   s         r)   r   zArrayField.get_transform   s    GG))$//	 	d??ED		 
,UDODDD	    
	5CJE3JJNEc((C )444  	 	 	DD	s#   A 
A"!A"&9B/ /
B=<B=c           
         t                                          ||           t          |          D ][\  }}	 | j                            ||           "# t          j        $ r(}t          || j        d         dd|dz   i          d }~ww xY wt          | j        t                    r>t          d |D                       dk    r#t	          j        | j        d         d          d S d S )Nr   nthr   prefixcodeparamsc                 ,    h | ]}t          |          S r   )len)rC   rk   s     r)   	<setcomp>z&ArrayField.validate.<locals>.<setcomp>   s    ***qCFF***r*   r   )r   )r$   validate	enumerater   r   ValidationErrorr   rN   r5   r   r   )r&   r9   model_instancer   parterrorr(   s         r)   r   zArrayField.validate   s   ///$U++ 		 		KE4((~>>>>-   -.~>'!519-	    doz22 	**E***++a// 0'(?@0   	 	//s   AB$#BBc           
         t                                          |           t          |          D ]Z\  }}	 | j                            |           !# t          j        $ r(}t          || j        d         dd|dz   i          d }~ww xY wd S )Nr   r   r   r   )r$   run_validatorsr   r   r   r   r   rN   )r&   r9   r   r   r   r(   s        r)   r   zArrayField.run_validators   s    u%%%$U++ 		 		KE4..t4444-   -.~>'!519-	   		 		s   AB
"#BB
c                      t                      j        di t          | j                                        | j        d|S )N)
form_classr   
max_lengthr   )r$   	formfieldr   r   r    )r&   r'   r(   s     r)   r   zArrayField.formfield   sU     uww  
 
."o7799"i  	
 
 	
r*   c                 <    |d n||z   dz
  }t          |||          S )Nr   )SliceTransform)r&   r~   r   lengthr   s        r)   slice_expressionzArrayField.slice_expression   s,     ndd%&.1*<eS*555r*   r4   )F)r0   
__module____qualname__empty_strings_allowedr   default_error_messages_default_hintr%   propertyr,   setterclassmethodr7   rH   rQ   rT   rZ   r^   ra   rf   rj   rn   ru   r#   r   r   r   r   r   r   __classcell__r(   s   @r)   r   r      s<       !GHH!"#M!N!N  #M# # # # # #   X \& & \& T T T T [T) ) ) ) )V7 7 7 7 7 ; ; X;F F FK K K    
9 9 9   
( 
( 
( 
( 
(  
 
 
" " "5 5 5 5 5*    &    
 
 
 
 
6 6 6 6 6 6 6r*   c                   .     e Zd Z fdZ fdZd Z xZS )ArrayRHSMixinc                    t          |t          t          f          rt          |                     |                    rgg }|D ]U}t          |d          s.|j        }t          |j        	                    |                    }|
                    |           Vt          |ddd}t                                          ||           d S )Nresolve_expressionARRAYz%(function)s[%(expressions)s])functiontemplate)r5   r6   r   any_rhs_not_none_valuesr"   output_fieldr   r   get_prep_valuerJ   r	   r$   r%   )r&   lhsrhsexpressionsr9   fieldr(   s         r)   r%   zArrayRHSMixin.__init__   s     cE4=)) 	c$2K2KC2P2P.Q.Q 	K * *u&:;; J,E!%"2"A"A%"H"HIIE""5)))) 8  C
 	c"""""r*   c                     t                                          ||          \  }}| j        j                            |          }|d||fS )Nz::)r$   process_rhsr   r   r^   )r&   re   r\   r   
rhs_params	cast_typer(   s         r)   r   zArrayRHSMixin.process_rhs  sN    ''--h
CCZH)66zBB	33		*J66r*   c              #      K   |D ]@}t          |t          t          f          r|                     |          E d {V  :|dV  Ad S )NT)r5   r   r6   r   )r&   r   xs      r)   r   z"ArrayRHSMixin._rhs_not_none_values  sm       	 	A!dE]++ 44Q7777777777


		 	r*   )r0   r   r   r%   r   r   r   r   s   @r)   r   r      s`        # # # # #"7 7 7 7 7
      r*   r   c                       e Zd ZdS )ArrayContainsNr0   r   r   r   r*   r)   r   r             Dr*   r   c                       e Zd ZdS )ArrayContainedByNr   r   r*   r)   r   r     r   r*   r   c                       e Zd ZdS )
ArrayExactNr   r   r*   r)   r   r     r   r*   r   c                       e Zd ZdS )ArrayOverlapNr   r   r*   r)   r   r   "  r   r*   r   c                   ,    e Zd ZdZ e            Zd ZdS )ArrayLenTransformr   c                 T    |                     | j                  \  }}dd|iz  |dz  fS )NzRCASE WHEN %(lhs)s IS NULL THEN NULL ELSE coalesce(array_length(%(lhs)s, 1), 0) ENDr   r   )compiler   r&   re   r\   r   r   s        r)   as_sqlzArrayLenTransform.as_sql,  s?    &&tx00V8CL !1*% 	%r*   N)r0   r   r   lookup_namer
   r   r   r   r*   r)   r   r   '  s3        K<>>L% % % % %r*   r   c                        e Zd Z fdZ xZS )ArrayInLookupc                 
   t                                                      }t          |d          r|S g }|D ]J}t          |d          r|                    |           (|                    t	          |                     K|S )Nr   )r$   get_prep_lookupr"   rJ   r6   )r&   r   prepared_valuesr9   r(   s       r)   r   zArrayInLookup.get_prep_lookup7  s    ((**6/00 	M  	5 	5Eu233 5&&u----&&uU||4444r*   )r0   r   r   r   r   r   s   @r)   r   r   5  s8                r*   r   c                   :     e Zd Z fdZd Zed             Z xZS )IndexTransformc                 V     t                      j        |i | || _        || _        d S r4   )r$   r%   r   r   )r&   r   r   rr   r'   r(   s        r)   r%   zIndexTransform.__init__G  s1    $)&)))
$r*   c                     |                     | j                  \  }}|                    d          sd|z  }d|z  g || j        R fS )NrY   z(%s)z%s[%%s])r   r   endswithr   r   s        r)   r   zIndexTransform.as_sqlL  sW    &&tx00V||C   	3,C3 5& 5$* 5 555r*   c                     | j         S r4   )r   r1   s    r)   r   zIndexTransform.output_fieldR  s
    r*   )r0   r   r   r%   r   r   r   r   r   s   @r)   r   r   F  sb        % % % % %
6 6 6   X    r*   r   c                       e Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r4   )r   r   )r&   r   r   s      r)   r%   zIndexTransformFactory.__init__X  s    
$r*   c                 8    t          | j        | j        g|R i |S r4   )r   r   r   r&   rr   r'   s      r)   __call__zIndexTransformFactory.__call__\  s&    dj$/KDKKKFKKKr*   Nr0   r   r   r%   r   r   r*   r)   r   r   W  s7        % % %L L L L Lr*   r   c                   $     e Zd Z fdZd Z xZS )r   c                 V     t                      j        |i | || _        || _        d S r4   )r$   r%   r   r   )r&   r   r   rr   r'   r(   s        r)   r%   zSliceTransform.__init__a  s1    $)&)))
r*   c                     |                     | j                  \  }}| j        d| dg || j        R fS d| dg || j        | j        R fS )N(z)[%s:]z)[%s:%s])r   r   r   r   r   s        r)   r   zSliceTransform.as_sqlf  ss    &&tx00V8"s???$9f$9dj$9$999$s$$$&E&E
&EDH&E&EEEr*   )r0   r   r   r%   r   r   r   s   @r)   r   r   `  sN            
F F F F F F Fr*   r   c                       e Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r4   )r   r   )r&   r   r   s      r)   r%   zSliceTransformFactory.__init__p  s    
r*   c                 8    t          | j        | j        g|R i |S r4   )r   r   r   r   s      r)   r   zSliceTransformFactory.__call__t  s&    dj$(DTDDDVDDDr*   Nr   r   r*   r)   r   r   o  s7          E E E E Er*   r   ),rx   django.contrib.postgresr   django.contrib.postgres.formsr   "django.contrib.postgres.validatorsr   django.corer   r   django.db.modelsr   r	   r
   r   r   django.db.models.fields.mixinsr   django.db.models.lookupsr   r   django.utils.translationr   r   utilsr   r   __all__r   r   register_lookupDataContainsr   ContainedByr   r   Overlapr   r   r   r   r   r   r   r   r*   r)   <module>r      s    + + + + + + : : : : : : F F F F F F * * * * * * * * H H H H H H H H H H H H H H A A A A A A . . . . . . . . 6 6 6 6 6 6 + + + + + + " " " " " "._6 _6 _6 _6 _6' _6 _6 _6D       > 	 	 	 	 	M7#7 	 	 	 	 	 	 	 	}g&9 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	='/ 	 	 	 
% 
% 
% 
% 
%	 
% 
% 
%     B        Y   "L L L L L L L LF F F F FY F F FE E E E E E E E E Er*   