1919import os
2020import uuid
2121from datetime import datetime
22+ from typing import Optional
2223
2324import functions_framework
2425from google .cloud import pubsub_v1
@@ -64,7 +65,9 @@ def publish(publisher: PublisherClient, topic_path: str, data_bytes: bytes) -> F
6465 return publisher .publish (topic_path , data = data_bytes )
6566
6667
67- def get_non_deprecated_feeds (session : Session ):
68+ def get_non_deprecated_feeds (
69+ session : Session , feed_stable_ids : Optional [list [str ]] = None
70+ ):
6871 """
6972 Returns a list of non deprecated feeds
7073 :return: list of feeds
@@ -79,14 +82,17 @@ def get_non_deprecated_feeds(session: Session):
7982 Gtfsfeed .authentication_info_url ,
8083 Gtfsfeed .api_key_parameter_name ,
8184 Gtfsfeed .status ,
82- Gtfsdataset .id .label ("dataset_id " ),
85+ Gtfsdataset .stable_id .label ("dataset_stable_id " ),
8386 Gtfsdataset .hash .label ("dataset_hash" ),
8487 )
8588 .select_from (Gtfsfeed )
8689 .outerjoin (Gtfsdataset , (Gtfsdataset .feed_id == Gtfsfeed .id ))
8790 .filter (Gtfsfeed .status != "deprecated" )
8891 .filter (or_ (Gtfsdataset .id .is_ (None ), Gtfsdataset .latest .is_ (True )))
8992 )
93+ if feed_stable_ids :
94+ # If feed_stable_ids are provided, filter the query by stable IDs
95+ query = query .filter (Gtfsfeed .stable_id .in_ (feed_stable_ids ))
9096 # Limit the query to 10 feeds (or FEEDS_LIMIT param) for testing purposes and lower environments
9197 if os .getenv ("ENVIRONMENT" , "" ).lower () in ("dev" , "test" , "qa" ):
9298 limit = os .getenv ("FEEDS_LIMIT" )
@@ -108,8 +114,17 @@ def batch_datasets(request, db_session: Session):
108114 :param db_session: database session object
109115 :return: HTTP response object
110116 """
117+ feed_stable_ids = None
111118 try :
112- feeds = get_non_deprecated_feeds (db_session )
119+ request_json = request .get_json ()
120+ feed_stable_ids = request_json .get ("feed_stable_ids" ) if request_json else None
121+ except Exception :
122+ logging .info (
123+ "No feed_stable_ids provided in the request, processing all feeds."
124+ )
125+
126+ try :
127+ feeds = get_non_deprecated_feeds (db_session , feed_stable_ids = feed_stable_ids )
113128 except Exception as error :
114129 logging .error (f"Error retrieving feeds: { error } " )
115130 raise Exception (f"Error retrieving feeds: { error } " )
@@ -130,7 +145,7 @@ def batch_datasets(request, db_session: Session):
130145 "producer_url" : feed .producer_url ,
131146 "feed_stable_id" : feed .stable_id ,
132147 "feed_id" : feed .feed_id ,
133- "dataset_id " : feed .dataset_id ,
148+ "dataset_stable_id " : feed .dataset_stable_id ,
134149 "dataset_hash" : feed .dataset_hash ,
135150 "authentication_type" : feed .authentication_type ,
136151 "authentication_info_url" : feed .authentication_info_url ,
0 commit comments