o
    ˷er                     @   sP   d dl mZ d dlmZ d dlZd dlmZ G dd deZG dd deZ	dS )	    )Enum)decode_valueN)Anyc                   @   sF   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZedefddZdS )	TypeOrderr                           	   returnc                 C   s\   | j d}tjtjtjtjtjtjtjtj	tj
tjtjd}||vr*td| || S )N
value_type)
null_valueboolean_valueinteger_valuedouble_valuetimestamp_valuestring_valuebytes_valuereference_valuegeo_point_valuearray_value	map_valuez Could not detect value type for )_pb
WhichOneofr   NULLBOOLEANNUMBER	TIMESTAMPSTRINGBLOBREF	GEO_POINTARRAYOBJECT
ValueError)valuevlut r,   V/var/www/ideatree/venv/lib/python3.10/site-packages/google/cloud/firestore_v1/order.py
from_value"   s    zTypeOrder.from_valueN)__name__
__module____qualname__r   r   r    r!   r"   r#   r$   r%   r&   r'   staticmethodr   r.   r,   r,   r,   r-   r      s    r   c                   @   s   e Zd ZdZedefddZedefddZede	fddZ
ede	fd	d
ZedefddZedefddZedefddZedefddZedefddZedefddZdS )OrderzA
    Order implements the ordering semantics of the backend.
    r   c                 C   s&  t |j}t |j}||kr||k rdS dS |jd}|dkr$dS |dkr0| |j|jS |dkr:| ||S |dkrD| ||S |d	krN| ||S |d
krZ| |j	|j	S |dkrd| 
||S |dkrn| ||S |dkrx| ||S |dkr| ||S |dkr| ||S td| )z
        Main comparison function for all Firestore types.
        @return -1 is left < right, 0 if left == right, otherwise 1
        r   r   r   r   r   r   r   r   r   r   r   r   r   r   zUnknown ``value_type`` )r   r.   r)   r   r   _compare_tor   compare_numberscompare_timestampsr   compare_blobscompare_resource_pathscompare_geo_pointscompare_arrayscompare_objectsr(   )clsleftrightleftType	rightTyper   r,   r,   r-   compare>   s<   zOrder.comparec                 C   s   | j }|j }t||S N)r   r3   r5   )r>   r?   
left_bytesright_bytesr,   r,   r-   r8   h   s   zOrder.compare_blobsc                 C   sL   | j j} |j j}t| jpd|jpd}|dkr|S t| jp d|jp$dS Nr   )r   r   r3   r5   secondsnanos)r>   r?   rG   r,   r,   r-   r7   o   s   zOrder.compare_timestampsc                 C   sP   t | d }t |d }|j|jk|j|jk  }|dkr|S |j|jk|j|jk  S rF   )r   latitude	longitude)r>   r?   
left_valueright_valuecmpr,   r,   r-   r:   z   s   





zOrder.compare_geo_pointsc                 C   s   | j } |j }| d}|d}tt|t|}t|D ]}|| || k r* dS || || kr5 dS qt| }t|}||k||k  S )N/r4   r   )r   splitminlenrange)r>   r?   left_segmentsright_segmentsshorterileft_lengthright_lengthr,   r,   r-   r9      s   

zOrder.compare_resource_pathsc                 C   sh   | j j}|j j}tt|t|}t|D ]}t|| || }|dkr)|  S qtt|t|S rF   )r   valuesrP   rQ   rR   r3   rB   r5   )r>   r?   l_valuesr_valueslengthrV   rM   r,   r,   r-   r;      s   zOrder.compare_arraysc                 C   s   | j j}|j j}tt|t|D ]$\}}t||}|dkr#|  S t|| || }|dkr5|  S qtt|t|S rF   )r   fieldszipsortedr3   r5   rB   rQ   )r>   r?   left_fieldsright_fieldsleft_key	right_key
keyComparevalue_comparer,   r,   r-   r<      s   zOrder.compare_objectsc                 C   s    t | d }t |d }t||S rC   )r   r3   compare_doubles)r>   r?   rK   rL   r,   r,   r-   r6      s   

zOrder.compare_numbersc                 C   s6   t | rt |rdS dS t |rdS t| |S )Nr   r4   r   )mathisnanr3   r5   r>   r?   r,   r,   r-   rf      s   


zOrder.compare_doublesc                 C   s   | |k| |k  S rC   r,   ri   r,   r,   r-   r5      s   zOrder._compare_toN)r/   r0   r1   __doc__classmethodintrB   r2   r8   r   r7   r:   r9   r;   r<   r6   rf   r5   r,   r,   r,   r-   r3   9   s,    )

r3   )
enumr   "google.cloud.firestore_v1._helpersr   rg   typingr   r   objectr3   r,   r,   r,   r-   <module>   s   $