
    !۰in                     R   d Z ddlZddlZddlZddlZ ej
                  d      Zej                  j                  ej                  j                  e
            Zej                  j                  ed      Zej                  j                  edd      ZdZdZd	Zd
ZdZi ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-i d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOi dPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqZdreeef   fdsZ e       Zdtedredz  fduZdvdwdxdydvdzd{ddzd|d}d~dvdzddd|d}ddddvdddydd{dddddddddvddvdvdvddddddZdededrefdZddedz  drefdZy)zYFlyClaw configuration loader.

Reads config.yaml and provides defaults for all settings.
    Nzflyclaw.configzconfig.yamlcachezairlines_iata_icao.jsonzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36z'https://api.flightradar24.com/common/v1zhttps://api.airplanes.live/v2zhttps://api.adsb.lol/v2 CACCAMUCESCZCSN3UCSCHUCHHZHCSZMFCXAFMCSHKNCUAGSGCRTVTBASCCDGPNCHB9CCQHHODKHEUUEAGJCDCQWCQNJLJALNHANAKEKALOZAARSQSIACXCPATGTHAVNHVNBREVACICALAAAALUAUALDLDALWNSWAACACAB6JBUASASABABAWLHDLHAFAFRKLKLMSKSASAYFINIBIBETKTHYLXSWROSAUAEKUAEQRQTREYETDQFQFANZANZSVSVAreturnc                  T   	 t        t        dd      5 } t        j                  |       }ddd       t	        t
              rt        |      dkD  r|S t        S # 1 sw Y   /xY w# t        t        j                  t        f$ r%}t        j                  d|       Y d}~t        S d}~ww xY w)u   Load IATA→ICAO airline mapping from JSON file.

    Falls back to built-in IATA_TO_ICAO_AIRLINE dict if file is missing
    or corrupt.
    rutf-8encodingNr   z7Airline mapping file not available (%s), using built-in)openAIRLINES_FILEjsonload
isinstancedictlenOSErrorJSONDecodeError	TypeErrorloggerdebugIATA_TO_ICAO_AIRLINE)fdataes      2/root/.openclaw/workspace/skills/flyclaw/config.py_load_airline_mappingr   b   s    S-w7 	 199Q<D	 dD!c$i!mK  	  	  T))95 SNPQRRSs-   A$ A'A$ A!A$ $B'B""B'flight_numberc                     | sy| j                         j                         }dD ]&  }|d| }||d }|t        v s|st        |    | c S  y)zConvert IATA flight number (e.g. 'CA981') to ICAO callsign (e.g. 'CCA981').

    Returns None if the airline code is not in the mapping.
    N)      )stripupper_AIRLINE_MAPPING)r   fn
prefix_lenairlinenumerics        r   iata_flight_to_icao_callsignr   u   sk    
 					$	$	&B ;
[j/Z[/&&7&w/0	::	;
     Tr   
   )enabledprioritytimeoutr      g      ?g       @)r   r   r   serpapi_keyretryretry_delayretry_backoff      Fzhttps://mcp.skiplagged.com/mcp)r   r   r   r   r   r   mcp_enabledmcp_url      )r   r   )fr24google_flights
skiplaggedairplanes_livefast_flightsi )dirairport_update_daysairport_update_url      )r   r   )r   return_timeroute_relayrelay_timeoutfilter_inactive_airportsrelay_enginesrs   both)formatlanguage)sourcesr   queryoutputbaseoverridec                     | j                         }|j                         D ]D  \  }}||v r6t        ||   t              r#t        |t              rt	        ||   |      ||<   @|||<   F |S )z3Merge *override* into *base*, returning a new dict.)copyitemsru   rv   _deep_merge)r   r   resultkeyvals        r   r   r      sh    YY[FNN$ S&=ZsT:z#t?T%fSk37F3KF3K	
 Mr   config_pathc                     | xs t         }i }t        j                  j                  |      r0t	        |dd      5 }t        j                  |      xs i }ddd       t        t        |      S # 1 sw Y   xY w)z7Load configuration from YAML, falling back to defaults.rm   rn   ro   N)	CONFIG_FILEospathexistsrq   yaml	safe_loadr   DEFAULTS)r   r   cfgr~   s       r   
get_configr      sd    %+D
C	ww~~d$g. 	*!..#)rC	*x%%	* 	*s   A,,A5)N)__doc__rs   loggingr   r   	getLoggerr{   r   dirnameabspath__file__PROJECT_DIRjoinr   rr   
USER_AGENTFR24_API_BASEAIRPLANESLIVE_API_BASEADSB_LOL_API_BASEAIRPORT_UPDATE_URLr}   rv   strr   r   r   r   r   r    r   r   <module>r      s/  
   	 			+	,
 ggoobggooh78ggll;6['3LM% 
 :8 -   
9%9 	%9 	%	9
 	%9 	%9 	%9 	%9 	%9 	%9 	%9 	%9 	%9 	%9 	%9  	%!9" 	%#9$ 	%%9& 	%'9* 	%+9, 	%-9. 	%/90 	%192 	%394 	%596 	%798 	%99: 	%;9< 	%=9@ 	%A9B 	%C9D 	%E9F 	%G9H 	%I9J 	%K9L 	%M9P 	%Q9R 	%S9T 	%U9V 	%W9X 	%Y9Z 	%[9\ 	%]9^ 	%_9` 	%a9b 	%c9f 	%g9h 	%i9j 	%k9l 	%m9n 	%o9p 	%q9 x tCH~    )*  d
 * !aB? 
 rsS 7	
 '+aH$)b9%( URTUb$(,0E	  V49@d d t &C$J &$ &r   