2020-08-08 15:18:14 +02:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
from peewee import PostgresqlDatabase, Model, IntegerField, CharField, BooleanField, ForeignKeyField, DateTimeField
|
2020-03-07 10:45:39 +01:00
|
|
|
from playhouse.postgres_ext import TSVectorField
|
|
|
|
|
|
|
|
from config import dbauth
|
|
|
|
|
|
|
|
db = PostgresqlDatabase(**dbauth)
|
|
|
|
db.connect()
|
|
|
|
|
|
|
|
|
|
|
|
class BaseModel(Model):
|
|
|
|
class Meta:
|
|
|
|
database = db
|
|
|
|
|
|
|
|
|
2020-04-15 18:11:45 +02:00
|
|
|
class Series(BaseModel):
|
|
|
|
title = CharField(max_length=100)
|
|
|
|
is_campaign = BooleanField()
|
|
|
|
single_speaker = BooleanField()
|
|
|
|
|
|
|
|
|
2020-03-07 10:45:39 +01:00
|
|
|
class Episode(BaseModel):
|
2020-04-15 18:11:45 +02:00
|
|
|
series = ForeignKeyField(Series, backref="episodes")
|
2020-03-07 10:45:39 +01:00
|
|
|
episode_number = IntegerField()
|
2020-03-08 14:48:04 +01:00
|
|
|
video_number = IntegerField()
|
2020-03-07 10:45:39 +01:00
|
|
|
youtube_id = CharField(max_length=11)
|
2020-04-15 18:11:45 +02:00
|
|
|
title = CharField(max_length=100)
|
2020-08-08 15:18:14 +02:00
|
|
|
pretty_title = CharField(max_length=100)
|
2020-04-15 18:11:45 +02:00
|
|
|
downloaded = BooleanField(default=False)
|
2020-03-08 18:48:14 +01:00
|
|
|
text_imported = BooleanField(default=False)
|
|
|
|
phrases_imported = BooleanField(default=False)
|
2020-08-08 15:30:58 +02:00
|
|
|
subtitle_hash = CharField(max_length=64, null=True)
|
2020-08-08 15:18:14 +02:00
|
|
|
last_updated = DateTimeField(default=datetime.now)
|
2020-03-07 10:45:39 +01:00
|
|
|
|
|
|
|
class Meta:
|
2020-04-15 18:11:45 +02:00
|
|
|
indexes = ((("series", "video_number"), True),)
|
2020-03-07 10:45:39 +01:00
|
|
|
|
|
|
|
@property
|
|
|
|
def name(self) -> str:
|
|
|
|
return f"C{self.season}E{self.episode_number:03d}"
|
|
|
|
|
|
|
|
|
|
|
|
class Person(BaseModel):
|
2020-03-08 18:48:14 +01:00
|
|
|
name = CharField()
|
2020-03-07 10:45:39 +01:00
|
|
|
color = CharField(null=True)
|
2020-04-15 18:11:45 +02:00
|
|
|
series = ForeignKeyField(Series)
|
|
|
|
|
2020-03-08 18:48:14 +01:00
|
|
|
class Meta:
|
2020-04-15 18:11:45 +02:00
|
|
|
indexes = ((("name", "series"), True),)
|
2020-03-07 10:45:39 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Line(BaseModel):
|
|
|
|
text = CharField()
|
|
|
|
search_text = TSVectorField()
|
|
|
|
person = ForeignKeyField(Person, backref="lines", null=True)
|
|
|
|
isnote = BooleanField(default=False)
|
|
|
|
ismeta = BooleanField(default=False)
|
|
|
|
starttime = IntegerField()
|
|
|
|
endtime = IntegerField()
|
|
|
|
episode = ForeignKeyField(Episode, backref="lines")
|
|
|
|
order = IntegerField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
indexes = ((("episode", "order"), True),)
|
|
|
|
|
|
|
|
|
|
|
|
class Phrase(BaseModel):
|
|
|
|
text = CharField()
|
|
|
|
count = IntegerField()
|
2020-03-08 14:48:04 +01:00
|
|
|
episode = ForeignKeyField(Episode, backref="phrase")
|
2020-03-07 10:45:39 +01:00
|
|
|
|
|
|
|
class Meta:
|
2020-03-08 14:48:04 +01:00
|
|
|
indexes = ((("text", "episode"), True),)
|