o
�iK
� @ st d Z ddlZddlZddlZddlmZmZmZ ddlm Z ddl
mZ dd ed
e
de
deeeef fd
d�ZdS )z&DuckDuckGo search tool implementation.� N)�Any�Dict�List)�DDGS� )� PROXY_URL� � �query�max_results�retries�returnc s< d}g d�}g d�}g d�}t |�D �]}z�|dkr6|d| t�dd� }t�d |d
�d�� t�|� nt�dd�} t�d| d
�d�� t�| � t�d
|d � d|� d| � �� ttd�}
t |
j
| |d��}|sut�d� g W S g }|D ]}
|�|
�dd�|
�dd�|
�dd�d�� qyt�dt
|�� �� |W S t�y } zot|�}|�� � t�d|� �� t� fdd�|D ��r�t�d� � t� fdd�|D ��r�||d k r�dt�dd� }t�d |d
�d!�� t�|� W Y d"}~qtd#��t� fd$d�|D ��}|�r||d k�r� W Y d"}~qd"}~ww g S )%aV Execute DuckDuckGo search.
This function performs web searches using DuckDuckGo with retry logic,
rate limiting handling, and proxy support.
Args:
query: The search query string.
max_results: Maximum number of results to return (default: 5).
retries: Number of retry attempts on failure (default: 3).
Returns:
A list of search result dictionaries containing:
- title: The result title
- url: The result URL
- snippet: The result body/snippet
Raises:
Exception: On TLS errors or when retries are exhausted.
r )ztls handshake failedzunexpected eofzclient error (connect)�ssl)Z ratelimitZ429Z202)�timeout�
connectionz
connect errorr r � r zRetry wait z.1fz secondszInitial delay zSearch query (�/z): )�proxy)r z Search successful but no results�title� �href�body)r �url�snippetzSearch successful, results: zSearch error: c 3 � � | ]}|� v V qd S �N� ��.0�k�Zerror_lowerr �_C:\Users\Rainy_Universe\Desktop\claude-code\mcp-server-ddgs\src\mcp_server_ddgs\tools\search.py� <genexpr>Z � � zsearch_ddgs.<locals>.<genexpr>z#TLS layer failure, possibly blockedc 3 r r r r r r r! r"