plato-tile-query 0.1.0

Advanced tile query builder — filters, search, sort, pagination
Documentation
o

�D�i��@s�dZddlmZmZddlmZddlmZmZGdd�de�Z	eGdd�d��Z
eGd	d
�d
��ZGdd�d�ZGd
d�d�Z
dS)zAdvanced tile query builder.�)�	dataclass�field)�Enum)�Optional�Callablec@seZdZdZdZdS)�	SortOrder�asc�descN)�__name__�
__module__�__qualname__�ASC�DESC�rr�)/tmp/py-qry/src/plato_tile_query/query.pyrsrc@s&eZdZUeed<eed<eed<dS)�Filterr�operator�valueN)r
rr�str�__annotations__�anyrrrrr
s
rc@s:eZdZUeeed<eed<eed<eed<eed<dS)�QueryResult�items�total�page�per_page�filtered_totalN)r
rr�list�dictr�intrrrrrs
rc@s*eZdZd1deefdd�Zdeeddfdd�Zded	ed
eddfdd�Z	d
eddfdd�Z
deddfdd�Zdeddfdd�Z
deddfdd�Zdeddfdd�Zd2dededdfdd�Zd eddfd!d"�Zd#eddfd$d%�Zd&eddfd'd(�Zdefd)d*�Zd+ed,edefd-d.�Zdefd/d0�ZdS)3�QueryBuilderN�
collectioncCs:|pg|_g|_d|_tj|_d|_d|_d|_g|_	dS)N���)
�_collection�_filters�_sort_fieldrr�_sort_order�_page�	_per_page�_search�_fields��selfr!rrr�__init__s

zQueryBuilder.__init__�returncC�
||_|S�N)r%r-rrr�from_collection#�zQueryBuilder.from_collectionr�oprcCs|j�t|||d��|S)N)rrr)r&�appendr)r.rr5rrrr�where'szQueryBuilder.where�domaincC�|�dd|�S)Nr8�eq�r7)r.r8rrrr8+�zQueryBuilder.domain�min_confcCr9)N�
confidence�gter;)r.r=rrr�confidence_min.r<zQueryBuilder.confidence_min�max_confcCr9)Nr>�lter;)r.rArrr�confidence_max1r<zQueryBuilder.confidence_max�prioritycCr9)NrDr:r;)r.rDrrrrD4r<zQueryBuilder.priority�querycCr1r2)r+)r.rErrr�search7r4zQueryBuilder.searchr	�ordercCs||_t|�|_|Sr2)r'rr()r.rrGrrr�sort_by;s
zQueryBuilder.sort_by�numcCr1r2)r))r.rIrrrr@r4zQueryBuilder.page�ncCr1r2)r*)r.rJrrrrDr4zQueryBuilder.per_page�fieldscGst|�|_|Sr2)rr,)r.rKrrr�selectHs
zQueryBuilder.selectcs�t�j�}�jD]���fdd�|D�}q�jr&�j����fdd�|D�}�jr:�jtjk}|j	�fdd�|d��j
rF�fdd�|D�}t|�}�jd�j
}|�j
}|||�}t|t�j��j�j
|d	�S)
Ncsg|]
}��|��r|�qSr)�_match��.0�item)�fr.rr�
<listcomp>Psz(QueryBuilder.execute.<locals>.<listcomp>csXg|](}�t|�dd����vs(�t|�dd����vs(�t|�dd����vr|�qS)�contentr"r8�id)r�get�lowerrN)�qrrrRTs�cs|��jd�S)Nr)rUr')�x�r.rr�<lambda>[sz&QueryBuilder.execute.<locals>.<lambda>)�key�reversecs g|]��fdd��jD��qS)cs i|]}|�vr|��|��qSr)rU)rO�k�rPrr�
<dictcomp>^� z3QueryBuilder.execute.<locals>.<listcomp>.<dictcomp>)r,)rOrYr^rrR^r`r#)rrrrr)rr%r&r+rVr'r(rr�sortr,�lenr)r*r)r.�resultsr\r�start�end�
page_itemsr)rQrWr.r�executeLs&



�zQueryBuilder.executerPrQc	Cs�|�|j�}|durdSdd�dd�dd�dd�dd�dd�d	d�d
d�d�}|�|j�}|rCz|||j�WSttfyBYdSwdS)NFcSs||kSr2r��a�brrrrZl�z%QueryBuilder._match.<locals>.<lambda>cSs||kSr2rrhrrrrZlrkcSs||kSr2rrhrrrrZmrkcSs||kSr2rrhrrrrZmrkcSs||kSr2rrhrrrrZnrkcSs||kSr2rrhrrrrZnrkcSs|r|t|�vSdS)NF)rrhrrrrZoscSs||vSr2rrhrrrrZprk)r:�ne�gt�ltr?rB�contains�in)rUrrr�	TypeError�
ValueError)r.rPrQ�val�ops�fnrrrrMhs"��zQueryBuilder._matchcCst|��j�Sr2)rbrgrrYrrr�countyr<zQueryBuilder.countr2)r	)r
rrrrr/r3rrr7r8�floatr@rCrDrFrHrrrrLrrgr�boolrMrvrrrrr s 
r c@speZdZdZddeefdd�Z			dd
ededed
edede	deefdd�Z
dde	dedeefdd�ZdS)�	TileQueryz High-level tile query interface.N�tilescCs|pg|_t|j�|_dSr2)�_tilesr �_builder)r.rzrrrr/~s
zTileQuery.__init__r"�r>r$rEr8r=rDra�limitr0c	Csnt|j�}|r|�|�|r|�|�|dkr|�|�|r#|�|�|r+|�|d�|�|�|��}|j	S)Nrr	)
r r{rFr8r@rDrHrrgr)	r.rEr8r=rDrar~rj�resultrrr�find�s





zTileQuery.find�rJrcCs|jd||d�S)Nr})r=rar~)r�)r.rJrrrr�top_n�szTileQuery.top_nr2)r"r"r}r"r>r$)r�r>)r
rr�__doc__rrr/rrwrr�r�rrrrry|s����
� ryN)r��dataclassesrr�enumr�typingrrrrrr ryrrrr�<module>sd