
    Ji"                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl	T d dl
mZmZ  eee           ddZd Zd	ed
efdZd ZddZd ZdS )    N)datetime)gtfs_realtime_pb2)*)URLSROUTE_TYPE_NAMESQ c           	         t           |          |         }	 d|  d| d}d}t          j                            |          rXt	          j                    t          j                            |          z
  }||k     rt          d|  d| d|dz  d	d
           d}|rt          d|  d| d           t          j        |d                   }t          |d          5 }|
                    |j                   d d d            n# 1 swxY w Y   t          d           t          j        |d          }	t          j        |		                    d          t                     }
t          j        |		                    d          t                     }t          j        |		                    d          t                     }t          j        |		                    d          t                     }|                    ddi          }|d                             t&                    |d<   t          |d                                                    |d                             t&                    |d<   d }|d                             |          |d<   t          dt,          j                   |
|||dt,          j        |          |<   t          dt,          j                   d S ) Nzcache/gtfs_static_cache__z.zipTzUsing cached GTFS for /z (  z.1fzh old)FzDownloading static GTFS for u   …gtfs_urlwbzStatic GTFS updatedrz	stops.txt)dtypez	trips.txtzstop_times.txtz
routes.txt
route_typeroute_type_static)columnsc                 v    t          t          |                     d                    \  }}}|dz  |dz  z   |z   S )N:r   <   )mapintsplit)thmss       Yc:\Users\computer\Desktop\notes\tskylt4.0\server\20260128 - new GTFS loader\gtfsloader.pytime_to_secondsz)load_static_gtfs.<locals>.time_to_seconds<   s9    c1773<<((1a4x!b& 1$$    departure_timedeparture_secszLOADING.... Cache: )stopstrips
stop_timesroutesz	V.cache: )r   ospathexiststimegetmtimeprintrequestsgetopenwritecontentzipfileZipFilepdread_csvstrrenameastyper   value_countsapplyvcache)countryoperator	cache_ageurls
cache_fileneed_downloadagerespfzr#   r$   r%   r&   r   s                  r   load_static_gtfsrG      s   ="DADGDDhDDDJM	w~~j!! "ikkBG,,Z888??U7UUXUUTUUUUVVV!M %DWDDxDDDEEE|D,--*d## 	"qGGDL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"#$$$
C((A K{++3777EK{++3777EQVV$455SAAAJ[--S999F ]]L2E#F]GGF #))<"="D"DS"I"IF 
&$
%
2
2
4
4555 #))<"="D"DS"I"IF% % % $..>#?#E#Eo#V#VJ 	
))) 	" "AGGX 
+qws   D  DDc                    t          d           t          j                    }t          |         |         d         }n	#  d}Y nxY w|                    t          j        | d         d|          j                   i }|j        D ]w}|	                    d          r`|j
        }|j        D ]Q}|	                    d          r:|j        	                    d	          r |j        j        ||j        j        |j        f<   Rx|S )
z'Download and parse GTFS-RT TripUpdates.u   Downloading GTFS-RT…headerNtrip_updatesF)verifyheaderstrip_update	departuredelay)r,   r   FeedMessager   ParseFromStringr-   r.   r1   entityHasFieldrM   stop_time_updaterN   rO   triptrip_idstop_id)	r@   r=   r>   feedrI   	rt_delaysrR   tustus	            r   load_realtimer\   O   s	   	
"###(**Dw-)(3TFFFd>&:5RXYYYabbbI+ T T??=)) 	T#B* T T<<,, T1G1G1P1P T@C@SIrw<=s	   = ArW   returnc                 z    |                                  o't          |           dk    o|                     d          S )N   000)isdigitlenendswith)rW   s    r   
is_area_idrd   e   s5    ??OW!3O8H8H8O8OOr    c                 0   t           j        |         |         }|d                                         }|d                             t                                        d          |d<   |d                             t                                        d          |d<   | pd                                }|d         j                                        j                            |d          |d         j                                        j                            |d          z  }||                                         }|dk    rg }|                    d          D ]{\  }	}
|
|
d         	                    t                             }t          |          r!|                    |j        d                    [|                    |
j        d                    |t          j        |          }t!          t#          |d         |d                             S )	Nr#   rW    	stop_nameF)naser   )r;   r<   copyr8   r6   fillnalowercontainsgroupbyr:   rd   rb   appendilocr4   	DataFramedictzip)queryr=   r>   datar#   qmaskmatches	best_rowsnamegroup	area_rowss               r   searchr}   j   s   77H%DM  EY'..s33::2>>E){+22377>>rBBE+	"A 	i""$$(11!1>>k$$&&*33A%3@@	A 	
 Dk  G $	"??;77 	0 	0KD%eI.44Z@@AI9~~ 0  !23333  A////,y))GK(')*<==>>>r    c                 J   t          |           } |                                }|d                             t                     |d<   |dk    rs|                                 r_t	          |           dk    rL| d d         }||d         j                             |                   d                                         }|r|S | |d         j        v rI||d                             t                     | k             d                                         }|r|S | gS ||d                             t                     | k             d                                         }|r|S ||d         j                             | dz                      d                                         }|r|S g S )NrW   ri   r_   parent_stationr
   )r6   rj   r8   ra   rb   
startswithtolistvalues)rW   stops_dfr=   basesiblingschildrenprefix_matchess          r   normalize_stop_idr      s   'llG}}H"9-44S99HY $7??,,W1C1Css|Y#..t44

VXX 	  	O (9%,,,%&--c22g=

VXX 	  	Oy!"))#..'9   **7S=99   Ir    c                    t           |         |         }	 t          t          t          j        |                              n#  t          | ||           Y nxY wt          j        |         |         }t          |           |d         }|d         }|d         }|d         }t          |||          t          j                                        }	|	j	        dz  |	j
        dz  z   |	j        z   }
|
dz   }t          | |          }|st          d|            g S ||d	         |
k    |d	         |k    z  |d
                             t                                        |          z           }|                    |d                              |d                              |d
          }|d                             d           |d<   fd}|                    |d          |d<   d }|d                             |          |d<   |                    d          }t          d|           g }d }|                                D ]n\  }} ||          t          |                    dd                    |d         t          |d                   |d         dg d}|                    |           o|t          j        |         |         | <   |S )Nr#   r$   r%   r&   r   r   i   zNo matching stop_ids found for:r"   rW   rV   )onroute_idr   c                 ,    t          j        | |           S N)r   r.   )xs    r   <lambda>zdeparture.<locals>.<lambda>   s    "1a(( r    traffic_typec                 b    | d         | d         f}| d                              |d          z   S )NrV   rW   r"   r   )r.   )rowkeyrY   s     r   apply_delayzdeparture.<locals>.apply_delay   s4    9~s9~.#$y}}S!'<'<<<r       )axisrt_departure_secsc                 :   t           j                                                                         }t           j                             |t           j         j                                                  t          j        |           z   }|                    d          S )N)secondsz%Y-%m-%dT%H:%M:%S)	r   nowdatecombineminr*   r4   	Timedeltastrftime)r   todaydts      r   secs_to_iso8601z"departure.<locals>.secs_to_iso8601   sr    !%%'',,..&&uh.?.C.H.H.J.JKKblcdNeNeNee{{.///r    	real_timezFUTURE: c                    t          j        |                     d                    r"| d                                         r| d         S t          j        |                     d                    r"| d                                         r| d         S t          j        |                     d                    r"| d                                         r| d         S dS )Nstop_headsigntrip_headsignroute_long_namerf   )r4   notnar.   strip)r   s    r   get_destinationz"departure.<locals>.get_destination   s    8CGGO,,-- 	(#o2F2L2L2N2N 	(''8CGGO,,-- 	(#o2F2L2L2N2N 	(''8CGG-..// 	*C8I4J4P4P4R4R 	*())rr    direction_idrf   route_short_name)idtransport_mode)destinationdirection_codeexpectedline
deviations)r   r,   dirr;   r<   r}   r\   r   r   hourminutesecondr   r8   r6   isinmerger:   sort_valuesiterrowsr.   ro   	operators)rW   r=   r>   r@   ru   r#   r$   r%   r&   r   now_secscutoffplatform_idsfuturer   r   outputr   r
   r   itemrY   s                        @r   rN   rN      s   ="D8	s177#$$	%	%	%	%.F7GX.....77H%D	$KKK MEMEl#J(^FdGX66I




!
!Cx$b03:=H F %We44L /999		$	%	1	$	%	/	1	I		%	%c	*	*	/	/	=	=	?F 	Uy))uV
u++uUyu))  $$78>>(( F>= = = = = #),,{,"C"CF0 0 0
 !!45;;OLLF; 344F	*fF   //##  3*?3//!#''.""="=>>K(#0122"%n"5  	
 	
 	d.4AK"7+Ms   ,A A)r   r   )r-   r2   r'   r*   pandasr4   r   google.transitr   r;   ru   r   r   r,   rG   r\   r6   boolrd   r}   r   rN    r    r   <module>r      s$     				            , , , , , ,   ' ' ' ' ' ' ' ' d   
9  9  9  9 ~  ,P P P P P P
? ? ?>$ $ $ $T^ ^ ^ ^ ^r    