Skip to content

Commit e921112

Browse files
committed
updated code
1 parent 8cf54ec commit e921112

File tree

1 file changed

+55
-11
lines changed

1 file changed

+55
-11
lines changed

api/src/scripts/populate_db_gtfs.py

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)