
    N}bg                     r    d dl Zd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ dZ G d d	e          ZdS )
    N)partial)	urlencode)DEFAULT_SENTINELGeocoder)Location)join_filterlogger)Geolakec                   \     e Zd ZdZh dZdZddeededd fd
Zdded	d
Zd Z	d Z
 xZS )r
   zGeocoder using the Geolake API.

    Documentation at:
        https://geolake.com/docs/api

    Terms of Service at:
        https://geolake.com/terms-of-use
    >   citystatestreetaddresscountryzipcode	subNumberhouseNumberz/v1/geocodezapi.geolake.comN)domainschemetimeoutproxies
user_agentssl_contextadapter_factoryc                    t                                          ||||||           || _        |                    d          | _        | j        d| j        | j        | _        dS )a  

        :param str api_key: The API key required by Geolake
            to perform geocoding requests. You can get your key here:
            https://geolake.com/

        :param str domain: Currently it is ``'api.geolake.com'``, can
            be changed for testing purposes.

        :param str scheme:
            See :attr:`geopy.geocoders.options.default_scheme`.

        :param int timeout:
            See :attr:`geopy.geocoders.options.default_timeout`.

        :param dict proxies:
            See :attr:`geopy.geocoders.options.default_proxies`.

        :param str user_agent:
            See :attr:`geopy.geocoders.options.default_user_agent`.

        :type ssl_context: :class:`ssl.SSLContext`
        :param ssl_context:
            See :attr:`geopy.geocoders.options.default_ssl_context`.

        :param callable adapter_factory:
            See :attr:`geopy.geocoders.options.default_adapter_factory`.

            .. versionadded:: 2.0

        )r   r   r   r   r   r   /z://N)super__init__api_keystripr   r   api_pathapi)
selfr   r   r   r   r   r   r   r   	__class__s
            j/home/e360mart.nyusoft.in/public_html/e360mart_env/lib/python3.11/site-packages/geopy/geocoders/geolake.pyr   zGeolake.__init__#   su    V 	!#+ 	 	
 	
 	
 ll3''"&+++t{{DMMJ    T)country_codesexactly_oner   c                    t          |t          j        j                  r+ fd|                                D             } j        |d<   n
 j        |d}|sg }t          |t                    r|g}|rd                    |          |d<   d                     j        t          |          f          }t          j        d j        j        |           t           j        |          }                     |||	          S )
a  
        Return a location point by address.

        :param query: The address or query you wish to geocode.

            For a structured query, provide a dictionary whose keys
            are one of: `country`, `state`, `city`, `zipcode`, `street`, `address`,
            `houseNumber` or `subNumber`.
        :type query: str or dict

        :param country_codes: Provides the geocoder with a list
            of country codes that the query may reside in. This value will
            limit the geocoder to the supplied countries. The country code
            is a 2 character code as defined by the ISO-3166-1 alpha-2
            standard (e.g. ``FR``). Multiple countries can be specified with
            a Python list.

        :type country_codes: str or list

        :param bool exactly_one: Return one result or a list of one result.

        :param int timeout: Time, in seconds, to wait for the geocoding service
            to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
            exception. Set this only if you wish to override, on this call
            only, the value set during the geocoder's initialization.

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.

        c                 .    i | ]\  }}|j         v ||S  )structured_query_params).0keyvalr#   s      r%   
<dictcomp>z#Geolake.geocode.<locals>.<dictcomp>   s9       C$666 S 766r&   r   )r   q,countryCodes?z%s.geocode: %s)r(   )r   )
isinstancecollectionsabcMappingitemsr   strjoinr"   r   r	   debugr$   __name__r   _parse_json_call_geocoder)r#   queryr'   r(   r   paramsurlcallbacks   `       r%   geocodezGeolake.geocode[   s&   N e[_455 	    ;;==  F !%F9  < F
  	MmS)) 	,*OM 	=%(XXm%<%<F>"hh)F"3"3455%t~'>DDD4+EEE""3'"BBBr&   c                     |                     d          sdS |d         }|d         }|                     |          }t          |||f|          }|r|S |gS )z7Returns location, (latitude, longitude) from json feed.successNlatitude	longitude)get_get_addressr   )r#   pager(   rG   rH   r   results          r%   r>   zGeolake._parse_json   sn     xx	"" 	4
#%	##D))'Hi#8$?? 	M8Or&   c                     |                     d          }|                     d          }|                     d          }t          d||g          }|S )zl
        Returns address string from page dictionary
        :param page: dict
        :return: str
        placer   countryCodez, )rI   r   )r#   rK   rN   address_cityaddress_country_coder   s         r%   rJ   zGeolake._get_address   sR     !!yy(($yy77d\3G$HIIr&   )r=   
__module____qualname____doc__r,   r!   r   r   rD   r>   rJ   __classcell__)r$   s   @r%   r
   r
      s         	 	 	 H %$$( 6K 6K 6K 6K 6K 6K 6Kx $@C @C @C @C @CD   
 
 
 
 
 
 
r&   r
   )collections.abcr6   	functoolsr   urllib.parser   geopy.geocoders.baser   r   geopy.locationr   
geopy.utilr   r	   __all__r
   r+   r&   r%   <module>r]      s              " " " " " " ; ; ; ; ; ; ; ; # # # # # # * * * * * * * *
k k k k kh k k k k kr&   