a
    Kcòfu  ã                   @   s   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	„ d	ƒZG d
d„ deeeƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeeƒZG dd„ deeeƒZdS )é    N)Ú
ArrayField)Ú	AggregateÚBooleanFieldÚ	JSONFieldÚ	TextFieldÚValue)ÚRemovedInDjango50WarningÚRemovedInDjango51Warningé   )ÚOrderableAggMixin)ÚArrayAggÚBitAndÚBitOrÚBitXorÚBoolAndÚBoolOrÚJSONBAggÚ	StringAggc                       s6   e Zd Zedœ‡ fdd„
Z‡ fdd„Zdd„ Z‡  ZS )ÚDeprecatedConvertValueMixin©Údefaultc                   s4   |t u rd }d| _nd| _tƒ j|d|i|¤Ž d S )NFTr   )ÚNOT_PROVIDEDÚ_default_providedÚsuperÚ__init__)Úselfr   ÚexpressionsÚextra©Ú	__class__© úg/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/postgres/aggregates/general.pyr      s
    z$DeprecatedConvertValueMixin.__init__c                    s,   t ƒ j|i |¤Ž}| js(t| d| jƒ|_|S )NÚ"deprecation_empty_result_set_value)r   Úresolve_expressionr   ÚgetattrÚdeprecation_valueZempty_result_set_value)r   ÚargsÚkwargsÚresolvedr   r    r!   r#   #   s    ÿz.DeprecatedConvertValueMixin.resolve_expressionc                 C   s(   |d u r$| j s$tj| jtd� | jS |S )N)Úcategory)r   ÚwarningsÚwarnÚdeprecation_msgr   r%   )r   ÚvalueÚ
expressionÚ
connectionr    r    r!   Úconvert_value+   s    z)DeprecatedConvertValueMixin.convert_value)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r0   Ú__classcell__r    r    r   r!   r      s   r   c                   @   s4   e Zd ZdZdZdZedd„ ƒZdZedd„ ƒZ	d	S )
r   Z	ARRAY_AGGú6%(function)s(%(distinct)s%(expressions)s %(ordering)s)Tc                 C   s   g S ©Nr    ©r   r    r    r!   Ú<lambda>8   ó    zArrayAgg.<lambda>zÎIn 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                 C   s   t | jd jƒS )Nr   )r   Zsource_expressionsÚoutput_fieldr7   r    r    r!   r:   ?   s    zArrayAgg.output_fieldN)
r1   r2   r3   ÚfunctionÚtemplateÚallow_distinctÚpropertyr%   r,   r:   r    r    r    r!   r   2   s   ÿr   c                   @   s   e Zd ZdZdS )r   ZBIT_ANDN©r1   r2   r3   r;   r    r    r    r!   r   D   s   r   c                   @   s   e Zd ZdZdS )r   ZBIT_ORNr?   r    r    r    r!   r   H   s   r   c                   @   s   e Zd ZdZdS )r   ZBIT_XORNr?   r    r    r    r!   r   L   s   r   c                   @   s   e Zd ZdZeƒ ZdS )r   ZBOOL_ANDN©r1   r2   r3   r;   r   r:   r    r    r    r!   r   P   s   r   c                   @   s   e Zd ZdZeƒ ZdS )r   ZBOOL_ORNr@   r    r    r    r!   r   U   s   r   c                       sH   e Zd ZdZdZdZeƒ ZdZe	dd„ ƒZ
dZedœ‡ fd	d
„
Z‡  ZS )r   Z	JSONB_AGGr5   Tz[]c                 C   s   g S r6   r    r7   r    r    r!   r8   b   r9   zJSONBAgg.<lambda>zÎIn 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                   s®   t ƒ j|d|i|¤Ž t|tƒrªt|jtƒrªt|jtƒsª|j}zt 	|¡}W n6 tj
y‚   tjd|›d�dtd� | j| j_Y n(0 t|| jƒ| _tjd|›d�dtd� d S )Nr   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.é   )Ú
stacklevelr)   zPPassing an encoded JSON string as JSONBAgg(default) is deprecated. Pass default=z	 instead.)r   r   Ú
isinstancer   r-   Ústrr:   r   ÚjsonÚloadsÚJSONDecodeErrorr*   r+   r	   r   )r   r   r   r   r-   Údecodedr   r    r!   r   n   s6    ÿ
þ
ýþûÿüzJSONBAgg.__init__)r1   r2   r3   r;   r<   r=   r   r:   r%   r>   r"   r,   r   r   r4   r    r    r   r!   r   Z   s   ÿr   c                       s6   e Zd ZdZdZdZeƒ ZdZdZ	‡ fdd„Z
‡  ZS )r   Z
STRING_AGGr5   TÚ zÑIn 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                    s&   t t|ƒƒ}tƒ j||fi |¤Ž d S r6   )r   rD   r   r   )r   r.   Ú	delimiterr   Zdelimiter_exprr   r    r!   r   ™   s    zStringAgg.__init__)r1   r2   r3   r;   r<   r=   r   r:   r%   r,   r   r4   r    r    r   r!   r   ‹   s   ÿr   )rE   r*   Zdjango.contrib.postgres.fieldsr   Zdjango.db.modelsr   r   r   r   r   Zdjango.utils.deprecationr   r	   Zmixinsr   Ú__all__Úobjectr   r   r   r   r   r   r   r   r   r   r    r    r    r!   Ú<module>   s    1