1616
1717
1818@with_db_session
19- def get_feeds_data (country_codes : List [str ], db_session : Session ) -> List [Dict ]:
19+ def get_feeds_data (
20+ country_codes : List [str ], include_only_unprocessed : bool , db_session : Session
21+ ) -> List [Dict ]:
2022 """Get the feeds data for the given country codes. In case no country codes are provided, fetch feeds for all
2123 countries."""
2224 query = (
@@ -35,6 +37,10 @@ def get_feeds_data(country_codes: List[str], db_session: Session) -> List[Dict]:
3537 else :
3638 logging .warning ("No country codes provided. Fetching feeds for all countries." )
3739
40+ if include_only_unprocessed :
41+ logging .info ("Filtering for unprocessed feeds." )
42+ query = query .filter (~ Gtfsfeed .feedlocationgrouppoints .any ())
43+
3844 results = query .populate_existing ().all ()
3945 logging .info (f"Found { len (results )} feeds." )
4046
@@ -49,24 +55,28 @@ def get_feeds_data(country_codes: List[str], db_session: Session) -> List[Dict]:
4955 return data
5056
5157
52- def parse_request_parameters (request : flask .Request ) -> List [str ]:
53- """Parse the request parameters to get the country codes."""
54- country_codes = request .args .get ("country_codes" , "" ).split ("," )
58+ def parse_request_parameters (request : flask .Request ) -> Tuple [List [str ], bool ]:
59+ """Parse the request parameters to get the country codes and whether to include only unprocessed feeds."""
60+ json_request = request .get_json ()
61+ country_codes = json_request .get ("country_codes" , "" ).split ("," )
5562 country_codes = [code .strip ().upper () for code in country_codes if code ]
5663
5764 # Validate country codes
5865 for country_code in country_codes :
5966 if not pycountry .countries .get (alpha_2 = country_code ):
6067 raise ValueError (f"Invalid country code: { country_code } " )
61- return country_codes
68+ include_only_unprocessed = (
69+ json_request .get ("include_only_unprocessed" , True ) is True
70+ )
71+ return country_codes , include_only_unprocessed
6272
6373
6474def reverse_geolocation_batch (request : flask .Request ) -> Tuple [str , int ]:
6575 """Batch function to trigger reverse geolocation for feeds."""
6676 try :
6777 Logger .init_logger ()
68- country_codes = parse_request_parameters (request )
69- feeds_data = get_feeds_data (country_codes )
78+ country_codes , include_only_unprocessed = parse_request_parameters (request )
79+ feeds_data = get_feeds_data (country_codes , include_only_unprocessed )
7080 logging .info (f"Valid feeds with latest dataset: { len (feeds_data )} " )
7181
7282 pubsub_topic_name = os .getenv ("PUBSUB_TOPIC_NAME" , None )
0 commit comments