@@ -128,20 +128,64 @@ def process_feed_references(self, session: "Session"):
128128 continue
129129 gtfs_rt_feed = self .query_feed_by_stable_id (session , stable_id , "gtfs_rt" )
130130 static_reference = self .get_safe_value (row , "static_reference" , "" )
131+ # gtfs_rt_feed.gtfs_feeds = []
132+ # if static_reference:
133+ # try:
134+ # gtfs_stable_id = f"mdb-{int(float(static_reference))}"
135+ # except ValueError:
136+ # gtfs_stable_id = static_reference
137+ # gtfs_feed = self.query_feed_by_stable_id(session, gtfs_stable_id, "gtfs")
138+ # if not gtfs_feed:
139+ # self.logger.warning(f"Could not find static reference feed {gtfs_stable_id} for feed {stable_id}")
140+ # continue
141+ # gtfs_rt_feed.gtfs_feeds = [gtfs_feed]
142+ # self.logger.info(f"Adding feed reference from {stable_id} to {gtfs_stable_id}")
143+ # # Flush to avoid FK violation
144+ # session.flush()
131145 gtfs_rt_feed .gtfs_feeds = []
132146 if static_reference :
133- try :
134- gtfs_stable_id = f"mdb-{ int (float (static_reference ))} "
135- except ValueError :
136- gtfs_stable_id = static_reference
137- gtfs_feed = self .query_feed_by_stable_id (session , gtfs_stable_id , "gtfs" )
138- if not gtfs_feed :
139- self .logger .warning (f"Could not find static reference feed { gtfs_stable_id } for feed { stable_id } " )
140- continue
141- gtfs_rt_feed .gtfs_feeds = [gtfs_feed ]
142- self .logger .info (f"Adding feed reference from { stable_id } to { gtfs_stable_id } " )
143- # Flush to avoid FK violation
147+ raw_tokens = [tok .strip () for tok in str (static_reference ).split ("|" ) if tok and tok .strip ()]
148+ matched_feeds = []
149+ for token in raw_tokens :
150+ try :
151+ gtfs_stable_id = f"mdb-{ int (float (token ))} "
152+ except ValueError :
153+ gtfs_stable_id = token
154+ gtfs_feed = self .query_feed_by_stable_id (session , gtfs_stable_id , "gtfs" )
155+ if not gtfs_feed :
156+ self .logger .warning (
157+ f"Could not find static reference feed { gtfs_stable_id } for feed { stable_id } "
158+ )
159+ continue
160+ # Only add if provider matches (normalized)
161+ rt_provider = (gtfs_rt_feed .provider or "" ).strip ().lower ()
162+ schedule_provider = (gtfs_feed .provider or "" ).strip ().lower ()
163+ if rt_provider and schedule_provider and rt_provider != schedule_provider :
164+ self .logger .info (
165+ f"Skipping static reference { gtfs_stable_id } for { stable_id } : provider mismatch "
166+ f"(gtfs_rt='{ gtfs_rt_feed .provider } ' vs. schedule='{ gtfs_feed .provider } ')"
167+ )
168+ continue
169+ matched_feeds .append (gtfs_feed )
170+
171+ # Replace persisted references with matched set (or clear if none matched)
172+ previous = [f .stable_id for f in getattr (gtfs_rt_feed , "gtfs_feeds" , [])] if gtfs_rt_feed else []
173+ gtfs_rt_feed .gtfs_feeds = matched_feeds
174+ session .add (gtfs_rt_feed )
144175 session .flush ()
176+ self .logger .info (
177+ f"Set feed references for { stable_id } : { previous } -> { [f .stable_id for f in matched_feeds ]} "
178+ )
179+
180+ # Clear raw static_reference field on the ORM if present (we persist relationships instead)
181+ if hasattr (gtfs_rt_feed , "static_reference" ):
182+ try :
183+ gtfs_rt_feed .static_reference = None
184+ session .add (gtfs_rt_feed )
185+ session .flush ()
186+ except Exception :
187+ # don't block population on clearing this field
188+ self .logger .debug ("Failed to clear static_reference attribute for feed %s" , stable_id )
145189
146190 def process_redirects (self , session : "Session" ):
147191 """
0 commit comments