199 lines
6.8 KiB
Python
199 lines
6.8 KiB
Python
"""
|
|
These are channel related models.
|
|
"""
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Optional
|
|
|
|
from .base import BaseModel
|
|
from .common import BaseResource, BaseTopicDetails, Thumbnails, BaseApiResponse
|
|
from .mixins import DatetimeTimeMixin
|
|
|
|
|
|
@dataclass
|
|
class ChannelBrandingChannel(BaseModel):
|
|
"""
|
|
A class representing the channel branding setting's channel info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#brandingSettings.channel
|
|
"""
|
|
|
|
title: Optional[str] = field(default=None)
|
|
description: Optional[str] = field(default=None)
|
|
keywords: Optional[str] = field(default=None, repr=False)
|
|
trackingAnalyticsAccountId: Optional[str] = field(default=None, repr=False)
|
|
moderateComments: Optional[bool] = field(default=None, repr=False)
|
|
unsubscribedTrailer: Optional[str] = field(default=None, repr=False)
|
|
defaultLanguage: Optional[str] = field(default=None, repr=False)
|
|
country: Optional[str] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class ChannelBrandingImage(BaseModel):
|
|
"""
|
|
A class representing the channel branding setting's image info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#brandingSettings.image
|
|
"""
|
|
|
|
bannerImageUrl: Optional[str] = field(default=None)
|
|
bannerMobileImageUrl: Optional[str] = field(default=None, repr=False)
|
|
watchIconImageUrl: Optional[str] = field(default=None, repr=False)
|
|
trackingImageUrl: Optional[str] = field(default=None, repr=False)
|
|
bannerTabletLowImageUrl: Optional[str] = field(default=None, repr=False)
|
|
bannerTabletImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTabletHdImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTabletExtraHdImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerMobileLowImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerMobileMediumHdImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerMobileHdImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerMobileExtraHdImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTvImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTvLowImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTvMediumImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerTvHighImageUrl: Optional[str] = field(default=None, repr=None)
|
|
bannerExternalUrl: Optional[str] = field(default=None, repr=None)
|
|
|
|
|
|
@dataclass
|
|
class ChannelBrandingHint(BaseModel):
|
|
"""
|
|
A class representing the channel branding setting's hint info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#brandingSettings.hints
|
|
"""
|
|
|
|
property: Optional[str] = field(default=None)
|
|
value: Optional[str] = field(default=None)
|
|
|
|
|
|
@dataclass
|
|
class ChannelBrandingSetting(BaseModel):
|
|
"""
|
|
A class representing the channel branding settings info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#brandingSettings
|
|
"""
|
|
|
|
channel: Optional[ChannelBrandingChannel] = field(default=None)
|
|
|
|
|
|
@dataclass
|
|
class RelatedPlaylists(BaseModel):
|
|
"""
|
|
A class representing the channel's related playlist info
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#contentDetails.relatedPlaylists
|
|
"""
|
|
|
|
likes: Optional[str] = field(default=None, repr=False)
|
|
uploads: Optional[str] = field(default=None)
|
|
|
|
|
|
@dataclass
|
|
class ChannelContentDetails(BaseModel):
|
|
"""
|
|
A class representing the channel's content info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#contentDetails
|
|
"""
|
|
|
|
relatedPlaylists: Optional[RelatedPlaylists] = field(default=None)
|
|
|
|
|
|
@dataclass
|
|
class ChannelTopicDetails(BaseTopicDetails):
|
|
"""
|
|
A class representing the channel's topic detail info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#topicDetails
|
|
"""
|
|
|
|
# Important:
|
|
# topicIds maybe has deprecated.
|
|
# see more: https://developers.google.com/youtube/v3/revision_history#november-10-2016
|
|
topicIds: Optional[List[str]] = field(default=None, repr=False)
|
|
topicCategories: Optional[List[str]] = field(default=None)
|
|
|
|
|
|
@dataclass
|
|
class Localized(BaseModel):
|
|
"""
|
|
A class representing the channel snippet localized info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#snippet.localized
|
|
"""
|
|
|
|
title: Optional[str] = field(default=None)
|
|
description: Optional[str] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class ChannelSnippet(BaseModel, DatetimeTimeMixin):
|
|
"""
|
|
A class representing the channel snippet info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#snippet
|
|
"""
|
|
|
|
title: Optional[str] = field(default=None)
|
|
description: Optional[str] = field(default=None)
|
|
customUrl: Optional[str] = field(default=None, repr=False)
|
|
publishedAt: Optional[str] = field(default=None, repr=False)
|
|
thumbnails: Optional[Thumbnails] = field(default=None, repr=False)
|
|
defaultLanguage: Optional[str] = field(default=None, repr=False)
|
|
localized: Optional[Localized] = field(default=None, repr=False)
|
|
country: Optional[str] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class ChannelStatistics(BaseModel):
|
|
"""
|
|
A class representing the Channel's statistics info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#statistics
|
|
"""
|
|
|
|
viewCount: Optional[int] = field(default=None)
|
|
subscriberCount: Optional[int] = field(default=None)
|
|
hiddenSubscriberCount: Optional[bool] = field(default=None, repr=False)
|
|
videoCount: Optional[int] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class ChannelStatus(BaseModel):
|
|
"""
|
|
A class representing the channel's status info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels#status
|
|
"""
|
|
|
|
privacyStatus: Optional[str] = field(default=None)
|
|
isLinked: Optional[bool] = field(default=None, repr=False)
|
|
longUploadsStatus: Optional[str] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class Channel(BaseResource):
|
|
"""
|
|
A class representing the channel's info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels
|
|
"""
|
|
|
|
snippet: Optional[ChannelSnippet] = field(default=None, repr=False)
|
|
contentDetails: Optional[ChannelContentDetails] = field(default=None, repr=False)
|
|
statistics: Optional[ChannelStatistics] = field(default=None, repr=False)
|
|
topicDetails: Optional[ChannelTopicDetails] = field(default=None, repr=False)
|
|
status: Optional[ChannelStatus] = field(default=None, repr=False)
|
|
brandingSettings: Optional[ChannelBrandingSetting] = field(default=None, repr=False)
|
|
|
|
|
|
@dataclass
|
|
class ChannelListResponse(BaseApiResponse):
|
|
"""
|
|
A class representing the channel's retrieve response info.
|
|
|
|
Refer: https://developers.google.com/youtube/v3/docs/channels/list#response_1
|
|
"""
|
|
|
|
items: Optional[List[Channel]] = field(default=None, repr=False)
|