Next alpha stage commit
This commit is contained in:
@@ -13,6 +13,8 @@ from app.models import (
|
||||
GtfsAgency,
|
||||
GtfsCalendar,
|
||||
GtfsCalendarDate,
|
||||
GtfsHarmonizedSnapshotDataset,
|
||||
GtfsHarmonizedSnapshotRoute,
|
||||
GtfsRoute,
|
||||
GtfsRoutePatternLink,
|
||||
GtfsShape,
|
||||
@@ -20,6 +22,8 @@ from app.models import (
|
||||
GtfsStopTime,
|
||||
GtfsTripRoutePatternLink,
|
||||
GtfsTrip,
|
||||
MapGtfsDecision,
|
||||
MapGtfsReviewItem,
|
||||
OsmDiffState,
|
||||
OsmFeature,
|
||||
RouteMatch,
|
||||
@@ -136,6 +140,8 @@ def delete_source(session: Session, source_id: int) -> dict[str, object]:
|
||||
_delete_dataset_files(dataset)
|
||||
session.delete(dataset)
|
||||
session.execute(delete(OsmDiffState).where(OsmDiffState.source_id == source.id))
|
||||
session.execute(delete(MapGtfsReviewItem).where(MapGtfsReviewItem.source_id == source.id))
|
||||
session.execute(delete(MapGtfsDecision).where(MapGtfsDecision.source_id == source.id))
|
||||
session.delete(source)
|
||||
session.flush()
|
||||
return {"deleted": True, "source_id": source_id, "datasets": dataset_results}
|
||||
@@ -217,14 +223,41 @@ def prune_inactive_datasets(session: Session, dry_run: bool = True) -> dict[str,
|
||||
|
||||
for dataset_id in dataset_ids:
|
||||
_detach_update_checks_for_dataset(session, dataset_id)
|
||||
for dataset in session.scalars(select(Dataset).where(Dataset.id.in_(dataset_ids))).all():
|
||||
_delete_workbench_rows_for_dataset(session, dataset)
|
||||
if match_filters:
|
||||
session.execute(delete(RouteMatch).where(or_(*match_filters)))
|
||||
if gtfs_ids:
|
||||
route_ids = select(GtfsRoute.id).where(GtfsRoute.dataset_id.in_(gtfs_ids))
|
||||
pattern_ids = select(RoutePattern.id).where(RoutePattern.gtfs_route_id.in_(route_ids))
|
||||
session.execute(
|
||||
delete(GtfsHarmonizedSnapshotRoute).where(
|
||||
or_(
|
||||
GtfsHarmonizedSnapshotRoute.dataset_id.in_(gtfs_ids),
|
||||
GtfsHarmonizedSnapshotRoute.shadowed_by_dataset_id.in_(gtfs_ids),
|
||||
GtfsHarmonizedSnapshotRoute.gtfs_route_id.in_(route_ids),
|
||||
GtfsHarmonizedSnapshotRoute.shadowed_by_gtfs_route_id.in_(route_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(delete(GtfsHarmonizedSnapshotDataset).where(GtfsHarmonizedSnapshotDataset.dataset_id.in_(gtfs_ids)))
|
||||
session.execute(delete(RoutePatternStop).where(RoutePatternStop.route_pattern_id.in_(pattern_ids)))
|
||||
session.execute(delete(GtfsTripRoutePatternLink).where(GtfsTripRoutePatternLink.dataset_id.in_(gtfs_ids)))
|
||||
session.execute(delete(GtfsRoutePatternLink).where(GtfsRoutePatternLink.dataset_id.in_(gtfs_ids)))
|
||||
session.execute(
|
||||
delete(GtfsTripRoutePatternLink).where(
|
||||
or_(
|
||||
GtfsTripRoutePatternLink.dataset_id.in_(gtfs_ids),
|
||||
GtfsTripRoutePatternLink.route_pattern_id.in_(pattern_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(
|
||||
delete(GtfsRoutePatternLink).where(
|
||||
or_(
|
||||
GtfsRoutePatternLink.dataset_id.in_(gtfs_ids),
|
||||
GtfsRoutePatternLink.route_pattern_id.in_(pattern_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(delete(RoutePattern).where(RoutePattern.gtfs_route_id.in_(route_ids)))
|
||||
session.execute(delete(CanonicalStopLink).where(CanonicalStopLink.dataset_id.in_(gtfs_ids), CanonicalStopLink.object_type == "gtfs_stop"))
|
||||
for model in [GtfsStopTime, GtfsShape, GtfsTrip, GtfsCalendarDate, GtfsCalendar, GtfsRoute, GtfsStop, GtfsAgency]:
|
||||
@@ -246,13 +279,39 @@ def prune_inactive_datasets(session: Session, dry_run: bool = True) -> dict[str,
|
||||
|
||||
|
||||
def _delete_dataset_rows(session: Session, dataset: Dataset) -> None:
|
||||
_delete_workbench_rows_for_dataset(session, dataset)
|
||||
if dataset.kind == "gtfs":
|
||||
route_ids = select(GtfsRoute.id).where(GtfsRoute.dataset_id == dataset.id)
|
||||
pattern_ids = select(RoutePattern.id).where(RoutePattern.gtfs_route_id.in_(route_ids))
|
||||
session.execute(
|
||||
delete(GtfsHarmonizedSnapshotRoute).where(
|
||||
or_(
|
||||
GtfsHarmonizedSnapshotRoute.dataset_id == dataset.id,
|
||||
GtfsHarmonizedSnapshotRoute.shadowed_by_dataset_id == dataset.id,
|
||||
GtfsHarmonizedSnapshotRoute.gtfs_route_id.in_(route_ids),
|
||||
GtfsHarmonizedSnapshotRoute.shadowed_by_gtfs_route_id.in_(route_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(delete(GtfsHarmonizedSnapshotDataset).where(GtfsHarmonizedSnapshotDataset.dataset_id == dataset.id))
|
||||
session.execute(delete(RouteMatch).where(RouteMatch.gtfs_route_id.in_(route_ids)))
|
||||
session.execute(delete(RoutePatternStop).where(RoutePatternStop.route_pattern_id.in_(pattern_ids)))
|
||||
session.execute(delete(GtfsTripRoutePatternLink).where(GtfsTripRoutePatternLink.dataset_id == dataset.id))
|
||||
session.execute(delete(GtfsRoutePatternLink).where(GtfsRoutePatternLink.dataset_id == dataset.id))
|
||||
session.execute(
|
||||
delete(GtfsTripRoutePatternLink).where(
|
||||
or_(
|
||||
GtfsTripRoutePatternLink.dataset_id == dataset.id,
|
||||
GtfsTripRoutePatternLink.route_pattern_id.in_(pattern_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(
|
||||
delete(GtfsRoutePatternLink).where(
|
||||
or_(
|
||||
GtfsRoutePatternLink.dataset_id == dataset.id,
|
||||
GtfsRoutePatternLink.route_pattern_id.in_(pattern_ids),
|
||||
)
|
||||
)
|
||||
)
|
||||
session.execute(delete(RoutePattern).where(RoutePattern.gtfs_route_id.in_(route_ids)))
|
||||
session.execute(delete(CanonicalStopLink).where(CanonicalStopLink.dataset_id == dataset.id, CanonicalStopLink.object_type == "gtfs_stop"))
|
||||
for model in [GtfsStopTime, GtfsShape, GtfsTrip, GtfsCalendarDate, GtfsCalendar, GtfsRoute, GtfsStop, GtfsAgency]:
|
||||
@@ -269,6 +328,55 @@ def _delete_dataset_rows(session: Session, dataset: Dataset) -> None:
|
||||
session.execute(delete(OsmFeature).where(OsmFeature.dataset_id == dataset.id))
|
||||
|
||||
|
||||
def _delete_workbench_rows_for_dataset(session: Session, dataset: Dataset) -> None:
|
||||
review_filters = [MapGtfsReviewItem.dataset_id == dataset.id]
|
||||
decision_filters = [
|
||||
MapGtfsDecision.gtfs_dataset_id == dataset.id,
|
||||
MapGtfsDecision.osm_dataset_id == dataset.id,
|
||||
]
|
||||
if dataset.kind == "gtfs":
|
||||
route_ids = select(GtfsRoute.id).where(GtfsRoute.dataset_id == dataset.id)
|
||||
stop_ids = select(GtfsStop.id).where(GtfsStop.dataset_id == dataset.id)
|
||||
match_ids = select(RouteMatch.id).where(RouteMatch.gtfs_route_id.in_(route_ids))
|
||||
link_ids = select(CanonicalStopLink.id).where(CanonicalStopLink.dataset_id == dataset.id, CanonicalStopLink.object_type == "gtfs_stop")
|
||||
review_filters.extend(
|
||||
[
|
||||
MapGtfsReviewItem.gtfs_route_id.in_(route_ids),
|
||||
MapGtfsReviewItem.gtfs_stop_id.in_(stop_ids),
|
||||
MapGtfsReviewItem.route_match_id.in_(match_ids),
|
||||
MapGtfsReviewItem.canonical_stop_link_id.in_(link_ids),
|
||||
]
|
||||
)
|
||||
decision_filters.extend(
|
||||
[
|
||||
MapGtfsDecision.gtfs_route_id.in_(route_ids),
|
||||
MapGtfsDecision.gtfs_stop_id.in_(stop_ids),
|
||||
MapGtfsDecision.route_match_id.in_(match_ids),
|
||||
MapGtfsDecision.canonical_stop_link_id.in_(link_ids),
|
||||
]
|
||||
)
|
||||
elif dataset.kind == "osm_geojson":
|
||||
osm_feature_ids = select(OsmFeature.id).where(OsmFeature.dataset_id == dataset.id)
|
||||
match_ids = select(RouteMatch.id).where(RouteMatch.osm_feature_id.in_(osm_feature_ids))
|
||||
link_ids = select(CanonicalStopLink.id).where(CanonicalStopLink.dataset_id == dataset.id, CanonicalStopLink.object_type == "osm_feature")
|
||||
review_filters.extend(
|
||||
[
|
||||
MapGtfsReviewItem.osm_feature_id.in_(osm_feature_ids),
|
||||
MapGtfsReviewItem.route_match_id.in_(match_ids),
|
||||
MapGtfsReviewItem.canonical_stop_link_id.in_(link_ids),
|
||||
]
|
||||
)
|
||||
decision_filters.extend(
|
||||
[
|
||||
MapGtfsDecision.osm_feature_id.in_(osm_feature_ids),
|
||||
MapGtfsDecision.route_match_id.in_(match_ids),
|
||||
MapGtfsDecision.canonical_stop_link_id.in_(link_ids),
|
||||
]
|
||||
)
|
||||
session.execute(delete(MapGtfsReviewItem).where(or_(*review_filters)))
|
||||
session.execute(delete(MapGtfsDecision).where(or_(*decision_filters)))
|
||||
|
||||
|
||||
def _delete_dataset_files(dataset: Dataset) -> None:
|
||||
for path in dataset_sidecar_paths(dataset):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user