fix video stats indexing and serializing

This commit is contained in:
Simon 2026-01-03 11:13:32 +07:00
parent e5ee808473
commit 9d4ecdf9b7
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
3 changed files with 34 additions and 10 deletions

View File

@ -55,6 +55,7 @@ class Command(BaseCommand):
self._mig_set_channel_tabs()
self._mig_set_video_channel_tabs()
self._mig_fix_playlist_description()
self._mig_fix_missing_stats()
def _make_folders(self):
"""make expected cache folders"""
@ -329,6 +330,29 @@ class Command(BaseCommand):
},
)
def _mig_fix_missing_stats(self) -> None:
"""migrate from 0.5.8 to 0.5.9, fix missing stats values"""
fields = [
"like_count",
"average_rating",
"view_count",
"dislike_count",
]
for field in fields:
self._run_migration(
index_name="ta_video",
desc=f"fix missing stats field {field}",
query={
"bool": {
"must_not": [{"exists": {"field": f"stats.{field}"}}]
}
},
script={
"source": f"ctx._source.stats.{field} = 0",
"lang": "painless",
},
)
def _run_migration(
self, index_name: str, desc: str, query: dict, script: dict
):

View File

@ -44,10 +44,10 @@ class SponsorBlockSerializer(serializers.Serializer):
class StatsSerializer(serializers.Serializer):
"""serialize stats"""
like_count = serializers.IntegerField(required=False)
average_rating = serializers.FloatField(required=False)
view_count = serializers.IntegerField(required=False)
dislike_count = serializers.IntegerField(required=False)
like_count = serializers.IntegerField()
average_rating = serializers.FloatField()
view_count = serializers.IntegerField()
dislike_count = serializers.IntegerField()
class StreamItemSerializer(serializers.Serializer):

View File

@ -255,10 +255,10 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle):
def _add_stats(self):
"""add stats dicst to json_data"""
stats = {
"view_count": self.youtube_meta.get("view_count", 0),
"like_count": self.youtube_meta.get("like_count", 0),
"dislike_count": self.youtube_meta.get("dislike_count", 0),
"average_rating": self.youtube_meta.get("average_rating", 0),
"view_count": self.youtube_meta.get("view_count") or 0,
"like_count": self.youtube_meta.get("like_count") or 0,
"dislike_count": self.youtube_meta.get("dislike_count") or 0,
"average_rating": self.youtube_meta.get("average_rating") or 0,
}
self.json_data.update({"stats": stats})
@ -379,8 +379,8 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle):
return
dislikes = {
"dislike_count": result.get("dislikes", 0),
"average_rating": result.get("rating", 0),
"dislike_count": result.get("dislikes") or 0,
"average_rating": result.get("rating") or 0,
}
self.json_data["stats"].update(dislikes)