| @@ -0,0 +1,68 @@ | |||||
| # pylint: disable = missing-class-docstring | |||||
| # pylint: disable = missing-function-docstring | |||||
| """ | |||||
| 全動画の情報を取得し,JSON 形式で出力する. | |||||
| """ | |||||
| from __future__ import annotations | |||||
| import json | |||||
| import os | |||||
| from datetime import date, datetime | |||||
| from typing import TypedDict | |||||
| from eloquent import DatabaseManager, Model | |||||
| from db.models import Video | |||||
| def main ( | |||||
| ) -> None: | |||||
| config: dict[str, DbConfig] = { 'mysql': { 'driver': 'mysql', | |||||
| 'host': 'localhost', | |||||
| 'database': 'nizika_nico', | |||||
| 'user': os.environ['MYSQL_USER'], | |||||
| 'password': os.environ['MYSQL_PASS'], | |||||
| 'prefix': '' } } | |||||
| db = DatabaseManager (config) | |||||
| Model.set_connection_resolver (db) | |||||
| videos: list[VideoDict] = [] | |||||
| for row in Video.all (): | |||||
| video: VideoDict = { 'id': row.id, | |||||
| 'code': row.code, | |||||
| 'title': row.title, | |||||
| 'description': row.description, | |||||
| 'tags': [], | |||||
| 'uploaded_at': row.uploaded_at, | |||||
| 'deleted_at': row.deleted_at.date () } | |||||
| for video_tag in row.video_tags: | |||||
| if video_tag.untagged_at is None: | |||||
| video['tags'].append (video_tag.tag.name) | |||||
| videos.append(video) | |||||
| print (json.dumps (videos)) | |||||
| class DbConfig (TypedDict): | |||||
| driver: str | |||||
| host: str | |||||
| database: str | |||||
| user: str | |||||
| password: str | |||||
| prefix: str | |||||
| class VideoDict (TypedDict): | |||||
| id: int | |||||
| code: str | |||||
| title: str | |||||
| description: str | |||||
| tags: list[str] | |||||
| uploaded_at: datetime | |||||
| deleted_at: date | None | |||||
| if __name__ == '__main__': | |||||
| main () | |||||