
    g                     j    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y)
    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         	|   ||||||       || _        |j                  d      | _        | j
                  d| j                  | j                  | _        y)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
            W/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/geopy/geocoders/geolake.pyr   zGeolake.__init__#   s]    V 	!#+ 	 	
 ll3'"&++t{{DMMJ    T)country_codesexactly_oner   c                H   t        |t        j                  j                        rA|j	                         D ci c]  \  }}|| j
                  v r|| }}}| j                  |d<   n| j                  |d}|sg }t        |t              r|g}|rdj                  |      |d<   dj                  | j                  t        |      f      }t        j                  d| j                  j                  |       t        | j                   |      }	| j#                  ||	|      S c c}}w )	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``.

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