From dd6b9b8de2f5b035a69c27cdd545ecde5b48c08e Mon Sep 17 00:00:00 2001 From: Arthur Borem Date: Mon, 15 Sep 2025 16:58:33 -0500 Subject: [PATCH 1/2] AssociatedMedia has a field for type and a field for the URL rather than having one URL field per type --- src/pardner/services/groupme.py | 4 +++- src/pardner/services/strava.py | 2 +- .../verticals/sub_verticals/associated_media.py | 7 ++++--- tests/test_transfer_services/test_groupme.py | 5 ++--- tests/test_transfer_services/test_strava.py | 12 ++---------- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/pardner/services/groupme.py b/src/pardner/services/groupme.py index 222d542..3b06c0c 100644 --- a/src/pardner/services/groupme.py +++ b/src/pardner/services/groupme.py @@ -302,7 +302,9 @@ def parse_conversation_group_vertical( associated_media = [] image_url = raw_data_dict.get('image_url', None) if image_url: - associated_media = [AssociatedMediaSubVertical(image_url=image_url)] + associated_media = [ + AssociatedMediaSubVertical(media_type='image', url=image_url) + ] is_private = None conversation_type = raw_data_dict.get('type') diff --git a/src/pardner/services/strava.py b/src/pardner/services/strava.py index 892a19c..9b1c4bd 100644 --- a/src/pardner/services/strava.py +++ b/src/pardner/services/strava.py @@ -112,7 +112,7 @@ def parse_social_posting_vertical( raw_data_dict['photos'].get('primary', {}).get('urls', {}).values() ) associated_media_list = [ - AssociatedMediaSubVertical(image_url=photo_url) + AssociatedMediaSubVertical(media_type='image', url=photo_url) for photo_url in photo_urls ] diff --git a/src/pardner/verticals/sub_verticals/associated_media.py b/src/pardner/verticals/sub_verticals/associated_media.py index fe4c3e2..84173fc 100644 --- a/src/pardner/verticals/sub_verticals/associated_media.py +++ b/src/pardner/verticals/sub_verticals/associated_media.py @@ -1,3 +1,5 @@ +from typing import Literal + from pydantic import AnyHttpUrl from pardner.verticals.sub_verticals.base import BaseSubVertical @@ -6,6 +8,5 @@ class AssociatedMediaSubVertical(BaseSubVertical): """Holds the URL for the media attached to a parent vertical.""" - audio_url: AnyHttpUrl | None = None - image_url: AnyHttpUrl | None = None - video_url: AnyHttpUrl | None = None + media_type: Literal['audio', 'image', 'video'] | None = None + url: AnyHttpUrl | None = None diff --git a/tests/test_transfer_services/test_groupme.py b/tests/test_transfer_services/test_groupme.py index d43706e..f6c884a 100644 --- a/tests/test_transfer_services/test_groupme.py +++ b/tests/test_transfer_services/test_groupme.py @@ -437,9 +437,8 @@ def test_fetch_conversation_group_vertical(groupme_transfer_service, mocker): 'created_at': datetime(2011, 4, 12, 15, 48, 48, tzinfo=timezone.utc), 'associated_media': [ { - 'audio_url': None, - 'image_url': AnyHttpUrl('https://i.groupme.com/123456789'), - 'video_url': None, + 'media_type': 'image', + 'url': AnyHttpUrl('https://i.groupme.com/123456789'), } ], 'is_private': True, diff --git a/tests/test_transfer_services/test_strava.py b/tests/test_transfer_services/test_strava.py index 4c26766..6e3fe72 100644 --- a/tests/test_transfer_services/test_strava.py +++ b/tests/test_transfer_services/test_strava.py @@ -204,16 +204,8 @@ def test_fetch_physical_activity_vertical(mocker, strava_transfer_service): 'created_at': datetime.datetime(2018, 5, 2, 12, 15, 9), 'url': AnyHttpUrl('https://www.strava.com/activities/154504250376823'), 'associated_media': [ - { - 'audio_url': None, - 'image_url': AnyHttpUrl('https://url1.com/'), - 'video_url': None, - }, - { - 'audio_url': None, - 'image_url': AnyHttpUrl('https://url2.com/'), - 'video_url': None, - }, + {'media_type': 'image', 'url': AnyHttpUrl('https://url1.com/')}, + {'media_type': 'image', 'url': AnyHttpUrl('https://url2.com/')}, ], 'status': 'restricted', 'text': 'mock description', From 1a20c95f02f4c992512f7182ccd7693bdab56799 Mon Sep 17 00:00:00 2001 From: Arthur Borem Date: Mon, 15 Sep 2025 17:00:35 -0500 Subject: [PATCH 2/2] Adds description for media type --- src/pardner/verticals/sub_verticals/associated_media.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pardner/verticals/sub_verticals/associated_media.py b/src/pardner/verticals/sub_verticals/associated_media.py index 84173fc..442ebae 100644 --- a/src/pardner/verticals/sub_verticals/associated_media.py +++ b/src/pardner/verticals/sub_verticals/associated_media.py @@ -1,6 +1,6 @@ from typing import Literal -from pydantic import AnyHttpUrl +from pydantic import AnyHttpUrl, Field from pardner.verticals.sub_verticals.base import BaseSubVertical @@ -8,5 +8,9 @@ class AssociatedMediaSubVertical(BaseSubVertical): """Holds the URL for the media attached to a parent vertical.""" - media_type: Literal['audio', 'image', 'video'] | None = None + media_type: Literal['audio', 'image', 'video'] | None = Field( + description='If media type is unknown or not one of the types defined in this ' + 'field, value is None.', + default=None, + ) url: AnyHttpUrl | None = None