U
    h                     @  sd   d Z ddlmZ ddlmZmZ ddlmZmZmZ ddl	m
Z
mZ ddlmZ G dd de
Zd	S )
zUtil that calls AskNews api.    )annotations)datetime	timedelta)AnyDictOptional)	BaseModelroot_validator)get_from_dict_or_envc                   @  s   e Zd ZU dZded< ded< dZded< dZded< G d	d
 d
ZedddddddZ	ddddddddZ
ddddddddZdS )AskNewsAPIWrapperzWrapper for AskNews API.r   asknews_syncasknews_asyncNzOptional[str]asknews_client_idasknews_client_secretc                   @  s   e Zd ZdZdS )zAskNewsAPIWrapper.ConfigZforbidN)__name__
__module____qualname__extra r   r   I/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/asknews.pyConfig   s   r   T)prer   )valuesreturnc                 C  s   t |dd}t |dd}zddl}W n tk
r@   tdY nX |j||dgd	}|j||dgd	}||d
< ||d< ||d< ||d< |S )zGValidate that api credentials and python package exists in environment.r   ZASKNEWS_CLIENT_IDr   ZASKNEWS_CLIENT_SECRETr   NzOAskNews python package not found. Please install it with `pip install asknews`.news)Z	client_idZclient_secretZscopesr   r   )r
   asknews_sdkImportErrorZ
AskNewsSDKZAsyncAskNewsSDK)clsr   r   r   r   Zan_syncZan_asyncr   r   r   validate_environment   s>        
z&AskNewsAPIWrapper.validate_environment
   r   strint)querymax_results
hours_backr   c           	   	   C  sn   |dkr<d}d}t t t|d  }t t  }nd}d}d}d}| jjj||||||dd	}|jS )
z)Search news in AskNews API synchronously.0   kwThoursFnlNstringr"   Z
n_articlesmethod
historicalZstart_timestampZend_timestampreturn_type)	r!   r   nowr   	timestampr   r   search_news	as_string	selfr"   r#   r$   r,   r-   startstopresponser   r   r   r1   ?   s&    	zAskNewsAPIWrapper.search_newsc           	   	     st   |dkr<d}d}t t t|d  }t t  }nd}d}d}d}| jjj||||||dd	I dH }|jS )
z*Search news in AskNews API asynchronously.r%   r&   Tr'   Fr)   Nr*   r+   )	r!   r   r/   r   r0   r   r   r1   r2   r3   r   r   r   asearch_newsY   s&    	zAskNewsAPIWrapper.asearch_news)r   r   )r   r   )r   r   r   __doc____annotations__r   r   r   r	   r   r1   r8   r   r   r   r   r      s   
&      r   N)r9   
__future__r   r   r   typingr   r   r   Zlangchain_core.pydantic_v1r   r	   Zlangchain_core.utilsr
   r   r   r   r   r   <module>   s   