
    6j
                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZ ddlmZmZmZ  ed	          Z G d
 d          Ze	 G d de                      Ze	 G d de                      Ze	 G d de                      Ze	 G d de                      Ze	 G d de                      Z G d deee                   ZdS )zResult classes.    )ABC)Counter)CallableMapping)	dataclassfield)AnyClassVarGenericTypeVar   )_normalize_date_normalize_text_normalize_urlTc                   z    e Zd ZU dZeeeeeeeeeed
Zee	e
eege
f         f                  ed<   de
de
ddfdZdS )	
BaseResultz=Base class for all results. Contains normalization functions.)
titlebodyhrefurl	thumbnailimagedateauthor	publisherinfo_normalizersnamevaluereturnNc                     |r'| j                             |          x}r ||          }t                              | ||           dS )zHOverride setattr to apply normalization functions to certain attributes.N)r   getobject__setattr__)selfr   r    
normalizers       N/root/.hermes/hermes-agent/venv/lib64/python3.11/site-packages/ddgs/results.pyr%   zBaseResult.__setattr__   sT     	&D$5$9$9$$?$??j 	&Ju%%E4u-----    )__name__
__module____qualname____doc__r   r   r   r   r
   r   strr   r	   __annotations__r%    r)   r(   r   r      s         GG !#!$B BL(73#(<#<=>   . .C .D . . . . . .r)   r   c                   >    e Zd ZU dZdZeed<   dZeed<   dZeed<   dS )
TextResultzText search result. r   r   r   N)	r*   r+   r,   r-   r   r.   r/   r   r   r0   r)   r(   r2   r2   %   s=         E3OOOD#NNND#NNNNNr)   r2   c                   v    e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   d
S )ImagesResultzImage search result.r3   r   r   r   r   heightwidthsourceN)r*   r+   r,   r-   r   r.   r/   r   r   r   r6   r7   r8   r0   r)   r(   r5   r5   .   s|         E3OOOE3OOOIsCMMMFCE3OOOFCr)   r5   c                   h    e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   d	S )

NewsResultzNews search result.r3   r   r   r   r   r   r8   N)r*   r+   r,   r-   r   r.   r/   r   r   r   r   r8   r0   r)   r(   r:   r:   ;   si         D#NNNE3OOOD#NNNCMMME3OOOFCr)   r:   c                      e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<    ee
          Zeeef         ed<   dZeed<   dZeed<   dZeed<    ee
          Zeeef         ed<   dZeed<   dS )VideosResultzVideo search result.r3   r   contentdescriptionduration
embed_html	embed_urlimage_token)default_factoryimagesprovider	publishedr   
statisticsuploaderN)r*   r+   r,   r-   r   r.   r/   r=   r>   r?   r@   rA   rB   r   dictrD   rE   rF   r   rG   rH   r0   r)   r(   r<   r<   G   s        E3OOOGSKHcJIsK"U4888FDcN888HcIsIs!&t!<!<!<JS#X<<<Hcr)   r<   c                   h    e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   d	S )
BooksResultzBook search result.r3   r   r   r   r   r   r   N)r*   r+   r,   r-   r   r.   r/   r   r   r   r   r   r0   r)   r(   rK   rK   Z   so         E3OOOFCIsD#NNNCMMMIsr)   rK   c                       e Zd ZdZdee         ddfdZdedefdZde	fdZ
deddfd	Zd
ee         ddfdZdeeeef                  fdZdS )ResultsAggregatorzAggregates incoming results.

    Items are deduplicated by `cache_field`. Append just increments a counter;
    `extract_results` returns items sorted by descending frequency.
    cache_fieldsr!   Nc                     |sd}t          |          t          |          | _        t                      | _        i | _        d S )Nz)At least one cache_field must be provided)
ValueErrorsetrN   r   _counter_cache)r&   rN   msgs      r(   __init__zResultsAggregator.__init__m   sA     	"=CS//!--&-ii$&r)   itemc                     |j         D ]'}|| j        v rt          |j         |                   c S (d|d| j         }t          |          )NzItem z has none of the cache fields )__dict__rN   r.   AttributeError)r&   rV   keyrT   s       r(   _get_keyzResultsAggregator._get_keyu   sg    = 	/ 	/Cd'''4=-..... (OdOOD<MOOS!!!r)   c                 *    t          | j                  S )z(Return the number of items in the cache.)lenrS   r&   s    r(   __len__zResultsAggregator.__len__|   s    4;r)   c                 :   |                      |          }|| j        vs]t          |j                            dd                    t          | j        |         j                            dd                    k    r
|| j        |<   | j        |xx         dz  cc<   dS )zAdd an item to the cache.

        Register an occurrence of `item`. First time we see its key,
        we store the item; every time we bump the counter.
        r   r3   r   N)r[   rS   r]   rX   r#   rR   )r&   rV   rZ   s      r(   appendzResultsAggregator.append   s     mmD!!dk!!S):):62)F)F%G%G#K%))&"55K
 K
 &
 &
  $DKcar)   itemsc                 :    |D ]}|                      |           dS )z!Add a list of items to the cache.N)ra   )r&   rb   rV   s      r(   extendzResultsAggregator.extend   s0     	 	DKK	 	r)   c                 N      fd j                                         D             S )zXReturn a list of items, sorted by descending frequency. Each item is returned as a dict.c                 :    g | ]\  }}j         |         j        S r0   )rS   rX   ).0rZ   _r&   s      r(   
<listcomp>z3ResultsAggregator.extract_dicts.<locals>.<listcomp>   s'    TTTfc1C )TTTr)   )rR   most_commonr^   s   `r(   extract_dictszResultsAggregator.extract_dicts   s+    TTTT8Q8Q8S8STTTTr)   )r*   r+   r,   r-   rQ   r.   rU   r   r[   intr_   ra   listrd   rI   r	   rk   r0   r)   r(   rM   rM   f   s         'SX '$ ' ' ' '"Q "3 " " " "          1          DG     
UtDcN3 U U U U U Ur)   rM   N)r-   abcr   collectionsr   collections.abcr   r   dataclassesr   r   typingr	   r
   r   r   utilsr   r   r   r   r   r2   r5   r:   r<   rK   rM   r0   r)   r(   <module>rt      s(                 - - - - - - - - ( ( ( ( ( ( ( ( 2 2 2 2 2 2 2 2 2 2 2 2 C C C C C C C C C CGCLL. . . . . . . ..         	 	 	 	 	: 	 	 	             :   $     *   .U .U .U .U .UWQZ .U .U .U .U .Ur)   