Skip to content

Commit c9824d3

Browse files
authored
fix: duplicate key and cascade bug in location extraction (#1165)
1 parent 369c004 commit c9824d3

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

api/src/shared/database/database.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def configure_polymorphic_mappers():
5757
Gbfsversion: [Gbfsversion.gbfsendpoints, Gbfsversion.gbfsvalidationreports],
5858
Gbfsfeed: [Gbfsfeed.gbfsversions],
5959
Gbfsvalidationreport: [Gbfsvalidationreport.gbfsnotices],
60+
Feed: [Feed.feedosmlocationgroups],
6061
}
6162

6263

functions-python/reverse_geolocation/src/reverse_geolocation_processor.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def get_cached_geopolygons(
9898
list(geometries_to_delete)
9999
),
100100
).delete(synchronize_session=False)
101-
db_session.commit()
101+
db_session.flush()
102102

103103
matched_geometries = matched_stops_df["geometry"].tolist()
104104
if not matched_geometries:
@@ -175,10 +175,21 @@ def extract_location_aggregate(
175175
group_name=", ".join([g.name for g in geopolygons]),
176176
osms=geopolygons,
177177
)
178-
stop = Feedlocationgrouppoint(feed_id=feed_id, geometry=stop_point)
178+
stop = (
179+
db_session.query(Feedlocationgrouppoint)
180+
.filter(
181+
Feedlocationgrouppoint.feed_id == feed_id,
182+
Feedlocationgrouppoint.geometry == stop_point,
183+
)
184+
.one_or_none()
185+
)
186+
if not stop:
187+
stop = Feedlocationgrouppoint(
188+
feed_id=feed_id,
189+
geometry=stop_point,
190+
)
191+
db_session.add(stop)
179192
stop.group = group
180-
db_session.add(stop)
181-
db_session.flush()
182193
logging.info(
183194
f"Point {stop_point} matched to {', '.join([g.name for g in geopolygons])}"
184195
)

0 commit comments

Comments
 (0)