Skip to content

Commit 7c46470

Browse files
committed
Merge branch 'main' into 779-generate-new-sourcescsv-from-postgresql-database2
2 parents a481a46 + e59d956 commit 7c46470

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1920
-415
lines changed

api/src/feeds/impl/models/basic_feed_impl.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@ class Config:
2020
def from_orm(cls, feed: Feed | None, _=None) -> BasicFeed | None:
2121
if not feed:
2222
return None
23-
latest_official_status = None
24-
if len(feed.officialstatushistories) > 0:
25-
latest_official_status = max(feed.officialstatushistories, key=lambda x: x.timestamp).is_official
2623
return cls(
2724
id=feed.stable_id,
2825
data_type=feed.data_type,
2926
status=feed.status,
30-
official=latest_official_status,
27+
official=feed.official,
28+
official_updated_at=feed.official_updated_at,
3129
created_at=feed.created_at,
3230
external_ids=sorted(
3331
[ExternalIdImpl.from_orm(item) for item in feed.externalids], key=lambda x: x.external_id

api/src/feeds/impl/models/gtfs_dataset_impl.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from functools import reduce
22
from typing import List
33

4-
from packaging.version import Version
5-
64
from shared.database_gen.sqlacodegen_models import Gtfsdataset, Validationreport
75
from feeds.impl.models.bounding_box_impl import BoundingBoxImpl
86
from feeds.impl.models.validation_report_impl import ValidationReportImpl
97
from feeds_gen.models.gtfs_dataset import GtfsDataset
8+
from utils.model_utils import compare_java_versions
109

1110

1211
class GtfsDatasetImpl(GtfsDataset):
@@ -30,7 +29,8 @@ def from_orm_latest_validation_report(
3029
"""
3130
if validation_reports:
3231
latest_report = reduce(
33-
lambda a, b: a if Version(a.validator_version) > Version(b.validator_version) else b, validation_reports
32+
lambda a, b: a if compare_java_versions(a.validator_version, b.validator_version) == 1 else b,
33+
validation_reports,
3434
)
3535
return ValidationReportImpl.from_orm(latest_report)
3636
return None
@@ -49,4 +49,6 @@ def from_orm(cls, gtfs_dataset: Gtfsdataset | None) -> GtfsDataset | None:
4949
hash=gtfs_dataset.hash,
5050
bounding_box=BoundingBoxImpl.from_orm(gtfs_dataset.bounding_box),
5151
validation_report=cls.from_orm_latest_validation_report(gtfs_dataset.validation_reports),
52+
service_date_range_start=gtfs_dataset.service_date_range_start,
53+
service_date_range_end=gtfs_dataset.service_date_range_end,
5254
)

api/src/feeds/impl/models/latest_dataset_impl.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from functools import reduce
22

3-
from packaging.version import Version
4-
53
from shared.database_gen.sqlacodegen_models import Gtfsdataset
64
from feeds.impl.models.bounding_box_impl import BoundingBoxImpl
75
from feeds.impl.models.validation_report_impl import ValidationReportImpl
86
from feeds_gen.models.latest_dataset import LatestDataset
97
from feeds_gen.models.latest_dataset_validation_report import LatestDatasetValidationReport
8+
from utils.model_utils import compare_java_versions
109

1110

1211
class LatestDatasetImpl(LatestDataset):
@@ -28,7 +27,7 @@ def from_orm(cls, dataset: Gtfsdataset | None) -> LatestDataset | None:
2827
validation_report: LatestDatasetValidationReport | None = None
2928
if dataset.validation_reports:
3029
latest_report = reduce(
31-
lambda a, b: a if Version(a.validator_version) > Version(b.validator_version) else b,
30+
lambda a, b: a if compare_java_versions(a.validator_version, b.validator_version) == 1 else b,
3231
dataset.validation_reports,
3332
)
3433
(
@@ -52,6 +51,8 @@ def from_orm(cls, dataset: Gtfsdataset | None) -> LatestDataset | None:
5251
hosted_url=dataset.hosted_url,
5352
bounding_box=BoundingBoxImpl.from_orm(dataset.bounding_box),
5453
downloaded_at=dataset.downloaded_at,
54+
service_date_range_start=dataset.service_date_range_start,
55+
service_date_range_end=dataset.service_date_range_end,
5556
hash=dataset.hash,
5657
validation_report=validation_report,
5758
)

api/src/feeds/impl/models/search_feed_item_result_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ def from_orm_gtfs(cls, feed_search_row):
4444
hosted_url=feed_search_row.latest_dataset_hosted_url,
4545
downloaded_at=feed_search_row.latest_dataset_downloaded_at,
4646
hash=feed_search_row.latest_dataset_hash,
47+
service_date_range_start=feed_search_row.latest_dataset_service_date_range_start,
48+
service_date_range_end=feed_search_row.latest_dataset_service_date_range_end,
4749
)
4850
if feed_search_row.latest_dataset_id
4951
else None,

api/src/utils/model_utils.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from packaging.version import Version
2+
3+
4+
def compare_java_versions(v1: str | None, v2: str | None):
5+
"""
6+
Compare two version strings v1 and v2.
7+
Returns 1 if v1 > v2, -1 if v1 < v2,
8+
otherwise 0.
9+
The version strings are expected to be in the format of
10+
major.minor.patch[-SNAPSHOT]
11+
"""
12+
if v1 is None and v2 is None:
13+
return 0
14+
if v1 is None:
15+
return -1
16+
if v2 is None:
17+
return 1
18+
# clean version strings replacing the SNAPSHOT suffix with .dev0
19+
v1 = v1.replace("-SNAPSHOT", ".dev0")
20+
v2 = v2.replace("-SNAPSHOT", ".dev0")
21+
if Version(v1) > Version(v2):
22+
return 1
23+
elif Version(v1) < Version(v2):
24+
return -1
25+
else:
26+
return 0

api/tests/test_data/extra_test_data.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
"hosted_url": "https://example.com/dataset-1",
88
"hash": "hash",
99
"downloaded_at": "2024-01-31T00:00:00+00:00",
10-
"feed_stable_id": "mdb-1"
10+
"feed_stable_id": "mdb-1",
11+
"service_date_range_start": "2024-01-01",
12+
"service_date_range_end":"2025-01-01"
1113
},
1214
{
1315
"id": "dataset-2",
@@ -16,7 +18,9 @@
1618
"hosted_url": "https://example.com/dataset-2",
1719
"hash": "hash",
1820
"downloaded_at": "2024-02-01T00:00:00+00:00",
19-
"feed_stable_id": "mdb-1"
21+
"feed_stable_id": "mdb-1",
22+
"service_date_range_start": "2024-01-01",
23+
"service_date_range_end":"2025-01-01"
2024
},
2125
{
2226
"id": "dataset-3",
@@ -25,7 +29,9 @@
2529
"hosted_url": "https://example.com/dataset-3",
2630
"hash": "hash",
2731
"downloaded_at": "2024-02-02T00:00:00+00:00",
28-
"feed_stable_id": "mdb-10"
32+
"feed_stable_id": "mdb-10",
33+
"service_date_range_start": "2024-01-01",
34+
"service_date_range_end":"2025-01-01"
2935
},
3036
{
3137
"id": "dataset-4",
@@ -34,7 +40,9 @@
3440
"hosted_url": "https://example.com/dataset-4",
3541
"hash": "hash",
3642
"downloaded_at": "2024-02-03T00:00:00+00:00",
37-
"feed_stable_id": "mdb-10"
43+
"feed_stable_id": "mdb-10",
44+
"service_date_range_start": "2024-01-01",
45+
"service_date_range_end":"2025-01-01"
3846
}
3947
],
4048
"validation_reports": [

api/tests/test_data/test_datasets.json

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
"downloaded_at": "2024-02-01T00:00:00Z",
99
"hash": "hash-1",
1010
"latest": true,
11-
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))"
11+
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))",
12+
"service_date_range_start": "2024-01-01",
13+
"service_date_range_end":"2025-01-01"
1214
},
1315
{
1416
"id": "dataset-2",
@@ -17,7 +19,9 @@
1719
"downloaded_at": "2024-01-01T00:00:00Z",
1820
"hash": "hash-2",
1921
"latest": false,
20-
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))"
22+
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))",
23+
"service_date_range_start": "2024-01-01",
24+
"service_date_range_end":"2025-01-01"
2125
},
2226
{
2327
"id": "dataset-3",
@@ -26,7 +30,9 @@
2630
"downloaded_at": "2024-01-01T00:00:00Z",
2731
"hash": "hash-3",
2832
"latest": true,
29-
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))"
33+
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))",
34+
"service_date_range_start": "2024-01-01",
35+
"service_date_range_end":"2025-01-01"
3036
},
3137
{
3238
"id": "dataset-4",
@@ -35,7 +41,9 @@
3541
"downloaded_at": "2024-02-01T00:00:00Z",
3642
"hash": "hash-4",
3743
"latest": false,
38-
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))"
44+
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))",
45+
"service_date_range_start": "2024-01-01",
46+
"service_date_range_end":"2025-01-01"
3947
},
4048
{
4149
"id": "dataset-5",
@@ -44,7 +52,9 @@
4452
"downloaded_at": "2024-01-01T00:00:00Z",
4553
"hash": "hash-5",
4654
"latest": true,
47-
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))"
55+
"bounding_box": "POLYGON((-122.75 36.8, -122.75 37.8, -121.75 37.8, -121.75 36.8, -122.75 36.8))",
56+
"service_date_range_start": "2024-01-01",
57+
"service_date_range_end":"2025-01-01"
4858
}
4959
],
5060
"validation_reports": [

api/tests/unittest/models/test_basic_feed_impl.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import copy
22
import unittest
3-
from datetime import datetime
3+
from datetime import datetime, date
44

55
from shared.database_gen.sqlacodegen_models import (
66
Feed,
@@ -64,6 +64,8 @@
6464
downloaded_at="downloaded_at",
6565
hash="hash",
6666
bounding_box="bounding_box",
67+
service_date_range_start=date(2024, 1, 1),
68+
service_date_range_end=date(2025, 1, 1),
6769
validation_reports=[
6870
Validationreport(
6971
id="id",

api/tests/unittest/models/test_gtfs_dataset_impl.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import unittest
2-
from datetime import datetime
2+
from datetime import datetime, date
33

44
from geoalchemy2 import WKTElement
55

@@ -42,6 +42,8 @@ def test_from_orm(self):
4242
Validationreport(validator_version="0.2.0"),
4343
Validationreport(validator_version="1.1.1"),
4444
],
45+
service_date_range_start=date(2024, 1, 1),
46+
service_date_range_end=date(2025, 1, 1),
4547
)
4648
result = GtfsDatasetImpl.from_orm(orm)
4749
assert result.id == "stable_id"
@@ -56,5 +58,7 @@ def test_from_orm(self):
5658
assert result.bounding_box.minimum_longitude == 3.0
5759
assert result.bounding_box.maximum_longitude == 4.0
5860
assert result.validation_report.validator_version == "1.1.1"
61+
assert result.service_date_range_start == date(2024, 1, 1)
62+
assert result.service_date_range_end == date(2025, 1, 1)
5963

6064
assert GtfsDatasetImpl.from_orm(None) is None

api/tests/unittest/models/test_gtfs_feed_impl.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import copy
22
import unittest
3-
from datetime import datetime
3+
from datetime import datetime, date
44

55
from geoalchemy2 import WKTElement
66

@@ -87,6 +87,8 @@ def create_test_notice(notice_code: str, total_notices: int, severity: str):
8787
note="note",
8888
downloaded_at=datetime(year=2022, month=12, day=31, hour=13, minute=45, second=56),
8989
hash="hash",
90+
service_date_range_start=date(2024, 1, 1),
91+
service_date_range_end=date(2025, 1, 1),
9092
bounding_box=WKTElement(POLYGON, srid=4326),
9193
latest=True,
9294
validation_reports=[
@@ -169,6 +171,8 @@ def create_test_notice(notice_code: str, total_notices: int, severity: str):
169171
unique_warning_count=4,
170172
unique_info_count=2,
171173
),
174+
service_date_range_start="2024-01-01",
175+
service_date_range_end="2025-01-01",
172176
),
173177
)
174178

0 commit comments

Comments
 (0)