Skip to content

Commit adf002a

Browse files
fix: service date range order (#988)
* service date range order
1 parent 2a643b7 commit adf002a

File tree

3 files changed

+80
-4
lines changed

3 files changed

+80
-4
lines changed

functions-python/backfill_dataset_service_date_range/src/main.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,14 @@ def backfill_datasets(session: "Session"):
136136
)
137137
continue
138138

139-
dataset.service_date_range_start = extracted_service_start_date
140-
dataset.service_date_range_end = extracted_service_end_date
139+
# this check is due to an issue in the validation report
140+
# where the start date could be later than the end date
141+
if extracted_service_start_date > extracted_service_end_date:
142+
dataset.service_date_range_start = extracted_service_end_date
143+
dataset.service_date_range_end = extracted_service_start_date
144+
else:
145+
dataset.service_date_range_start = extracted_service_start_date
146+
dataset.service_date_range_end = extracted_service_end_date
141147

142148
formatted_dates = (
143149
extracted_service_start_date + " - " + extracted_service_end_date

functions-python/backfill_dataset_service_date_range/tests/test_backfill_dataset_service_date_range_main.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,71 @@ def test_backfill_datasets(mock_get, mock_storage_client):
8383
mock_session.commit.assert_called_once()
8484

8585

86+
@patch("google.cloud.storage.Client", autospec=True)
87+
@patch("requests.get")
88+
def test_backfill_datasets_service_date_range_swap(mock_get, mock_storage_client):
89+
# Mock the storage client and bucket
90+
mock_bucket = MagicMock()
91+
mock_client_instance = mock_storage_client.return_value
92+
mock_client_instance.bucket.return_value = mock_bucket
93+
mock_blob = MagicMock()
94+
mock_blob.exists.return_value = False
95+
mock_bucket.blob.return_value = mock_blob
96+
97+
mock_session = MagicMock()
98+
mock_dataset = Mock(spec=Gtfsdataset)
99+
mock_dataset.id = 1
100+
mock_dataset.stable_id = "mdb-392-202406181921"
101+
mock_dataset.service_date_range_end = None
102+
mock_dataset.service_date_range_start = None
103+
mock_dataset.validation_reports = [
104+
MagicMock(
105+
validator_version="6.0.0",
106+
validated_at="2022-01-01T00:00:00Z",
107+
json_report="http://example-2.com/report.json",
108+
),
109+
MagicMock(
110+
validator_version="5.0.0",
111+
validated_at="2023-01-01T00:00:00Z",
112+
json_report="http://example-3.com/report.json",
113+
),
114+
MagicMock(
115+
validator_version="6.0.0",
116+
validated_at="2024-01-01T00:00:00Z",
117+
json_report="http://example-1.com/report.json",
118+
),
119+
]
120+
121+
mock_query = MagicMock()
122+
mock_query.options.return_value = mock_query
123+
mock_query.filter.return_value = mock_query
124+
mock_query.all.return_value = [mock_dataset]
125+
mock_session.query.return_value = mock_query
126+
127+
# Mock the requests.get response
128+
mock_response = Mock()
129+
mock_response.status_code = 200
130+
mock_response.json.return_value = {
131+
"summary": {
132+
"feedInfo": {
133+
"feedServiceWindowStart": "2023-12-31",
134+
"feedServiceWindowEnd": "2023-01-01",
135+
}
136+
}
137+
}
138+
mock_get.return_value = mock_response
139+
140+
changes_count = backfill_datasets(mock_session)
141+
142+
assert changes_count == 1
143+
assert mock_dataset.service_date_range_start == "2023-01-01"
144+
assert mock_dataset.service_date_range_end == "2023-12-31"
145+
mock_get.assert_called_once_with(
146+
"http://example-1.com/report.json"
147+
) # latest validation report
148+
mock_session.commit.assert_called_once()
149+
150+
86151
@patch("logging.error", autospec=True)
87152
@patch("google.cloud.storage.Client", autospec=True)
88153
@patch("requests.get")

functions-python/process_validation_report/src/main.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,13 @@ def populate_service_date(dataset, json_report):
182182
json_report, ["summary", "feedInfo", "feedServiceWindowEnd"]
183183
)
184184
if feed_service_window_start and feed_service_window_end:
185-
dataset.service_date_range_start = feed_service_window_start
186-
dataset.service_date_range_end = feed_service_window_end
185+
# this check is due to an issue in the validation report where the start date could be later than the end date
186+
if feed_service_window_start > feed_service_window_end:
187+
dataset.service_date_range_start = feed_service_window_end
188+
dataset.service_date_range_end = feed_service_window_start
189+
else:
190+
dataset.service_date_range_start = feed_service_window_start
191+
dataset.service_date_range_end = feed_service_window_end
187192

188193

189194
def create_validation_report_entities(feed_stable_id, dataset_stable_id, version):

0 commit comments

Comments
 (0)