
    g                          d Z 	 ddlmZmZ ddlmZ d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
Z G d de	      Zy# e$ r dZY 3w xY w)z&
:class:`.YahooPlaceFinder` geocoder.
    )getRequest)OAuth1FT)GeocoderDEFAULT_TIMEOUT)GeocoderParseError)Location)string_compare	text_type)YahooPlaceFinderc                   l     e Zd ZdZeddf fd	Zed        Zd Zed        Z		 	 	 	 	 	 d	dZ
d
dZ xZS )r   z
    Geocoder that utilizes the Yahoo! BOSS PlaceFinder API. Documentation at:
        https://developer.yahoo.com/boss/geo/docs/
    Nc                     t         rt        d      t        t        |   |||       t        |      | _        t        |      | _        t        | j                  | j                  dd      | _	        d| _
        y)a  
        :param str consumer_key: Key provided by Yahoo.

        :param str consumer_secret: Secret corresponding to the key
            provided by Yahoo.

        :param int timeout: Time, in seconds, to wait for the geocoding service
            to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
            exception.

        :param dict proxies: If specified, routes this geocoder"s requests
            through the specified proxy. E.g., {"https": "192.0.2.0"}. For
            more information, see documentation on
            :class:`urllib2.ProxyHandler`.

            .. versionadded:: 0.96

        :param str user_agent: Use a custom User-Agent header.

            .. versionadded:: 1.12.0
        zgrequests-oauthlib is needed for YahooPlaceFinder. Install with `pip install geopy -e ".[placefinder]"`.)timeoutproxies
user_agentz	HMAC-SHA1AUTH_HEADER)
client_keyclient_secretsignature_methodsignature_typez+https://yboss.yahooapis.com/geo/placefinderN)requests_missingImportErrorsuperr   __init__r   consumer_keyconsumer_secretr   authapi)selfr   r   r   r   r   	__class__s         [/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/geopy/geocoders/placefinder.pyr   zYahooPlaceFinder.__init__   s    : I  	.W 	/ 	
 &l3(9((..((	
	 A    c                     |r*| D cg c]  }t        |j                  d         |kD  r|! } }|r | D cg c]  }|j                  d   |v r| } }| S c c}w c c}w )z
        Returns only the results that meet the minimum quality threshold
        and are located in expected countries.
        qualitycountrycode)intraw)resultsmin_qualityvalid_country_codeslocs       r!   _filtered_resultsz"YahooPlaceFinder._filtered_resultsI   s      #"Cswwy)*[8 "    #"C77=)-@@ "   s
   $AAc                 :   	 |d   d   }t        |      rt        |j                  dg             sy|d   D cg c]9  }t        | j                  |      t	        |d         t	        |d         f|      ; }}|S c c}w # t
        t        f$ r t        d      w xY w)	zF
        Returns the parsed result of a PlaceFinder API call.
        bossresponseplacefinderr(   Nlatitude	longitude)r'   z Error parsing PlaceFinder result)lenr   r	   humanizefloatKeyError
ValueErrorr   )r   contentr/   placer(   s        r!   _parse_responsez YahooPlaceFinder._parse_response_   s    	I'6  {#3{y"/M+N )3 4E MM%(5,-uU;5G/HI
 4    *% 	I$%GHH	Is!   .A? A? >A:6A? :A? ?Bc                 Z    dj                  dD cg c]  }| |   r| |    c}      S c c}w )zW
        Returns a human readable representation of a raw PlaceFinder location
        z, )line1line2line3line4)join)locationlines     r!   r3   zYahooPlaceFinder.humanizev   s@    
 yy<
<~ TN<
  	 
s   (c                    |dd}|rd|d<   |rd|d<   |r|dxx   dz  cc<   | j                  | j                  |t        || j                  	      }	| j	                  |	      }
|
y
| j                  |
||      }
|r|
d   S |
S )a  
        Geocode a location query.

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

        :param bool reverse:

        :param valid_country_codes:
        :type valid_country_codes: list or tuple

        :param bool with_timezone: Include the timezone in the response's
            `raw` dictionary (as `timezone`).
        J)r@   flagsRgflags1countrD   T)r   	requesterparamsr   Nr   )_call_geocoderr   r   r   r9   r,   )r   queryexactly_oner   r)   reverser*   with_timezonerK   responser(   s              r!   geocodezYahooPlaceFinder.geocode   s    : 

 "F8!F7O7Os"O&&HH ' 
 &&x0?((
 1:Nr"   c                     | j                  |      }t        |t              r|j                  dd      }| j	                  |||d      S )a  
        Returns a reverse geocoded location using Yahoo"s PlaceFinder API.

        :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.
          T)rN   r   rO   )_coerce_point_to_string
isinstancer
   replacerR   )r   rM   rN   r   s       r!   rO   zYahooPlaceFinder.reverse   sP     ,,U3e^,MM#r*E||#	  
 	
r"   )TNr   FNF)TN)__name__
__module____qualname____doc__r   r   staticmethodr,   r9   r3   rR   rO   __classcell__)r    s   @r!   r   r      sf     $-A^  *.    $<|
r"   r   N)r\   requestsr   r   requests_oauthlibr   r   r   geopy.geocoders.baser   r   	geopy.excr   geopy.locationr	   geopy.compatr
   r   __all__r    r"   r!   <module>rg      sS   %( ; ( # 2
 
x 
  s   > AA