o
    ȳg                     @  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_secret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   ASKNEWS_CLIENT_IDr   ASKNEWS_CLIENT_SECRETr   NzOAskNews python package not found. Please install it with `pip install asknews`.news)	client_idclient_secretscopesr   r   )r   asknews_sdkImportError
AskNewsSDKAsyncAskNewsSDK)clsr   r   r   r   an_syncan_async r$   a/var/www/html/chatdoc2/venv/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(   
n_articlesmethod
historicalstart_timestampend_timestampreturn_type)	r+   r   nowr   	timestampr   r   search_news	as_string	selfr(   r*   r,   r5   r6   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/   Fr1   Nr2   r3   )	r+   r   r:   r   r;   r   r   r<   r=   r>   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
   model_configr   classmethodr&   r<   rC   r$   r$   r$   r%   r      s$   
 &r   N)rG   
__future__r   r   r   typingr   r   r   langchain_core.utilsr   pydanticr	   r
   r   r   r$   r$   r$   r%   <module>   s    