
    h                         d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZ  eddd	
       G d de             Zy)z#Chain that calls Google Places API.    N)AnyDictOptional)
deprecated)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorz0.0.33z1.0z1langchain_google_community.GooglePlacesAPIWrapper)sinceremovalalternative_importc                       e Zd ZU dZdZee   ed<   dZe	ed<   dZ
ee   ed<    edd      Z ed	
      edede	fd              ZdedefdZdedee   fdZdeee	f   dee   fdZy)GooglePlacesAPIWrappera  Wrapper around Google Places API.

    To use, you should have the ``googlemaps`` python package installed,
     **an API key for the google maps platform**,
     and the environment variable ''GPLACES_API_KEY''
     set with your API key , or pass 'gplaces_api_key'
     as a named parameter to the constructor.

    By default, this will return the all the results on the input query.
     You can use the top_k_results argument to limit the number of results.

    Example:
        .. code-block:: python


            from langchain_community.utilities import GooglePlacesAPIWrapper
            gplaceapi = GooglePlacesAPIWrapper()
    Ngplaces_api_keygoogle_map_clienttop_k_resultsTforbid)arbitrary_types_allowedextrabefore)modevaluesreturnc                     t        |dd      }||d<   	 ddl}|j                  |      |d<   |S # t        $ r t        d      w xY w)z6Validate that api key is in your environment variable.r   GPLACES_API_KEYr   Nr   z\Could not import googlemaps python package. Please install it with `pip install googlemaps`.)r   
googlemapsClientImportError)clsr   r   r   s       m/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/utilities/google_places_api.pyvalidate_environmentz+GooglePlacesAPIWrapper.validate_environment-   sm     /%'8
 %4 !	*4*;*;O*LF&'   	C 	s	   . Aqueryc           	         | j                   j                  |      d   }t        |      }g }|dk(  ry| j                  |nt	        || j                        }t        |      D ]/  }||   }| j                  |d         }||j                  |       1 dj                  t        |      D cg c]  \  }}|dz    d|  c}}      S c c}}w )zDRun Places search and get k number of places that exists that match.resultsr   z@Google Places did not find any places that match the descriptionplace_id
   z. )
r   placeslenr   minrangefetch_place_detailsappendjoin	enumerate)	selfr"   search_resultsnum_to_returnr(   iresultdetailsitems	            r    runzGooglePlacesAPIWrapper.run@   s    //66u=iHN+AU !!) ]D$6$67 	 }% 	'A#A&F..vj/ABG"g&	' yyIf<MNDQUG2dV,NOONs   ,C
r%   c                     	 | j                   j                  |      }||d<   | j                  |      }|S # t        $ r"}t	        j
                  d|        Y d }~y d }~ww xY w)Nr%   z0An Error occurred while fetching place details: )r   placeformat_place_details	Exceptionloggingerror)r0   r%   place_detailsformatted_detailses        r    r,   z*GooglePlacesAPIWrapper.fetch_place_detailsY   se    	 2288BM(0M*% $ 9 9- H$$ 	MMLQCPQ	s   25 	A AA r>   c           
         	 |j                  di       j                  dd      }|j                  di       j                  dd      }|j                  di       j                  dd      }|j                  di       j                  dd      }|j                  di       j                  dd      }| d| d	| d
| d| d
}|S # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)Nr4   nameUnknownformatted_addressformatted_phone_numberwebsiter%   z

Address: z
Google place ID: z
Phone: z

Website: z

z2An error occurred while formatting place details: )getr;   r<   r=   )	r0   r>   rB   addressphone_numberrF   r%   r?   r@   s	            r    r:   z+GooglePlacesAPIWrapper.format_place_detailsc   s   	 $$Xr266vyID#''"599#YG ),,Xr:>>()L $''"599)YOG$((26:::yQH &G9 -$$,: .&{7)4A 
 %$ 	MMNqcRS	s   B<B? ?	C*C%%C*)__name__
__module____qualname____doc__r   r   str__annotations__r   r   r   intr	   model_configr
   classmethodr   r!   r7   r,   r:        r    r   r      s    & &*OXc])!s!#'M8C=' $L
 (#$ 3   $"P P P2C HSM $sCx. Xc] rT   r   )rM   r<   typingr   r   r   langchain_core._api.deprecationr   langchain_core.utilsr   pydanticr   r	   r
   r   rS   rT   r    <module>rY      sI    )  & & 6 5 ; ; 
J
gY g
grT   