Ë
    Ï.f   ã                   óz   — d dl mZ d dlmZm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 dZ G d	„ d
e«      Zy)é    )Úpartial)ÚquoteÚ	urlencode)ÚAdapterHTTPError)ÚGeocoderQuotaExceeded)ÚDEFAULT_SENTINELÚGeocoder©ÚLocation)Úlogger)ÚTomTomc                   ó�   ‡ — e Zd ZdZdZdZdeededddœˆ fd„
Zdedd	dd
œd„Zdeddœd„Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   zuTomTom geocoder.

    Documentation at:
        https://developer.tomtom.com/search-api/search-api-documentation
    z /search/2/geocode/%(query)s.jsonz*/search/2/reverseGeocode/%(position)s.jsonNzapi.tomtom.com)ÚschemeÚtimeoutÚproxiesÚ
user_agentÚssl_contextÚadapter_factoryÚdomainc                óÆ   •— t         ‰	| �  ||||||¬«       || _        | j                  ›d|›| j                  ›�| _        | j                  ›d|›| j                  ›�| _        y)a7  
        :param str api_key: TomTom API key.

        :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

        :param str domain: Domain where the target TomTom service
            is hosted.
        )r   r   r   r   r   r   z://N)ÚsuperÚ__init__Úapi_keyr   Úgeocode_pathÚapiÚreverse_pathÚapi_reverse)
Úselfr   r   r   r   r   r   r   r   Ú	__class__s
            €úUC:\Users\user\Documents\project_loop\venv\Lib\site-packages\geopy/geocoders/tomtom.pyr   zTomTom.__init__   sd   ø€ ôN 	‰ÑØØØØ!Ø#Ø+ð 	ô 	
ð ˆŒØ"&§+£+©v°t×7HÒ7HÐIˆŒØ*.¯+«+±v¸t×?PÒ?PÐQˆÕó    TF)Úexactly_oner   ÚlimitÚ	typeaheadÚlanguagec                óà  — | j                  |«      }| j                  |«      |d<   |rt        t        |«      «      |d<   |rd|d<   |r||d<   t	        |j                  d«      «      }dj                  | j                  t        |¬«      z  t        |«      f«      }	t        j                  d| j                  j                  |	«       t        | j                  |¬	«      }
| j!                  |	|
|¬
«      S )a=  
        Return a location point by address.

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

        :param bool exactly_one: Return one result or a list of results, if
            available.

        :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.

        :param int limit: Maximum amount of results to return from the service.
            Unless exactly_one is set to False, limit will always be 1.

        :param bool typeahead: If the "typeahead" flag is set, the query
            will be interpreted as a partial input and the search will
            enter predictive mode.

        :param str language: Language in which search results should be
            returned. When data in specified language is not
            available for a specific field, default language is used.
            List of supported languages (case-insensitive):
            https://developer.tomtom.com/online-search/online-search-documentation/supported-languages

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.
        r$   r#   Ú1r%   úutf-8ú?)Úqueryz%s.geocode: %s©r"   ©r   )Ú_geocode_paramsÚ_boolean_valueÚstrÚintr   ÚencodeÚjoinr   Údictr   r   Údebugr   Ú__name__r   Ú_parse_jsonÚ_call_geocoder)r   r*   r"   r   r#   r$   r%   ÚparamsÚquoted_queryÚurlÚcallbacks              r    ÚgeocodezTomTom.geocodeJ   sÚ   € ðN ×%Ñ% eÓ,ˆØ"×1Ñ1°)Ó<ˆˆ{ÑáÜ!¤# e£*›oˆF�7‰OÙØ!ˆF�7‰OáØ!)ˆF�:Ñä˜UŸ\™\¨'Ó2Ó3ˆØ�h‰h˜Ÿ™¤4¨lÔ#;Ñ;Ü! &Ó)ð+ó ,ˆä�‰Ð% t§~¡~×'>Ñ'>ÀÔDÜ˜4×+Ñ+¸ÔEˆØ×"Ñ" 3¨¸'Ð"ÓBÐBr!   )r"   r   r%   c                óš  — | j                  |«      }| j                  |«      }|r||d<   t        |j                  d«      «      }dj	                  | j
                  t        |¬«      z  t        |«      f«      }t        j                  d| j                  j                  |«       t        | j                  |¬«      }	| j                  ||	|¬«      S )a»  
        Return an address by location point.

        :param query: The coordinates for which you wish to obtain the
            closest human-readable addresses.
        :type query: :class:`geopy.point.Point`, list or tuple of ``(latitude,
            longitude)``, or string as ``"%(latitude)s, %(longitude)s"``.

        :param bool exactly_one: Return one result or a list of results, if
            available.

        :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.

        :param str language: Language in which search results should be
            returned. When data in specified language is not
            available for a specific field, default language is used.
            List of supported languages (case-insensitive):
            https://developer.tomtom.com/online-search/online-search-documentation/supported-languages

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.
        r%   r(   r)   )Úpositionz%s.reverse: %sr+   r,   )Ú_coerce_point_to_stringÚ_reverse_paramsr   r1   r2   r   r3   r   r   r4   r   r5   r   Ú_parse_reverse_jsonr7   )
r   r*   r"   r   r%   r>   r8   Úquoted_positionr:   r;   s
             r    ÚreversezTomTom.reverseƒ   s·   € ðB ×/Ñ/°Ó6ˆØ×%Ñ% hÓ/ˆáØ!)ˆF�:Ñä §¡°Ó 8Ó9ˆØ�h‰h˜×(Ñ(¬4¸Ô+IÑIÜ! &Ó)ð+ó ,ˆä�‰Ð% t§~¡~×'>Ñ'>ÀÔDÜ˜4×3Ñ3ÀÔMˆØ×"Ñ" 3¨¸'Ð"ÓBÐBr!   c                 ó   — |rdS dS )NÚtrueÚfalse© )r   Ú
bool_values     r    r.   zTomTom._boolean_value±   s   € Ù#ˆvÐ0¨Ð0r!   c                 ó   — d| j                   iS ©NÚkey©r   )r   Úformatted_querys     r    r-   zTomTom._geocode_params´   ó   € à�4—<‘<ð
ð 	
r!   c                 ó   — d| j                   iS rJ   rL   )r   r>   s     r    r@   zTomTom._reverse_params¹   rN   r!   c                 ó’   — |r|d   sy |r| j                  |d   d   «      S |d   D �cg c]  }| j                  |«      ‘Œ c}S c c}w )NÚresultsr   )Ú_parse_search_result©r   Ú	resourcesr"   Úresults       r    r6   zTomTom._parse_json¾   s_   € Ù 	¨)Ò 4ØáØ×,Ñ,¨Y°yÑ-AÀ!Ñ-DÓEÐEð #,¨IÑ"6ö8Øð ×-Ñ-¨fÕ5ò 8ð 8ùò 8ó   ©Ac                 óL   — |d   d   }|d   d   }t        |d   d   ||f|«      S )Nr>   ÚlatÚlonÚaddressÚfreeformAddressr
   ©r   rU   ÚlatitudeÚ	longitudes       r    rR   zTomTom._parse_search_resultÈ   sD   € Ø˜*Ñ% eÑ,ˆØ˜:Ñ& uÑ-ˆ	Ü˜˜yÑ)Ð*;Ñ<Ø! 9Ð-¨vó7ð 	7r!   c                 ó’   — |r|d   sy |r| j                  |d   d   «      S |d   D �cg c]  }| j                  |«      ‘Œ c}S c c}w )NÚ	addressesr   )Ú_parse_reverse_resultrS   s       r    rA   zTomTom._parse_reverse_jsonÎ   s_   € Ù 	¨+Ò 6ØáØ×-Ñ-¨i¸Ñ.DÀQÑ.GÓHÐHð #,¨KÑ"8ö:Øð ×.Ñ.¨vÕ6ò :ð :ùò :rV   c                 óZ   — |d   j                  d«      \  }}t        |d   d   ||f|«      S )Nr>   ú,rZ   r[   )Úsplitr   r\   s       r    ra   zTomTom._parse_reverse_resultØ   s@   € Ø$ ZÑ0×6Ñ6°sÓ;Ñˆ�)Ü˜˜yÑ)Ð*;Ñ<Ø! 9Ð-¨vó7ð 	7r!   c                 ó¬   — t        |t        «      sy |j                  �|j                  €y |j                  dk\  rd|j                  v rt	        d«      |‚y y )Ni�  zDeveloper Over Qps)Ú
isinstancer   Ústatus_codeÚtextr   )r   Úerrors     r    Ú_geocoder_exception_handlerz"TomTom._geocoder_exception_handlerÝ   sY   € Ü˜%Ô!1Ô2ØØ×ÑÐ$¨¯
©
Ð(:ØØ×Ñ Ò#Ð(<ÀÇ
Á
Ñ(JÜ'Ð(<Ó=À5ÐHð )KÐ#r!   )r5   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r<   rC   r.   r-   r@   r6   rR   rA   ra   rj   Ú__classcell__)r   s   @r    r   r      s…   ø„ ñð 6€LØ?€Lð Ø$Ø$ØØ(Ø Ø#ö1Rðn Ø$ØØØô7Cðz Ø$Øô,Cò\1ò
ò

ò
8ò7ò:ò7ö
Ir!   r   N)Ú	functoolsr   Úurllib.parser   r   Úgeopy.adaptersr   Ú	geopy.excr   Úgeopy.geocoders.baser   r	   Úgeopy.locationr   Ú
geopy.utilr   Ú__all__r   rG   r!   r    ú<module>rw      s/   ðÝ ß )å +Ý +ß ;Ý #Ý à
€ôVIˆXõ VIr!   