diff --git a/pyyoutube/models/video.py b/pyyoutube/models/video.py index 89648e2f..75bd9235 100644 --- a/pyyoutube/models/video.py +++ b/pyyoutube/models/video.py @@ -248,6 +248,11 @@ class VideoLiveStreamingDetails(BaseModel, DatetimeTimeMixin): activeLiveChatId: Optional[str] = field(default=None, repr=False) +@dataclass +class PaidProductPlacementDetail(BaseModel): + hasPaidProductPlacement: Optional[dataclass] = field(default=None, repr=False) + + @dataclass class Video(BaseResource): """ @@ -266,6 +271,9 @@ class Video(BaseResource): liveStreamingDetails: Optional[VideoLiveStreamingDetails] = field( default=None, repr=False ) + paidProductPlacementDetail: Optional[PaidProductPlacementDetail] = field( + default=None, repr=False + ) @dataclass diff --git a/pyyoutube/resources/videos.py b/pyyoutube/resources/videos.py index 699f9a37..8bf63bfe 100644 --- a/pyyoutube/resources/videos.py +++ b/pyyoutube/resources/videos.py @@ -45,7 +45,7 @@ def list( parts: Comma-separated list of one or more channel resource properties. Accepted values: id,contentDetails,fileDetails,liveStreamingDetails, - localizations,player,processingDetails,recordingDetails,snippet,statistics, + localizations,paidProductPlacementDetails,player,processingDetails,recordingDetails,snippet,statistics, status,suggestions,topicDetails chart: Identifies the chart that you want to retrieve. diff --git a/pyyoutube/utils/constants.py b/pyyoutube/utils/constants.py index 1961ad82..55b12953 100644 --- a/pyyoutube/utils/constants.py +++ b/pyyoutube/utils/constants.py @@ -65,6 +65,7 @@ "topicDetails", "recordingDetails", "liveStreamingDetails", + "paidProductPlacementDetails", } GUIDE_CATEGORY_RESOURCE_PROPERTIES = {"id", "snippet"} diff --git a/testdata/modeldata/videos/video_paid_product_placement_details.json b/testdata/modeldata/videos/video_paid_product_placement_details.json new file mode 100644 index 00000000..41ad888d --- /dev/null +++ b/testdata/modeldata/videos/video_paid_product_placement_details.json @@ -0,0 +1,3 @@ +{ + "hasPaidProductPlacement": true +} diff --git a/tests/models/test_videos.py b/tests/models/test_videos.py index f9e38f4d..d32f0097 100644 --- a/tests/models/test_videos.py +++ b/tests/models/test_videos.py @@ -23,6 +23,8 @@ class VideoModelTest(unittest.TestCase): VIDEO_API_RESPONSE = json.loads(f.read().decode("utf-8")) with open(BASE_PATH + "video_recording_details.json", "rb") as f: RECORDING_DETAILS = json.loads(f.read().decode("utf-8")) + with open(BASE_PATH + "video_paid_product_placement_details.json", "rb") as f: + PAID_PRODUCT_PLACEMENT_DETAILS = json.loads(f.read().decode("utf-8")) def testVideoContentDetails(self) -> None: m = models.VideoContentDetails.from_dict(self.CONTENT_DETAILS_INFO) @@ -107,3 +109,10 @@ def testVideoRecordingDetails(self) -> None: m.string_to_datetime(m.recordingDate).isoformat(), "2024-07-03T00:00:00+00:00", ) + + def testPaidProductPlacementDetail(self) -> None: + m = models.PaidProductPlacementDetail.from_dict( + self.PAID_PRODUCT_PLACEMENT_DETAILS + ) + + self.assertTrue(m.hasPaidProductPlacement)