#6 の対応
このコミットが含まれているのは:
+4
-2
@@ -65,7 +65,7 @@ class Model:
|
|||||||
self,
|
self,
|
||||||
related_model: Type[_ModelT],
|
related_model: Type[_ModelT],
|
||||||
foreign_key: str | None = None,
|
foreign_key: str | None = None,
|
||||||
) -> _ModelT: ...
|
) -> list[_ModelT]: ...
|
||||||
|
|
||||||
def belongs_to (
|
def belongs_to (
|
||||||
self,
|
self,
|
||||||
@@ -77,7 +77,7 @@ class Model:
|
|||||||
self,
|
self,
|
||||||
related_model: Type[_ModelT],
|
related_model: Type[_ModelT],
|
||||||
foreign_key: str | None = None,
|
foreign_key: str | None = None,
|
||||||
) -> _ModelT: ...
|
) -> list[_ModelT]: ...
|
||||||
|
|
||||||
def save (self) -> None: ...
|
def save (self) -> None: ...
|
||||||
|
|
||||||
@@ -135,3 +135,5 @@ class QueryBuilder (Generic[_ModelT]):
|
|||||||
def where (self, field: str, value: Any) -> QueryBuilder[_ModelT]: ...
|
def where (self, field: str, value: Any) -> QueryBuilder[_ModelT]: ...
|
||||||
|
|
||||||
def where_null (self, field: str) -> QueryBuilder[_ModelT]: ...
|
def where_null (self, field: str) -> QueryBuilder[_ModelT]: ...
|
||||||
|
|
||||||
|
def _load_relation (self, relation_name: str) -> QueryBuilder[_ModelT]: ...
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
|
||||||
from eloquent import Model
|
from my_eloquent import Model
|
||||||
|
|
||||||
|
|
||||||
class Comment (Model):
|
class Comment (Model):
|
||||||
@@ -40,8 +40,9 @@ class Comment (Model):
|
|||||||
|
|
||||||
def upsert (
|
def upsert (
|
||||||
self,
|
self,
|
||||||
|
*args: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
upsert (self, 'video_id', 'comment_no')
|
super ().upsert ('video_id', 'comment_no')
|
||||||
|
|
||||||
|
|
||||||
class Tag (Model):
|
class Tag (Model):
|
||||||
@@ -53,7 +54,7 @@ class Tag (Model):
|
|||||||
@property
|
@property
|
||||||
def video_tags (
|
def video_tags (
|
||||||
self,
|
self,
|
||||||
) -> VideoTag:
|
) -> list[VideoTag]:
|
||||||
return self.has_many (VideoTag)
|
return self.has_many (VideoTag)
|
||||||
|
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ class User (Model):
|
|||||||
@property
|
@property
|
||||||
def comments (
|
def comments (
|
||||||
self,
|
self,
|
||||||
) -> Comment:
|
) -> list[Comment]:
|
||||||
return self.has_many (Comment)
|
return self.has_many (Comment)
|
||||||
|
|
||||||
|
|
||||||
@@ -83,25 +84,26 @@ class Video (Model):
|
|||||||
@property
|
@property
|
||||||
def video_histories (
|
def video_histories (
|
||||||
self,
|
self,
|
||||||
) -> VideoHistory:
|
) -> list[VideoHistory]:
|
||||||
return self.has_many (VideoHistory)
|
return self.has_many (VideoHistory)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def video_tags (
|
def video_tags (
|
||||||
self,
|
self,
|
||||||
) -> VideoTag:
|
) -> list[VideoTag]:
|
||||||
return self.has_many (VideoTag)
|
return self.has_many (VideoTag)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def comments (
|
def comments (
|
||||||
self,
|
self,
|
||||||
) -> Comment:
|
) -> list[Comment]:
|
||||||
return self.has_many (Comment)
|
return self.has_many (Comment)
|
||||||
|
|
||||||
def upsert (
|
def upsert (
|
||||||
self,
|
self,
|
||||||
|
*args: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
upsert (self, 'code')
|
super ().upsert ('code')
|
||||||
|
|
||||||
|
|
||||||
class VideoHistory (Model):
|
class VideoHistory (Model):
|
||||||
@@ -120,8 +122,9 @@ class VideoHistory (Model):
|
|||||||
|
|
||||||
def upsert (
|
def upsert (
|
||||||
self,
|
self,
|
||||||
|
*args: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
upsert (self, 'video_id', 'fetched_at')
|
super ().upsert ('video_id', 'fetched_at')
|
||||||
|
|
||||||
|
|
||||||
class VideoTag (Model):
|
class VideoTag (Model):
|
||||||
@@ -147,23 +150,6 @@ class VideoTag (Model):
|
|||||||
|
|
||||||
def upsert (
|
def upsert (
|
||||||
self,
|
self,
|
||||||
) -> None:
|
|
||||||
upsert (self, 'video_id', 'tag_id')
|
|
||||||
|
|
||||||
|
|
||||||
def upsert (
|
|
||||||
model: Model,
|
|
||||||
*args: str,
|
*args: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
q = model.query ()
|
super ().upsert ('video_id', 'tag_id')
|
||||||
|
|
||||||
for arg in args:
|
|
||||||
q = q.where (arg, getattr (model, arg))
|
|
||||||
|
|
||||||
row = q.first ()
|
|
||||||
|
|
||||||
if row is not None:
|
|
||||||
model.id = row.id
|
|
||||||
model._Model__exists = True # pylint: disable = protected-access
|
|
||||||
|
|
||||||
model.save ()
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
from typing import Self
|
||||||
|
|
||||||
|
import eloquent
|
||||||
|
|
||||||
|
|
||||||
|
class DatabaseManager (eloquent.DatabaseManager):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Model (eloquent.Model):
|
||||||
|
def upsert (
|
||||||
|
self,
|
||||||
|
*args: str,
|
||||||
|
) -> None:
|
||||||
|
q = self.query ()
|
||||||
|
for arg in args:
|
||||||
|
q = q.where (arg, getattr (self, arg))
|
||||||
|
row = q.first ()
|
||||||
|
if row is not None:
|
||||||
|
self.id = row.id
|
||||||
|
self._Model__exists = True # pylint: disable = protected-access
|
||||||
|
self.save ()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def with_ (
|
||||||
|
cls,
|
||||||
|
*relations: str,
|
||||||
|
) -> eloquent.QueryBuilder[Self]:
|
||||||
|
q = cls.query ()
|
||||||
|
for relation in relations:
|
||||||
|
q = q._load_relation (relation)
|
||||||
|
return q
|
||||||
+2
-1
@@ -60,7 +60,8 @@ def update_tables (
|
|||||||
video_history.fetched_at = now
|
video_history.fetched_at = now
|
||||||
video_history.views_count = datum['viewCounter']
|
video_history.views_count = datum['viewCounter']
|
||||||
video_history.save ()
|
video_history.save ()
|
||||||
video_tags = video.video_tags.where_not_null ('untagged_at').get ()
|
video_tags = [video_tag for video_tag in video.video_tags
|
||||||
|
if video_tag.untagged_at is not None]
|
||||||
tag: Tag | None
|
tag: Tag | None
|
||||||
video_tag: VideoTag | None
|
video_tag: VideoTag | None
|
||||||
for video_tag in video_tags:
|
for video_tag in video_tags:
|
||||||
|
|||||||
新しい課題から参照
ユーザをブロックする