@@ -20,7 +20,9 @@ class TypesBaseModel(BaseModel):
2020def validate_external_url (cls , v ):
2121 if v is None or (v .startswith ("http" ) and "://" in v ) or isinstance (v , str ):
2222 return v
23- raise ValidationError ("external_url must be a URL or string" ) # Corrected 'been' to 'be'
23+ raise ValidationError (
24+ "external_url must be a URL or string"
25+ ) # Corrected 'been' to 'be'
2426
2527
2628class Resource (TypesBaseModel ):
@@ -168,6 +170,7 @@ class Location(TypesBaseModel):
168170
169171class SharedMediaImageCandidate (TypesBaseModel ):
170172 """Image candidate for shared media clips with video features"""
173+
171174 estimated_scans_sizes : List [int ] = []
172175 height : int
173176 scans_profile : str
@@ -177,6 +180,7 @@ class SharedMediaImageCandidate(TypesBaseModel):
177180
178181class ScrubberSpritesheetInfo (TypesBaseModel ):
179182 """Spritesheet information for video scrubbing"""
183+
180184 file_size_kb : int
181185 max_thumbnails_per_sprite : int
182186 rendered_width : int
@@ -193,58 +197,70 @@ class ScrubberSpritesheetInfo(TypesBaseModel):
193197
194198class ScrubberSpritesheetInfoCandidates (TypesBaseModel ):
195199 """Container for spritesheet information candidates"""
200+
196201 default : ScrubberSpritesheetInfo
197202
198203
199204class AdditionalCandidates (TypesBaseModel ):
200205 """Additional candidates structure in image_versions2"""
206+
201207 first_frame : Optional [SharedMediaImageCandidate ] = None
202208 igtv_first_frame : Optional [SharedMediaImageCandidate ] = None
203209 smart_frame : Optional [SharedMediaImageCandidate ] = None
204210
205211
206212class SharedMediaImageVersions (TypesBaseModel ):
207213 """Complete image_versions2 structure for shared media clips"""
214+
208215 additional_candidates : Optional [AdditionalCandidates ] = None
209216 candidates : List [SharedMediaImageCandidate ] = []
210- scrubber_spritesheet_info_candidates : Optional [ScrubberSpritesheetInfoCandidates ] = None
217+ scrubber_spritesheet_info_candidates : Optional [
218+ ScrubberSpritesheetInfoCandidates
219+ ] = None
211220
212221
213222class ClipsAchievementsInfo (TypesBaseModel ):
214223 """Information about achievements in clips"""
224+
215225 num_earned_achievements : Optional [int ] = None
216226 show_achievements : bool = False
217227
218228
219229class AudioReattributionInfo (TypesBaseModel ):
220230 """Audio reattribution settings"""
231+
221232 should_allow_restore : bool = False
222233
223234
224235class ClipsAdditionalAudioInfo (TypesBaseModel ):
225236 """Additional audio information for clips"""
237+
226238 additional_audio_username : Optional [str ] = None
227239 audio_reattribution_info : AudioReattributionInfo
228240
229241
230242class ClipsAudioRankingInfo (TypesBaseModel ):
231243 """Audio ranking information for clips"""
244+
232245 best_audio_cluster_id : str
233246
234247
235248class ClipsBrandedContentTagInfo (TypesBaseModel ):
236249 """Branded content tag information for clips"""
250+
237251 can_add_tag : bool = False
238252
239253
240254class ClipsContentAppreciationInfo (TypesBaseModel ):
241255 """Content appreciation information for clips"""
256+
242257 enabled : bool = False
243258 entry_point_container : Optional [str ] = None
244259
245260
246261class ClipsMashupInfo (TypesBaseModel ):
247262 """Mashup information for clips"""
263+
248264 can_toggle_mashups_allowed : bool = False
249265 formatted_mashups_count : Optional [str ] = None
250266 has_been_mashed_up : bool = False
@@ -263,6 +279,7 @@ class ClipsMashupInfo(TypesBaseModel):
263279
264280class ClipsConsumptionInfo (TypesBaseModel ):
265281 """Consumption information for clips original sound"""
282+
266283 display_media_id : Optional [str ] = None
267284 is_bookmarked : bool = False
268285 is_trending_in_clips : bool = False
@@ -273,11 +290,13 @@ class ClipsConsumptionInfo(TypesBaseModel):
273290
274291class ClipsFbDownstreamUseXpostMetadata (TypesBaseModel ):
275292 """Facebook downstream use xpost metadata for clips"""
293+
276294 downstream_use_xpost_deny_reason : str = "NONE"
277295
278296
279297class ClipsIgArtist (TypesBaseModel ):
280298 """Instagram artist information for clips original sound"""
299+
281300 pk : int
282301 pk_id : str
283302 id : str
@@ -292,6 +311,7 @@ class ClipsIgArtist(TypesBaseModel):
292311
293312class ClipsOriginalSoundInfo (TypesBaseModel ):
294313 """Original sound information for clips"""
314+
295315 allow_creator_to_rename : bool = True
296316 audio_asset_id : int
297317 attributed_custom_audio_asset_id : Optional [int ] = None
@@ -331,6 +351,7 @@ class ClipsOriginalSoundInfo(TypesBaseModel):
331351
332352class ClipsMetadata (TypesBaseModel ):
333353 """Complete clips metadata structure for Media objects"""
354+
334355 clips_creation_entry_point : str = "clips"
335356 featured_label : Optional [str ] = None
336357 is_public_chat_welcome_video : bool = False
@@ -357,7 +378,7 @@ class ClipsMetadata(TypesBaseModel):
357378 music_canonical_id : str
358379 music_info : Optional [dict ] = None
359380 nux_info : Optional [dict ] = None
360- original_sound_info : ClipsOriginalSoundInfo
381+ original_sound_info : Optional [ ClipsOriginalSoundInfo ] = None
361382 originality_info : Optional [dict ] = None
362383 reels_on_the_rise_info : Optional [dict ] = None
363384 reusable_text_attribute_string : Optional [str ] = None
@@ -609,6 +630,7 @@ class DirectMedia(TypesBaseModel):
609630
610631class MessageReaction (TypesBaseModel ):
611632 """Individual emoji reaction on a direct message"""
633+
612634 timestamp : datetime
613635 client_context : Optional [str ] = None
614636 sender_id : int
@@ -618,13 +640,15 @@ class MessageReaction(TypesBaseModel):
618640
619641class MessageReactions (TypesBaseModel ):
620642 """Reactions structure for direct messages"""
643+
621644 likes : List [dict ] = [] # Structure unknown from current examples
622645 likes_count : Optional [int ] = 0
623646 emojis : List [MessageReaction ] = []
624647
625648
626649class LinkContext (TypesBaseModel ):
627650 """Link context metadata for direct message links"""
651+
628652 link_url : str
629653 link_title : Optional [str ] = ""
630654 link_summary : Optional [str ] = ""
@@ -633,6 +657,7 @@ class LinkContext(TypesBaseModel):
633657
634658class MessageLink (TypesBaseModel ):
635659 """Link structure for direct messages"""
660+
636661 text : str
637662 link_context : LinkContext
638663 client_context : Optional [str ] = None
@@ -641,13 +666,15 @@ class MessageLink(TypesBaseModel):
641666
642667class DisappearingMessagesSeenState (TypesBaseModel ):
643668 """Disappearing messages seen state information"""
669+
644670 item_id : str
645671 timestamp : datetime
646672 created_at : datetime
647673
648674
649675class LastSeenInfo (TypesBaseModel ):
650676 """Last seen information for a user in a direct thread"""
677+
651678 item_id : str
652679 timestamp : datetime
653680 created_at : datetime
@@ -657,11 +684,13 @@ class LastSeenInfo(TypesBaseModel):
657684
658685class FallbackUrl (TypesBaseModel ):
659686 """Fallback URL structure for media candidates"""
687+
660688 url : str
661689
662690
663691class DirectMessageImageCandidate (TypesBaseModel ):
664692 """Image candidate for ephemeral visual media in direct messages"""
693+
665694 width : int
666695 height : int
667696 url : str
@@ -672,11 +701,13 @@ class DirectMessageImageCandidate(TypesBaseModel):
672701
673702class DirectMessageImageVersions (TypesBaseModel ):
674703 """Image versions for ephemeral visual media in direct messages"""
704+
675705 candidates : List [DirectMessageImageCandidate ] = []
676706
677707
678708class VideoVersion (TypesBaseModel ):
679709 """Individual video version with specific resolution and quality"""
710+
680711 id : Optional [str ] = ""
681712 type : Optional [int ] = None
682713 width : int
@@ -689,6 +720,7 @@ class VideoVersion(TypesBaseModel):
689720
690721class FriendshipStatus (TypesBaseModel ):
691722 """Friendship status information for visual media user"""
723+
692724 blocking : bool = False
693725 is_messaging_only_blocking : bool = False
694726 is_messaging_pseudo_blocking : bool = False
@@ -697,6 +729,7 @@ class FriendshipStatus(TypesBaseModel):
697729
698730class VisualMediaUser (TypesBaseModel ):
699731 """User information in visual media (enhanced UserShort)"""
732+
700733 id : str
701734 strong_id__ : Optional [str ] = None
702735 pk : int
@@ -724,13 +757,15 @@ class VisualMediaUser(TypesBaseModel):
724757
725758class ExpiringMediaActionSummary (TypesBaseModel ):
726759 """Summary of expiring media actions"""
760+
727761 type : str
728762 timestamp : datetime
729763 count : int
730764
731765
732766class VisualMediaContent (TypesBaseModel ):
733767 """Content structure for visual media (can be rich or minimal)"""
768+
734769 media_type : int # Always present: 1=image, 2=video
735770 id : Optional [str ] = None
736771 media_id : Optional [int ] = None
@@ -750,6 +785,7 @@ class VisualMediaContent(TypesBaseModel):
750785
751786class VisualMedia (TypesBaseModel ):
752787 """Complete visual media structure for direct messages"""
788+
753789 media : VisualMediaContent
754790 seen_user_ids : List [str ] = []
755791 seen_count : int = 0
0 commit comments