11from datetime import datetime
22from typing import List , Union , TypeVar
3+
34from sqlalchemy import select
45from sqlalchemy .orm import joinedload
56from sqlalchemy .orm .query import Query
3738from feeds_gen .models .gtfs_dataset import GtfsDataset
3839from feeds_gen .models .gtfs_feed import GtfsFeed
3940from feeds_gen .models .gtfs_rt_feed import GtfsRTFeed
41+ from middleware .request_context import is_user_email_restricted
42+ from sqlalchemy import or_
4043from utils .date_utils import valid_iso_date
4144from utils .location_translation import (
4245 create_location_translation_object ,
@@ -65,6 +68,13 @@ def get_feed(
6568 FeedFilter (stable_id = id , provider__ilike = None , producer_url__ilike = None , status = None )
6669 .filter (Database ().get_query_model (Feed ))
6770 .filter (Feed .data_type != "gbfs" ) # Filter out GBFS feeds
71+ .filter (
72+ or_ (
73+ Feed .operational_status == None , # noqa: E711
74+ Feed .operational_status != "wip" ,
75+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
76+ )
77+ )
6878 .first ()
6979 )
7080 if feed :
@@ -86,6 +96,13 @@ def get_feeds(
8696 )
8797 feed_query = feed_filter .filter (Database ().get_query_model (Feed ))
8898 feed_query = feed_query .filter (Feed .data_type != "gbfs" ) # Filter out GBFS feeds
99+ feed_query = feed_query .filter (
100+ or_ (
101+ Feed .operational_status == None , # noqa: E711
102+ Feed .operational_status != "wip" ,
103+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
104+ )
105+ )
89106 # Results are sorted by provider
90107 feed_query = feed_query .order_by (Feed .provider , Feed .stable_id )
91108 feed_query = feed_query .options (* BasicFeedImpl .get_joinedload_options ())
@@ -118,6 +135,13 @@ def _get_gtfs_feed(stable_id: str) -> tuple[Gtfsfeed | None, dict[str, LocationT
118135 producer_url__ilike = None ,
119136 )
120137 .filter (Database ().get_session ().query (Gtfsfeed , t_location_with_translations_en ))
138+ .filter (
139+ or_ (
140+ Gtfsfeed .operational_status == None , # noqa: E711
141+ Gtfsfeed .operational_status != "wip" ,
142+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
143+ )
144+ )
121145 .outerjoin (Location , Feed .locations )
122146 .outerjoin (t_location_with_translations_en , Location .id == t_location_with_translations_en .c .location_id )
123147 .options (
@@ -156,6 +180,13 @@ def get_gtfs_feed_datasets(
156180 producer_url__ilike = None ,
157181 )
158182 .filter (Database ().get_query_model (Gtfsfeed ))
183+ .filter (
184+ or_ (
185+ Feed .operational_status == None , # noqa: E711
186+ Feed .operational_status != "wip" ,
187+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
188+ )
189+ )
159190 .first ()
160191 )
161192
@@ -213,6 +244,13 @@ def get_gtfs_feeds(
213244 .get_session ()
214245 .query (Gtfsfeed )
215246 .filter (Gtfsfeed .id .in_ (subquery ))
247+ .filter (
248+ or_ (
249+ Gtfsfeed .operational_status == None , # noqa: E711
250+ Gtfsfeed .operational_status != "wip" ,
251+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
252+ )
253+ )
216254 .options (
217255 joinedload (Gtfsfeed .gtfsdatasets )
218256 .joinedload (Gtfsdataset .validation_reports )
@@ -241,6 +279,13 @@ def get_gtfs_rt_feed(
241279 Database ()
242280 .get_session ()
243281 .query (Gtfsrealtimefeed , t_location_with_translations_en )
282+ .filter (
283+ or_ (
284+ Gtfsrealtimefeed .operational_status == None , # noqa: E711
285+ Gtfsrealtimefeed .operational_status != "wip" ,
286+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
287+ )
288+ )
244289 .outerjoin (Location , Gtfsrealtimefeed .locations )
245290 .outerjoin (t_location_with_translations_en , Location .id == t_location_with_translations_en .c .location_id )
246291 .options (
@@ -301,6 +346,13 @@ def get_gtfs_rt_feeds(
301346 .get_session ()
302347 .query (Gtfsrealtimefeed )
303348 .filter (Gtfsrealtimefeed .id .in_ (subquery ))
349+ .filter (
350+ or_ (
351+ Gtfsrealtimefeed .operational_status == None , # noqa: E711
352+ Gtfsrealtimefeed .operational_status != "wip" ,
353+ not is_user_email_restricted (), # Allow all feeds to be returned if the user is not restricted
354+ )
355+ )
304356 .options (
305357 joinedload (Gtfsrealtimefeed .entitytypes ),
306358 joinedload (Gtfsrealtimefeed .gtfs_feeds ),
0 commit comments