Skip to content

Commit 5a109be

Browse files
authored
feat: JBDA import (#1407)
1 parent 276d642 commit 5a109be

File tree

24 files changed

+1565
-6
lines changed

24 files changed

+1565
-6
lines changed

api/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ src/feeds_gen/models/bounding_box.py
1818
src/feeds_gen/models/external_id.py
1919
src/feeds_gen/models/extra_models.py
2020
src/feeds_gen/models/feed.py
21+
src/feeds_gen/models/feed_related_link.py
2122
src/feeds_gen/models/gbfs_endpoint.py
2223
src/feeds_gen/models/gbfs_feed.py
2324
src/feeds_gen/models/gbfs_validation_report.py

api/src/shared/common/db_utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ def get_joinedload_options(include_extracted_location_entities: bool = False) ->
379379
return joinedload_options + [
380380
joinedload(Feed.locations),
381381
joinedload(Feed.externalids),
382+
joinedload(Feed.feedrelatedlinks),
382383
joinedload(Feed.redirectingids).joinedload(Redirectingid.target),
383384
joinedload(Feed.officialstatushistories),
384385
]

api/src/shared/db_models/feed_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from shared.db_models.basic_feed_impl import BaseFeedImpl
22
from feeds_gen.models.feed import Feed
33
from shared.database_gen.sqlacodegen_models import Feed as FeedOrm
4+
from shared.db_models.feed_related_link_impl import FeedRelatedLinkImpl
45

56

67
class FeedImpl(BaseFeedImpl, Feed):
@@ -23,5 +24,6 @@ def from_orm(cls, feed_orm: FeedOrm | None) -> Feed | None:
2324
feed.official = feed_orm.official
2425
feed.official_updated_at = feed_orm.official_updated_at
2526
feed.feed_name = feed_orm.feed_name
27+
feed.related_links = [FeedRelatedLinkImpl.from_orm(related_link) for related_link in feed_orm.feedrelatedlinks]
2628
feed.note = feed_orm.note
2729
return feed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from feeds_gen.models.feed_related_link import FeedRelatedLink
2+
from shared.database_gen.sqlacodegen_models import Feedrelatedlink
3+
4+
5+
class FeedRelatedLinkImpl(FeedRelatedLink):
6+
"""Implementation of the FeedRelatedLink model."""
7+
8+
class Config:
9+
"""Pydantic configuration.
10+
Enabling `from_orm` method to create a model instance from a SQLAlchemy row object."""
11+
12+
from_attributes = True
13+
14+
@classmethod
15+
def from_orm(cls, feed_related_link_orm: Feedrelatedlink) -> FeedRelatedLink | None:
16+
if not feed_related_link_orm:
17+
return None
18+
return cls(
19+
code=feed_related_link_orm.code,
20+
url=feed_related_link_orm.url,
21+
description=feed_related_link_orm.description,
22+
created_at=feed_related_link_orm.created_at,
23+
)

api/tests/unittest/models/test_basic_feed_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
feed_name="feed_name",
9696
note="note",
9797
feed_contact_email="feed_contact_email",
98+
related_links=[],
9899
source_info=SourceInfo(
99100
producer_url="producer_url",
100101
authentication_type=1,
@@ -149,6 +150,7 @@ def test_from_orm_empty_fields(self):
149150
external_ids=[],
150151
redirects=[],
151152
source_info=SourceInfo(),
153+
related_links=[],
152154
)
153155
empty_result = FeedImpl.from_orm(empty_feed_orm)
154156
assert empty_result == expected_empty_feed

api/tests/unittest/models/test_gbfs_feed_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def test_from_orm_all_fields(self):
4949
expected = GbfsFeedImpl(
5050
id="feed_stable_1",
5151
system_id="sys1",
52+
related_links=[],
5253
data_type="gbfs",
5354
created_at=datetime(2024, 1, 1, 10, 0, 0),
5455
external_ids=[],
@@ -88,6 +89,7 @@ def test_from_orm_empty_fields(self):
8889
redirects=[],
8990
locations=[],
9091
versions=[],
92+
related_links=[],
9193
bounding_box=None,
9294
bounding_box_generated_at=None,
9395
source_info=SourceInfo(

api/tests/unittest/models/test_gtfs_feed_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ def create_test_notice(notice_code: str, total_notices: int, severity: str):
134134
feed_name="feed_name",
135135
note="note",
136136
feed_contact_email="feed_contact_email",
137+
related_links=[],
137138
source_info=SourceInfo(
138139
producer_url="producer_url",
139140
authentication_type=1,
@@ -226,6 +227,7 @@ def test_from_orm_empty_fields(self):
226227
provider=None,
227228
feed_name="",
228229
note=None,
230+
related_links=[],
229231
feed_contact_email=None,
230232
source_info=SourceInfo(
231233
producer_url=None,

api/tests/unittest/models/test_gtfs_rt_feed_impl.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
id="id",
6565
data_type="gtfs_rt",
6666
status="active",
67+
related_links=[],
6768
external_ids=[ExternalIdImpl(external_id="associated_id", source="source")],
6869
provider="provider",
6970
feed_name="feed_name",

api/tests/unittest/test_feeds.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"producer_url": "test_producer_url",
7373
},
7474
external_ids=[{"external_id": "test_associated_id", "source": "test_source"}],
75+
related_links=[],
7576
redirects=[{"comment": "Some comment", "target_id": "test_target_id"}],
7677
).model_dump_json()
7778
)

docs/DatabaseCatalogAPI.yaml

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,36 @@ components:
454454
note:
455455
description: A note to clarify complex use cases for consumers.
456456
type: string
457-
457+
related_links:
458+
description: >
459+
A list of related links for the feed.
460+
type: array
461+
items:
462+
$ref: '#/components/schemas/FeedRelatedLink'
463+
FeedRelatedLink:
464+
type: object
465+
properties:
466+
code:
467+
description: >
468+
A short code to identify the type of link.
469+
type: string
470+
example: next_1
471+
description:
472+
description: >
473+
A description of the link.
474+
type: string
475+
example: The URL for a future feed version with an upcoming service period.
476+
url:
477+
description: >
478+
The URL of the related link.
479+
type: string
480+
format: url
481+
created_at:
482+
description: >
483+
The date and time the related link was created, in ISO 8601 date-time format.
484+
type: string
485+
example: 2023-07-10T22:06:00Z
486+
format: date-time
458487
GtfsFeed:
459488
allOf:
460489
- $ref: "#/components/schemas/Feed"

0 commit comments

Comments
 (0)