Ë
    A,sj/
  ã                  ó¬   — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ  ej                  e«      ZdZdZd	d
dœdd„Zd
dœdd„Zd
dœdd„Zdd„Zy)z2Lightweight reverse geocoding helpers (Nominatim).é    )ÚannotationsN)Ú	urlencode)ÚRequestÚurlopen)Únormalize_country_codez+https://nominatim.openstreetmap.org/reversez TruckMe/1.0 (logistics platform)é   é   ©ÚzoomÚtimeoutc               óÀ  — | �|€y	 t        | «      }t        |«      }t        |d›|d›d|ddœ«      }t	        t
        › d|› �t        ddœ¬	«      }	 t        ||¬
«      5 }t        j                  |j                  «       j                  d«      «      cddd«       S # t        t        f$ r Y yw xY w# 1 sw Y   yxY w# t        $ r t        j                  d| |«       Y yw xY w)z8Call Nominatim reverse API. Returns parsed JSON or None.Nz.7fÚjsoné   )ÚlatÚlonÚformatr   Úaddressdetailsú?zapplication/json)z
User-AgentÚAccept)Úheaders©r   zutf-8z(Reverse geocode failed for lat=%s lon=%s)ÚfloatÚ	TypeErrorÚ
ValueErrorr   r   ÚNOMINATIM_REVERSE_URLÚDEFAULT_USER_AGENTr   r   ÚloadsÚreadÚdecodeÚ	ExceptionÚloggerÚ	exception)	r   r   r   r   Úlat_fÚlon_fÚparamsÚrequestÚresponses	            ú(/var/www/html/truck-me/core/geocoding.pyÚ_nominatim_reverser)      sö   € à
€{�c�kØðÜ�c“
ˆÜ�c“
ˆô à˜C�[Ø˜C�[ØØØñ	
ó€Fô Ü Ð
!  6 (Ð+Ü1Ð=OÑPô€GðÜ�W gÔ.ð 	?°(Ü—:‘:˜hŸm™m›o×4Ñ4°WÓ=Ó>÷	?ñ 	?øô# ”zÐ"ò Ùðú÷"	?ð 	?ûäò Ü×ÑÐCÀSÈ#ÔNÙðúsA   ‡B ÁB: Á2B.Â	B: ÂB+Â*B+Â.B7Â3B: Â7B: Â: CÃCr   c               óˆ   — t        | |d|¬«      }|sy|j                  d«      xs i }|j                  d«      }t        |«      S )zNResolve ISO alpha-2 country code from coordinates via OpenStreetMap Nominatim.é   r
   NÚaddressÚcountry_code)r)   Úgetr   )r   r   r   Úpayloadr,   Úcodes         r(   Úreverse_geocode_country_coder1   1   sD   € ä   c°¸7ÔC€GÙØØ�k‰k˜)Ó$Ò*¨€GØ�;‰;�~Ó&€DÜ! $Ó'Ð'ó    c               óx   — t        | |d|¬«      }|sy|j                  d«      xs dj                  «       }|xs dS )z@Resolve a human-readable address from coordinates via Nominatim.r   r
   NÚdisplay_nameÚ )r)   r.   Ústrip)r   r   r   r/   Údisplays        r(   Úreverse_geocode_addressr8   ;   s>   € ä   c°¸GÔD€GÙØØ�{‰{˜>Ó*Ò0¨b×7Ñ7Ó9€GØŠ?�dÐr2   c               ó˜   — t        t        | |«      «      ryt        | |«      }t        | |«      }t        ||«      }|syt        | ||«       y)zTFill a shipment country code from coordinates when missing. Returns True if updated.FT)r   Úgetattrr1   Úsetattr)ÚshipmentÚfieldÚ	lat_fieldÚ	lon_fieldr   r   r0   s          r(   Ú#maybe_fill_country_code_from_coordsr@   D   sM   € äœg h°Ó6Ô7ØÜ
�(˜IÓ
&€CÜ
�(˜IÓ
&€CÜ'¨¨SÓ1€DÙØÜˆH�e˜TÔ"Ør2   )r   Úintr   rA   Úreturnzdict | None)r   rA   rB   z
str | None)r=   Ústrr>   rC   r?   rC   rB   Úbool)Ú__doc__Ú
__future__r   r   ÚloggingÚurllib.parser   Úurllib.requestr   r   Úcore.countriesr   Ú	getLoggerÚ__name__r!   r   r   r)   r1   r8   r@   © r2   r(   ú<module>rN      s]   ðÙ 8å "ã Û Ý "ß +å 1à	ˆ×	Ñ	˜8Ó	$€àEÐ Ø7Ð ð 13À1õ ð> >?õ (ð 9:õ ô
r2   