バグ修正
このコミットが含まれているのは:
+48
-42
@@ -16,8 +16,9 @@ from typing import Any, TypedDict, cast
|
||||
import mysql.connector
|
||||
import requests
|
||||
|
||||
DbNull = (None,)
|
||||
DbNullType = tuple[None]
|
||||
# TODO: “何もしなぃ” を意味する None と区別可能にするため,NULL クラスを別途用意すること
|
||||
DbNull = None
|
||||
DbNullType = None
|
||||
|
||||
|
||||
class VideoSearchParam (TypedDict):
|
||||
@@ -74,7 +75,8 @@ def main (
|
||||
update_tables (video_dao, tag_dao, video_tag_dao, video_history_dao, comment_dao, user_dao,
|
||||
api_data, now)
|
||||
|
||||
# TODO: 書くこと
|
||||
conn.commit ()
|
||||
conn.close ()
|
||||
|
||||
|
||||
def update_tables (
|
||||
@@ -254,7 +256,7 @@ class VideoDao:
|
||||
video_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> VideoDto | None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -268,7 +270,7 @@ class VideoDao:
|
||||
WHERE
|
||||
id = %s
|
||||
ORDER BY
|
||||
id""", video_id)
|
||||
id""", (video_id,))
|
||||
row = c.fetchone ()
|
||||
if row is None:
|
||||
return None
|
||||
@@ -278,7 +280,7 @@ class VideoDao:
|
||||
self,
|
||||
with_relation_tables: bool,
|
||||
) -> list[VideoDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -299,7 +301,7 @@ class VideoDao:
|
||||
def fetch_alive (
|
||||
self,
|
||||
) -> list[VideoDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -322,7 +324,7 @@ class VideoDao:
|
||||
video: VideoDto,
|
||||
with_relation_tables: bool,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
videos(
|
||||
@@ -370,14 +372,16 @@ class VideoDao:
|
||||
video_ids: list[int],
|
||||
at: datetime,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
if not video_ids:
|
||||
return
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
UPDATE
|
||||
videos
|
||||
SET
|
||||
deleted_at = %s
|
||||
deleted_at = %%s
|
||||
WHERE
|
||||
id IN (%s)""", (at, (*video_ids,)))
|
||||
id IN (%s)""" % ', '.join (['%s'] * len (video_ids)), (at, *video_ids))
|
||||
|
||||
def _create_dto_from_row (
|
||||
self,
|
||||
@@ -428,7 +432,7 @@ class VideoTagDao:
|
||||
video_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> list[VideoTagDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -441,7 +445,7 @@ class VideoTagDao:
|
||||
WHERE
|
||||
video_id = %s
|
||||
ORDER BY
|
||||
id""", video_id)
|
||||
id""", (video_id,))
|
||||
video_tags: list[VideoTagDto] = []
|
||||
for row in c.fetchall ():
|
||||
video_tags.append (self._create_dto_from_row (row, with_relation_tables))
|
||||
@@ -452,7 +456,7 @@ class VideoTagDao:
|
||||
video_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> list[VideoTagDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -466,7 +470,7 @@ class VideoTagDao:
|
||||
video_id = %s
|
||||
AND (untagged_at IS NULL)
|
||||
ORDER BY
|
||||
id""", video_id)
|
||||
id""", (video_id,))
|
||||
video_tags: list[VideoTagDto] = []
|
||||
for row in c.fetchall ():
|
||||
video_tags.append (self._create_dto_from_row (row, with_relation_tables))
|
||||
@@ -478,7 +482,7 @@ class VideoTagDao:
|
||||
tag_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> VideoTagDto | None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -501,7 +505,7 @@ class VideoTagDao:
|
||||
video_tag: VideoTagDto,
|
||||
with_relation_tables: bool,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
video_tags(
|
||||
@@ -528,7 +532,7 @@ class VideoTagDao:
|
||||
video_tag: VideoTagDto,
|
||||
with_relation_tables: bool,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
video_tags(
|
||||
@@ -571,15 +575,17 @@ class VideoTagDao:
|
||||
tag_ids: list[int],
|
||||
now: datetime
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
if not tag_ids:
|
||||
return
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
UPDATE
|
||||
video_tags
|
||||
SET
|
||||
untagged_at = %s
|
||||
untagged_at = %%s
|
||||
WHERE
|
||||
video_id = %s
|
||||
AND tag_ids IN (%s)""", (now, video_id, (*tag_ids,)))
|
||||
video_id = %%s
|
||||
AND tag_ids IN (%s)""" % ', '.join (['%s'] * len (tag_ids)), (now, video_id, *tag_ids))
|
||||
|
||||
def _create_dto_from_row (
|
||||
self,
|
||||
@@ -619,15 +625,15 @@ class TagDao:
|
||||
self,
|
||||
tag_id: int,
|
||||
) -> TagDto | None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
name)
|
||||
name
|
||||
FROM
|
||||
tags
|
||||
WHERE
|
||||
id = %s""", tag_id)
|
||||
id = %s""", (tag_id,))
|
||||
row = c.fetchone ()
|
||||
if row is None:
|
||||
return None
|
||||
@@ -637,7 +643,7 @@ class TagDao:
|
||||
self,
|
||||
tag_name: str,
|
||||
) -> TagDto | None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -645,7 +651,7 @@ class TagDao:
|
||||
FROM
|
||||
tags
|
||||
WHERE
|
||||
name = %s""", tag_name)
|
||||
name = %s""", (tag_name,))
|
||||
row = c.fetchone ()
|
||||
if row is None:
|
||||
return None
|
||||
@@ -655,26 +661,26 @@ class TagDao:
|
||||
self,
|
||||
tag: TagDto,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
tags(name)
|
||||
VALUES
|
||||
(%s)""", tag.name)
|
||||
(%s)""", (tag.name,))
|
||||
tag.id_ = c.lastrowid
|
||||
|
||||
def upsert (
|
||||
self,
|
||||
tag: TagDto,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
tags(name)
|
||||
VALUES
|
||||
(%s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
name = VALUES(name)""", tag.name)
|
||||
name = VALUES(name)""", (tag.name,))
|
||||
tag.id_ = c.lastrowid
|
||||
|
||||
def _create_dto_from_row (
|
||||
@@ -703,7 +709,7 @@ class VideoHistoryDao:
|
||||
video_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> list[VideoHistoryDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -713,7 +719,7 @@ class VideoHistoryDao:
|
||||
FROM
|
||||
video_histories
|
||||
WHERE
|
||||
video_id = %s""", video_id)
|
||||
video_id = %s""", (video_id,))
|
||||
video_histories: list[VideoHistoryDto] = []
|
||||
for row in c.fetchall ():
|
||||
video_histories.append (self._create_dto_from_row (row, with_relation_tables))
|
||||
@@ -723,7 +729,7 @@ class VideoHistoryDao:
|
||||
self,
|
||||
video_history: VideoHistoryDto,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
video_histories(
|
||||
@@ -742,7 +748,7 @@ class VideoHistoryDao:
|
||||
self,
|
||||
video_history: VideoHistoryDto,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
video_histories(
|
||||
@@ -803,7 +809,7 @@ class CommentDao:
|
||||
video_id: int,
|
||||
with_relation_tables: bool,
|
||||
) -> list[CommentDto]:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -817,7 +823,7 @@ class CommentDao:
|
||||
FROM
|
||||
comments
|
||||
WHERE
|
||||
video_id = %s""", video_id)
|
||||
video_id = %s""", (video_id,))
|
||||
comments: list[CommentDto] = []
|
||||
for row in c.fetchall ():
|
||||
comments.append (self._create_dto_from_row (row, with_relation_tables))
|
||||
@@ -828,7 +834,7 @@ class CommentDao:
|
||||
comment: CommentDto,
|
||||
with_relation_tables: bool,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
comments(
|
||||
@@ -914,7 +920,7 @@ class UserDao:
|
||||
self,
|
||||
user_code: str
|
||||
) -> UserDto | None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
SELECT
|
||||
id,
|
||||
@@ -922,7 +928,7 @@ class UserDao:
|
||||
FROM
|
||||
users
|
||||
WHERE
|
||||
code = %s""", user_code)
|
||||
code = %s""", (user_code,))
|
||||
row = c.fetchone ()
|
||||
if row is None:
|
||||
return None
|
||||
@@ -932,12 +938,12 @@ class UserDao:
|
||||
self,
|
||||
user: UserDto,
|
||||
) -> None:
|
||||
with self.conn.cursor () as c:
|
||||
with self.conn.cursor (dictionary = True) as c:
|
||||
c.execute ("""
|
||||
INSERT INTO
|
||||
users(code)
|
||||
VALUES
|
||||
(%s)""", user.code)
|
||||
(%s)""", (user.code,))
|
||||
user.id_ = c.lastrowid
|
||||
|
||||
def _create_dto_from_row (
|
||||
|
||||
新しい課題から参照
ユーザをブロックする