
    Hwgu                     >   d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
mZmZ ddlmZ g dZ e       Z G d d	      Z G d
 deee      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d deee      Z G d deee      Zy)    N)
ArrayField)	AggregateBooleanField	JSONField	TextFieldValue)RemovedInDjango50WarningRemovedInDjango51Warning   )OrderableAggMixin)ArrayAggBitAndBitOrBitXorBoolAndBoolOrJSONBAgg	StringAggc                   4     e Zd Zed fd
Z fdZd Z xZS )DeprecatedConvertValueMixindefaultc                Z    |t         u r
d }d| _        nd| _        t        |   |d|i| y )NFTr   )NOT_PROVIDED_default_providedsuper__init__)selfr   expressionsextra	__class__s       a/var/www/horilla/myenv/lib/python3.12/site-packages/django/contrib/postgres/aggregates/general.pyr   z$DeprecatedConvertValueMixin.__init__   s7    l"G%*D"%)D"+@w@%@    c                 v    t        |   |i |}| j                  st        | d| j                        |_        |S )N"deprecation_empty_result_set_value)r   resolve_expressionr   getattrdeprecation_valueempty_result_set_value)r   argskwargsresolvedr!   s       r"   r&   z.DeprecatedConvertValueMixin.resolve_expression#   sB    7-t>v>%%.5:D<R<R/H+ r#   c                     |=| j                   s1t        j                  | j                  t               | j
                  S |S )N)category)r   warningswarndeprecation_msgr	   r(   )r   value
expression
connections       r"   convert_valuez)DeprecatedConvertValueMixin.convert_value+   s5    =!7!7MM$..9QR)))r#   )__name__
__module____qualname__r   r   r&   r5   __classcell__r!   s   @r"   r   r      s    -9 Ar#   r   c                   >    e Zd ZdZdZdZ ed       ZdZed        Z	y)r   	ARRAY_AGG6%(function)s(%(distinct)s%(expressions)s %(ordering)s)Tc                     g S N r   s    r"   <lambda>zArrayAgg.<lambda>8   s    b r#   zIn Django 5.0, ArrayAgg() will return None instead of an empty list if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default=[] to keep the previous behavior.c                 F    t        | j                  d   j                        S )Nr   )r   source_expressionsoutput_fieldrA   s    r"   rE   zArrayAgg.output_field?   s    $11!4AABBr#   N)
r6   r7   r8   functiontemplateallow_distinctpropertyr(   r1   rE   r@   r#   r"   r   r   2   s?    HGHN !1	P  C Cr#   r   c                       e Zd ZdZy)r   BIT_ANDNr6   r7   r8   rF   r@   r#   r"   r   r   D       Hr#   r   c                       e Zd ZdZy)r   BIT_ORNrL   r@   r#   r"   r   r   H   s    Hr#   r   c                       e Zd ZdZy)r   BIT_XORNrL   r@   r#   r"   r   r   L   rM   r#   r   c                       e Zd ZdZ e       Zy)r   BOOL_ANDNr6   r7   r8   rF   r   rE   r@   r#   r"   r   r   P   s    H>Lr#   r   c                       e Zd ZdZ e       Zy)r   BOOL_ORNrT   r@   r#   r"   r   r   U   s    H>Lr#   r   c                   X     e Zd ZdZdZdZ e       ZdZ e	d       Z
dZed fd
Z xZS )	r   	JSONB_AGGr=   Tz[]c                     g S r?   r@   rA   s    r"   rB   zJSONBAgg.<lambda>b   s    r r#   zIn Django 5.0, JSONBAgg() will return None instead of an empty list if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default=[] to keep the previous behavior.r   c                   t        |   |d|i| t        |t              rt        |j                  t
              ryt        |j                  t              s^|j                  }	 t        j                  |      }t        || j                        | _
        t        j                  d|ddt               y y y y # t        j                  $ r> t        j                  d|ddt               | j                  | j                  _        Y y w xY w)Nr   zPPassing an encoded JSON string as JSONBAgg(default) is deprecated. Pass default=z	 instead.   )
stacklevelr.   zuPassing a Value() with an output_field that isn't a JSONField as JSONBAgg(default) is deprecated. Pass default=Value(z$, output_field=JSONField()) instead.)r   r   
isinstancer   r2   strrE   r   jsonloadsr   r/   r0   r
   JSONDecodeError)r   r   r   r    r2   decodedr!   s         r"   r   zJSONBAgg.__init__n   s    +@w@%@w&7==#.w33Y?MME**U+  %Wd.?.?@007{)E 5	! @ / ' '' >"I%IK  !5 -1,=,=)>s   $B8 8AD	D	)r6   r7   r8   rF   rG   rH   r   rE   r(   rI   r%   r1   r   r   r9   r:   s   @r"   r   r   Z   sE    HGHN;L )1/)B&	  .:  r#   r   c                   @     e Zd ZdZdZdZ e       ZdZdZ	 fdZ
 xZS )r   
STRING_AGGr=   T zIn Django 5.0, StringAgg() will return None instead of an empty string if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default="" to keep the previous behavior.c                 P    t        t        |            }t        |   ||fi | y r?   )r   r^   r   r   )r   r3   	delimiterr    delimiter_exprr!   s        r"   r   zStringAgg.__init__   s%    s9~.^=u=r#   )r6   r7   r8   rF   rG   rH   r   rE   r(   r1   r   r9   r:   s   @r"   r   r      s6    HGHN;L 	Y > >r#   r   )r_   r/   django.contrib.postgres.fieldsr   django.db.modelsr   r   r   r   r   django.utils.deprecationr	   r
   mixinsr   __all__objectr   r   r   r   r   r   r   r   r   r   r@   r#   r"   <module>ro      s      5 Q Q W %	 x 0C*,=y C$Y I Y "i "
"Y "
.*,=y .b>+->	 >r#   