o
    ˷e4                     @   s   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
 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   )OrderableAggMixin)ArrayAggBitAndBitOrBitXorBoolAndBoolOrJSONBAgg	StringAggc                       s*   e Zd Zed 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__ a/var/www/ideatree/venv/lib/python3.10/site-packages/django/contrib/postgres/aggregates/general.pyr      s
   z$DeprecatedConvertValueMixin.__init__c                 C   s(   |d u r| j stj| jtd | jS |S )N)category)r   warningswarndeprecation_msgr   deprecation_value)r   value
expression
connectionr   r   r   convert_value"   s   z)DeprecatedConvertValueMixin.convert_value)__name__
__module____qualname__r   r   r(   __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   	ARRAY_AGG6%(function)s(%(distinct)s%(expressions)s %(ordering)s)Tc                 C   s   g S Nr   r   r   r   r   <lambda>/   s    zArrayAgg.<lambda>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=Value([]) to keep the previous behavior.c                 C   s   t | jd jS )Nr   )r   source_expressionsoutput_fieldr0   r   r   r   r3   7   s   zArrayAgg.output_fieldN)
r)   r*   r+   functiontemplateallow_distinctpropertyr$   r#   r3   r   r   r   r   r   )   s    r   c                   @      e Zd ZdZdS )r   BIT_ANDNr)   r*   r+   r4   r   r   r   r   r   <       r   c                   @   r8   )r   BIT_ORNr:   r   r   r   r   r   @   r;   r   c                   @   r8   )r   BIT_XORNr:   r   r   r   r   r   D   r;   r   c                   @      e Zd ZdZe ZdS )r   BOOL_ANDNr)   r*   r+   r4   r   r3   r   r   r   r   r   H       
r   c                   @   r>   )r   BOOL_ORNr@   r   r   r   r   r   M   rA   r   c                   @   s&   e Zd ZdZdZdZe ZdZdZ	dS )r   	JSONB_AGGr.   Tz[]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=Value('[]') to keep the previous behavior.N)
r)   r*   r+   r4   r5   r6   r   r3   r$   r#   r   r   r   r   r   R   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   
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=Value('') to keep the previous behavior.c                    s&   t t|}t j||fi | d S r/   )r   strr   r   )r   r&   	delimiterr   delimiter_exprr   r   r   r   q   s   zStringAgg.__init__)r)   r*   r+   r4   r5   r6   r   r3   r$   r#   r   r,   r   r   r   r   r   b   s    r   )r!   django.contrib.postgres.fieldsr   django.db.modelsr   r   r   r   r   django.utils.deprecationr   mixinsr
   __all__objectr   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s     