o
    Zh                     @  sh   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
 ddlmZmZmZ G dd deZd	S )
zUtil that calls AskNews api.    )annotations)datetime	timedelta)AnyDictOptional)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc                   @  s   e Zd ZU dZdZded< dZded< dZded< 	 dZded< 	 e	d	d
Z
eddedddZ	ddddZ	ddddZdS ) AskNewsAPIWrapperzWrapper for AskNews API.Nr   asknews_syncasknews_asynczOptional[str]asknews_client_idasknews_client_secretZforbid)extrabefore)modevaluesr   returnc                 C  s   t |dd}t |dd}zddl}W n ty   tdw |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_async r   \/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/utilities/asknews.pyvalidate_environment   s8   z&AskNewsAPIWrapper.validate_environment
   r   querystrmax_resultsint
hours_backc           	   	   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   r/   A   s&   	zAskNewsAPIWrapper.search_newsc           	   	     sv   |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   r.   r   r   r/   r0   r1   r   r   r   asearch_news[   s(   	zAskNewsAPIWrapper.asearch_news)r   r   r   r   )r   r   )r   r   r    r!   r"   r!   r   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r
   Zmodel_configr   classmethodr   r/   r6   r   r   r   r   r      s$   
 &r   N)r:   
__future__r   r   r   typingr   r   r   Zlangchain_core.utilsr   Zpydanticr	   r
   r   r   r   r   r   r   <module>   s    