
    _OgF                         S SK JrJrJrJrJrJr  S SKrS SKrSSK	J
r
  SSKJr  SSKJr  SSKJrJr  SSKJr  \R(                   " S	 S
\5      5       r " S S\5      rg)    )AnyDictListOptionalTupleUnionN   )Core)Airport)Flight)AirportNotFoundError
LoginError)
APIRequestc                       \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\\S'   Sr
\\S'   Sr\\S'   Sr\\S	'   Sr\\S
'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Srg)FlightTrackerConfig   z;
Data class with settings of the Real Time Flight Tracker.
1faa	satellitemlatflarmadsbgndairvehicles	estimated14400maxageglidersstats5000limit N)__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   r   r   r   r   r   r   r   r   r   r    r"   __static_attributes__r#       V/Users/admin/workspace/ai/Jarvis/env/lib/python3.13/site-packages/FlightRadar24/api.pyr   r      s     CNIsD#OE3D#OCNCNHcIsFCGSE3E3r,   r   c                      \ rS rSrSrS9S\\   S\\   S\4S jjrS\	\
   4S	 jrS
\S\S\\\\4      4S jrSS.S\S\S\4S jjrS:S\S\S\S\
4S jjrS\
4S jrS\	\   4S jrS\
4S jrS\
\\4   S\4S jrS\S\S\S\4S jrS\S\\\\4      4S jrS \S\
\\4   4S! jr    S;SS.S"\\   S#\\   S$\\   S%\\   S\S\	\   4S& jjjrS\4S' jrS \S(\S)\S\
4S* jr S\
\\4   4S+ jr!S\
4S, jr"S\
4S- jr#S\
\\
4   4S. jr$S<S/\S0\S\
4S1 jjr%S\4S2 jr&S\S\SS4S3 jr'S\4S4 jr( S=S5\\   S6\)\\4   SS4S7 jjr*S8r+g)>FlightRadar24API#   z"
Main class of the FlightRadarAPI
Nuserpasswordtimeoutc                 n    [        5       U l        SU l        X0l        Ub  Ub  U R	                  X5        ggg)zz
Constructor of the FlightRadar24API class.

:param user: Your email (optional)
:param password: Your password (optional)
N)r   (_FlightRadar24API__flight_tracker_config_FlightRadar24API__login_datar3   login)selfr1   r2   r3   s       r-   __init__FlightRadar24API.__init__(   s;     (;'<$,0# 4JJt& !5r,   returnc                     [        [        R                  [        R                  U R                  S9nUR                  5       S   $ )z"
Return a list with all airlines.
headersr3   rows)r   r
   airlines_data_urljson_headersr3   get_contentr8   responses     r-   get_airlinesFlightRadar24API.get_airlines7   s9     d44d>O>OY]YeYef##%f--r,   iataicaoc                    UR                  5       UR                  5       p![        R                  R                  X5      n[	        U[        R
                  S/U R                  S9nUR                  5       n[        U5      R                  S5      (       d$  UR                  5       UR                  S5      S   4$ [        R                  R                  U5      n[	        U[        R
                  U R                  S9nUR                  5       n[        U5      R                  S5      (       d$  UR                  5       UR                  S5      S   4$ g)zL
Download the logo of an airline from FlightRadar24 and return it as bytes.
i  )r>   exclude_status_codesr3   4.r=   N)upperr
   airline_logo_urlformatr   image_headersr3   get_status_coder)   
startswithrB   splitalternative_airline_logo_url)r8   rG   rH   first_logo_urlrD   status_codesecond_logo_urls          r-   get_airline_logo!FlightRadar24API.get_airline_logo>   s    ZZ\4::<d..55dA nd6H6H`c_eoso{o{|..0;**3//'')>+?+?+DR+HHH ;;BB4Hot7I7ISWS_S_`..0;**3//'')?+@+@+Eb+III 0r,   F)detailscoder[   c                    S[        U5      :  d  [        U5      S:  a  [        SU S35      eU(       a.  [        5       nU R                  U5      nUR	                  U5        U$ [        [        R                  R                  U5      [        R                  U R                  S9nUR                  5       nU(       a+  [        U[        5      (       a  UR                  S5      (       d  [        SU S35      e[        US   S	9$ )
z
Return basic information about a specific airport.

:param code: ICAO or IATA of the airport
:param details: If True, it returns an Airport instance with detailed information.
      
The code '9' is invalid. It must be the IATA or ICAO of the airport.r=   r[   'Could not find an airport by the code ''.)info)len
ValueErrorr   get_airport_detailsset_airport_detailsr   r
   airport_data_urlrP   rA   r3   rB   
isinstancedictgetr   )r8   r\   r[   airportairport_detailsrD   contents          r-   get_airportFlightRadar24API.get_airportV   s     s4y=CIMz$/hijjiG"66t<O''8Nd33::4@$J[J[eieqeqr&&(j$77w{{9?U?U&)PQUPVVX'YZZGI.//r,   flight_limitpagec                    S[        U5      :  d  [        U5      S:  a  [        SU S35      eSS0nU R                  b  U R                  S   S   US	'   XS
'   X$S'   X4S'   [        [        R
                  U[        R                  S/U R                  S9nUR                  5       nUR                  5       S:X  aX  UR                  S5      (       aB  US   S   S   nUR                  S5      (       a  [        US   S   5      e[        SU S3U5      eUS   S   nUR                  S[        5       5      R                  S[        5       5      n	SU	;  a=  [        U	R                  S/ 5      5      S:X  a  [        U	5      S::  a  [        SU S35      eU$ )z
Return the airport details from FlightRadar24.

:param code: ICAO or IATA of the airport
:param flight_limit: Limit of flights related to the airport
:param page: Page of result to display
r^   r_   r`   ra   rP   jsoncookies_frPltokenr\   r"   rs   i  )rJ   r3   errors
parameters
notBetweenrb   rc   resultrD   rm   
pluginDatar[   runwaysr   )re   rf   r6   r   r
   api_airport_data_urlrA   r3   rB   rR   rl   r   rk   )
r8   r\   rr   rs   request_paramsrD   ro   ry   r|   datas
             r-   rg   $FlightRadar24API.get_airport_detailsp   s    s4y=CIMz$/hijj"F+(&*&7&7	&B7&KN7# "&v".w!%v d77IZIZruqw  BF  BN  BN  O ,,.##%,X1F1FX&x0>Fzz'"" !>??&)PQUPVVX'Y[abb":. zz)TV,00tvFD S)R)@%AQ%F3t9XY>&)PQUPVVX'YZZ r,   c                     [        [        R                  [        R                  U R                  S9nUR                  5       $ )z
Return airport disruptions.
r=   )r   r
   airport_disruptions_urlrA   r3   rB   rC   s     r-   get_airport_disruptions(FlightRadar24API.get_airport_disruptions   s4     d::DDUDU_c_k_kl##%%r,   c                     [        [        R                  [        R                  U R                  S9n[        5       nUR                  5       S    H  n[        US9nUR                  U5        M     U$ )z"
Return a list with all airports.
r=   r?   )
basic_info)	r   r
   airports_data_urlrA   r3   listrB   r   append)r8   rD   airportsairport_datarm   s        r-   get_airportsFlightRadar24API.get_airports   sa     d44d>O>OY]YeYef"&&$0026:L6GOOG$ ; r,   c                 .   U R                  5       (       d  [        S5      e[        R                  R	                  5       nU R                  5       S   US'   U R                  S   n[        [        R                  XU R                  S9nUR                  5       $ )z3
Get the bookmarks from the FlightRadar24 account.
 You must log in to your account.accessTokenaccesstokenrv   r>   rv   r3   )is_logged_inr   r
   rA   copyget_login_datar6   r   bookmarks_urlr3   rB   )r8   r>   rv   rD   s       r-   get_bookmarksFlightRadar24API.get_bookmarks   s       ""?@@##((*!%!4!4!6}!E##I.d00'\`\h\hi##%%r,   zonec                 B    SR                  US   US   US   US   5      $ )z
Convert coordinate dictionary to a string "y1, y2, x1, x2".

:param zone: Dictionary containing the following keys: tl_y, tl_x, br_y, br_x
z{},{},{},{}tl_ybr_ytl_xbr_x)rP   )r8   r   s     r-   
get_boundsFlightRadar24API.get_bounds   s,     ##DL$v,VdSYl[[r,   latitude	longituderadiusc           	         [        U5      S-  n[        R                  " U5      n[        R                  " U5      nSn[        R                  " S[        R                  " US5      -  5      n[        R
                  " [        R                  " U5      [        R                  " X-  5      -  [        R                  " U5      [        R                  " X-  5      -  [        R                  " S[        R                  S-  -  5      -  -   5      n	U[        R                  " [        R                  " S[        R                  S-  -  5      [        R                  " X-  5      -  [        R                  " U5      -  [        R                  " X-  5      [        R                  " U5      [        R                  " U	5      -  -
  5      -   n
[        R
                  " [        R                  " U5      [        R                  " X-  5      -  [        R                  " U5      [        R                  " X-  5      -  [        R                  " S[        R                  S-  -  5      -  -   5      nU[        R                  " [        R                  " S[        R                  S-  -  5      [        R                  " X-  5      -  [        R                  " U5      -  [        R                  " X-  5      [        R                  " U5      [        R                  " U5      -  -
  5      -   n[        R                  nU" U5      U" U	5      U" U
5      U" U5      S.nU R                  U5      $ )z
Convert a point coordinate and a radius to a string "y1, y2, x1, x2".

:param latitude: Latitude of the point
:param longitude: Longitude of the point
:param radius: Radius in meters to create area around the point
i  i           -   )r   r   r   r   )absmathradianssqrtpowasinsincospiatan2degreesr   )r8   r   r   r   half_side_in_kmlatlonapprox_earth_radiushypotenuse_distancelat_minlon_minlat_maxlon_maxrad2degr   s                  r-   get_bounds_by_point$FlightRadar24API.get_bounds_by_point   s    f+,ll8$ll9%""iiTXXoq-I(JK))HHSMDHH%8%NOOhhsmhh*@ABhhsdggm,-..
 

HHSDGGcM*+hh*@ABhhsm HH(>?hhsmdhhw//0	
 
 ))HHSMDHH%8%NOOhhsmhh*@ABhhrTWWs]+,--
 

HHR477S=)*hh*@ABhhsm HH(>?hhsmdhhw//0	
 
 ,, G$G$G$G$	
 t$$r,   countryc                    [         R                  R                  UR                  5       R	                  SS5      5      n[         R
                  R                  5       nSU;   a  UR                  S5        [        X#U R                  S9nUR                  5       n[        U5      R                  S5      (       d$  UR                  5       UR                  S5      S   4$ g)	zi
Download the flag of a country from FlightRadar24 and return it as bytes.

:param country: Country name
 -originr=   rK   rL   rM   N)r
   country_flag_urlrP   lowerreplacerQ   r   popr   r3   rR   r)   rS   rB   rT   )r8   r   flag_urlr>   rD   rW   s         r-   get_country_flag!FlightRadar24API.get_country_flag   s     ((//0G0GS0QR$$))+wKK!hN..0;**3//'')8>>#+>r+BBB 0r,   flightc                     [        [        R                  R                  UR                  5      [        R
                  U R                  S9nUR                  5       $ )z[
Return the flight details from Data Live FlightRadar24.

:param flight: A Flight instance
r=   )r   r
   flight_data_urlrP   idrA   r3   rB   )r8   r   rD   s      r-   get_flight_details#FlightRadar24API.get_flight_details  sC     d2299&))DdN_N_imiuiuv##%%r,   airlineboundsregistrationaircraft_typec                   [         R                  " U R                  5      nU R                  b  U R                  S   S   US'   U(       a  XS'   U(       a  UR	                  SS5      US'   U(       a  X6S'   U(       a  XFS	'   [        [        R                  U[        R                  U R                  S
9nUR                  5       n[        5       nUR                  5        Hf  u  pU	S   R                  5       (       d  M  [        X5      nUR                  U5        U(       d  MD  U R!                  U5      nUR#                  U5        Mh     U$ )av  
Return a list of flights. See more options at set_flight_tracker_config() method.

:param airline: The airline ICAO. Ex: "DAL"
:param bounds: Coordinates (y1, y2 ,x1, x2). Ex: "75.78,-75.78,-427.56,427.56"
:param registration: Aircraft registration
:param aircraft_type: Aircraft model code. Ex: "B737"
:param details: If True, it returns flights with detailed information
rv   rw   encr   ,z%2Cr   regtype)r3   r   )dataclassesasdictr5   r6   r   r   r
   !real_time_flight_tracker_data_urlrA   r3   rB   r   items	isnumericr   r   r   set_flight_details)r8   r   r   r   r   r[   r   rD   flights	flight_idflight_infor   flight_detailss                r-   get_flightsFlightRadar24API.get_flights  s    $ %++D,H,HI($($5$5i$@$IN5! 9-fnnS%.H>(+.=0 dDDnVZVgVgquq}q}~'') $&.nn&6"I Q<))++I3FNN6" w!%!8!8!@)).9 '7 r,   c                 B    [         R                  " U R                  5      $ )zd
Return a copy of the current config of the Real Time Flight Tracker, used by get_flights() method.
)r   r   r5   r8   s    r-   get_flight_tracker_config*FlightRadar24API.get_flight_tracker_configL  s     ""4#?#?@@r,   	file_type	timestampc                    U R                  5       (       d  [        S5      eUR                  5       nUS;  a  [        SU S35      e[	        [
        R                  R                  UR                  X#5      [
        R                  U R                  S   U R                  S9nUR                  5       n[        UR                  S5      5      $ )z
Download historical data of a flight.

:param flight: A Flight instance
:param file_type: Must be "CSV" or "KML"
:param timestamp: A Unix timestamp
r   )csvkmlzFile type 'z3' is not supported. Only CSV and KML are supported.rv   r   zutf-8)r   r   r   rf   r   r
   historical_data_urlrP   r   rA   r6   r3   rB   r)   decode)r8   r   r   r   rD   ro   s         r-   get_history_data!FlightRadar24API.get_history_dataR  s       ""?@@OO%	N*{9+5hijj$$++FIIyL%%t/@/@/KLL
 &&(7>>'*++r,   c                 |    U R                  5       (       d  [        S5      eU R                  S   R                  5       $ )z
Return the user data.
r   userData)r   r   r6   r   r   s    r-   r   FlightRadar24API.get_login_datak  s9       ""?@@  ,1133r,   c                     [        [        R                  [        R                  U R                  S9nUR                  5       $ )z
Return the most tracked data.
r=   )r   r
   most_tracked_urlrA   r3   rB   rC   s     r-   get_most_tracked!FlightRadar24API.get_most_trackedt  s4     d33T=N=NX\XdXde##%%r,   c                     [        [        R                  [        R                  U R                  S9nUR                  5       $ )zL
Return boundaries of volcanic eruptions and ash clouds impacting aviation.
r=   )r   r
   volcanic_eruption_data_urlrA   r3   rB   rC   s     r-   get_volcanic_eruptions'FlightRadar24API.get_volcanic_eruptions{  s4     d==tGXGXbfbnbno##%%r,   c                     [        [        R                  [        R                  U R                  S9nUR                  5       nSU;   a  UR                  S5        U$ )z&
Return all major zones on the globe.
r=   version)r   r
   zones_data_urlrA   r3   rB   r   )r8   rD   zoness      r-   	get_zonesFlightRadar24API.get_zones  sL     d114;L;LVZVbVbc$$&IIi r,   queryr"   c                    [        [        R                  R                  X5      [        R                  U R
                  S9nUR                  5       R                  S/ 5      nUR                  5       R                  S0 5      nSnSn0 nUR                  S0 5      R                  5        HW  u  p/ X'   XgU
-   :  aB  U[        U5      :  a3  X   R                  XF   5        US-  nXgU
-   :  a  U[        U5      :  a  M3  Xz-  nMY     U$ )z
Return the search result.
r=   resultsr    r   countr	   )r   r
   search_data_urlrP   rA   r3   rB   rl   r   re   r   )r8   r  r"   rD   r	  r    icounted_totalr   namer
  s              r-   searchFlightRadar24API.search  s     d2299%GQUQbQblplxlxy&&(,,Y;$$&**7B7 99Wb1779KDDJe++CL0@
!!'*-Q e++CL0@ "M : r,   c                     U R                   SL$ )z=
Check if the user is logged into the FlightRadar24 account.
N)r6   r   s    r-   r   FlightRadar24API.is_logged_in  s       ,,r,   c                    UUSSS.n[        [        R                  [        R                  X0R                  S9nUR                  5       nUR                  5       n[        U5      R                  S5      (       a  UR                  S5      (       d.  [        U[        5      (       a  [        US   5      e[        S5      eUS	   UR                  5       S
.U l        g)z^
Log in to a FlightRadar24 account.

:param user: Your email.
:param password: Your password.
trueweb)emailr2   rememberr   )r>   r   r3   2successmessagez#Your email or password is incorrectr   )r   rv   N)r   r
   user_login_urlrA   r3   rR   rB   r)   rS   rl   rj   rk   r   get_cookiesr6   )r8   r1   r2   r   rD   rW   ro   s          r-   r7   FlightRadar24API.login  s      	
 d114;L;LSWamamn..0&&(;**3//w{{97M7M'4((
79;M0N*N"#HII  
+++-
r,   c                     U R                   c  gU R                   S   nSU l         [        [        R                  [        R                  XR
                  S9n[        UR                  5       5      R                  S5      $ )zs
Log out of the FlightRadar24 account.

Return a boolean indicating that it successfully logged out of the server.
NTrv   r   r  )	r6   r   r
   r  rA   r3   r)   rR   rS   )r8   rv   rD   s      r-   logoutFlightRadar24API.logout  sj     $T##I. d114;L;LV]gsgst8++-.99#>>r,   flight_tracker_configconfigc                 :   Ub  Xl         [        R                  " U R                   5      nUR                  5        H^  u  pE[	        U5      nXC;  a  [        SU S35      eUR                  5       (       d  [        SU S35      e[        U R                   XE5        M`     g)zL
Set config for the Real Time Flight Tracker, used by get_flights() method.
NzUnknown option: ''zValue must be a decimal. Got ')	r5   r   r   r   r)   KeyError	isdecimal	TypeErrorsetattr)r8   r!  r"  current_config_dictkeyvalues         r-   set_flight_tracker_config*FlightRadar24API.set_flight_tracker_config  s     !,+@()001M1MN ,,.JCJE-!23%q9::??$$"@Q GHHD00#= )r,   )__flight_tracker_config__login_datar3   )NN
   )d   r	   )NNNN)2   )N),r$   r%   r&   r'   r(   r   r)   intr9   r   r   rE   r   bytesrY   boolr   rp   rg   r   r   r   floatr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r7   r  r   r,  r+   r#   r,   r-   r/   r/   #   s   'Xc] 'Xc] '\_ '.d4j .JS J JuczAR8S J0 9> 0 0 0' 04* *3 *C *X\ *X& &d7m &t &\tCJ/ \C \4%E 4%e 4%U 4%WZ 4%lC Cucz9J0K C$& &DcN & "& $&*'+1 1#1 1 sm	1
  }1 1 
f1fA+> A,v ,# ,# ,RV ,24S#X 4&$ && &
4T	? 
C  T &-d -
# 
 
 
6? ?  @D>'(;<> S/> 
	> >r,   r/   )typingr   r   r   r   r   r   r   r   corer
   entities.airportr   entities.flightr   ry   r   r   requestr   	dataclassobjectr   r/   r#   r,   r-   <module>r>     sQ    ; :    % # 4  &  &C>v C>r,   