EOD commit (WIP). Added partial Show, Episode schema.
This commit is contained in:
1 parent
40cd5218db
commit
e270e09969
1 file changed
+147
-1
@@ -5,7 +5,7 @@ from elixir.options import options_defaults, using_options
|
|||||||
from elixir.relationships import ManyToMany, OneToMany, ManyToOne
|
from elixir.relationships import ManyToMany, OneToMany, ManyToOne
|
||||||
from sqlalchemy.ext.mutable import Mutable
|
from sqlalchemy.ext.mutable import Mutable
|
||||||
from sqlalchemy.types import Integer, Unicode, UnicodeText, Boolean, String, \
|
from sqlalchemy.types import Integer, Unicode, UnicodeText, Boolean, String, \
|
||||||
TypeDecorator
|
TypeDecorator, Float, BLOB
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@@ -114,7 +114,143 @@ class LibraryTitle(Entity):
|
|||||||
language = OneToMany('Language')
|
language = OneToMany('Language')
|
||||||
libraries = ManyToOne('Library')
|
libraries = ManyToOne('Library')
|
||||||
|
|
||||||
|
|
||||||
|
class Show(Entity):
|
||||||
|
"""Combined Show and Library"""
|
||||||
|
|
||||||
|
using_options(order_by = '-default') # ???
|
||||||
|
|
||||||
|
last_edit = Field(Integer, default = lambda: int(time.time()), index = True)
|
||||||
|
#identifier = Field(String(20), index = True)
|
||||||
|
|
||||||
|
title = Field(Unicode) # Show title
|
||||||
|
simple_title = Field(Unicode, index = True) # Simple show title
|
||||||
|
default = Field(Boolean, default = False, index = True) # ???
|
||||||
|
|
||||||
|
## Wont need the following commented out vars since a show can not be downloaded,
|
||||||
|
## only episodes can be
|
||||||
|
##status = ManyToOne('Status') # Download, watched, etc
|
||||||
|
##releases = OneToMany('Release', cascade = 'all, delete-orphan') # List all available releases that can be downloaded?
|
||||||
|
##files = ManyToMany('File', cascade = 'all, delete-orphan', single_parent = True) # File on hard drive
|
||||||
|
profile = ManyToOne('Profile') # ??? Quality ???
|
||||||
|
category = ManyToOne('Category') # ???
|
||||||
|
language = OneToMany('Language') # Language ??? (en) ???
|
||||||
|
|
||||||
|
# New fields
|
||||||
|
air_by_date = Field(Boolean, default=False) # True if no season or episode number
|
||||||
|
original_air_date = Field(Integer) # First date ever released
|
||||||
|
year = Field(Integer) # 1983
|
||||||
|
air_day = Field(Integer) # Monday, Tuesday...
|
||||||
|
air_time = Field(Integer) # 8PM EST
|
||||||
|
series_id = Field(Integer) # Series id
|
||||||
|
show_stauts = Field(Integer) # Continuing, Ended
|
||||||
|
|
||||||
|
duration = Field(Integer) # Length of show in seconds
|
||||||
|
summary = Field(Unicode) # Description of show
|
||||||
|
network = Field(Unicode) # ABC, Fox
|
||||||
|
rating = Field(Float) # 0.000-10.000 (star rating)
|
||||||
|
content_rating = Field(Unicode) # "TV-PG"
|
||||||
|
|
||||||
|
default_provider = Field(Integer, default=0)# thetvdb for example; allows per show providers
|
||||||
|
|
||||||
|
genre = ManyToMany('Genre') # Genre (comedy, etc)
|
||||||
|
episodes = OneToMany('Episode') # All the episodes that belong to this show
|
||||||
|
seasons = ManyToOne('Season') # Seasons artwork
|
||||||
|
banners = ManyToOne('Banner') # Banner artwork
|
||||||
|
posters = ManyToOne('Poster') # Poster artwork
|
||||||
|
fanart = ManyToOne('Fanart') # Fanart artwork
|
||||||
|
actors = ManyToMany('Actor') # Actor info and artwork
|
||||||
|
provider_ids = ManyToMany('ProviderIds') # 'imdb_id', 'zap2it_id', 'tvrage'
|
||||||
|
titles = OneToMany('ShowTitle', cascade = 'all, delete-orphan')
|
||||||
|
|
||||||
|
|
||||||
|
class ShowTitle(Entity):
|
||||||
|
""""""
|
||||||
|
using_options(order_by = '-default')
|
||||||
|
|
||||||
|
title = Field(Unicode)
|
||||||
|
simple_title = Field(Unicode, index = True)
|
||||||
|
default = Field(Boolean, default = False, index = True)
|
||||||
|
|
||||||
|
language = OneToMany('Language')
|
||||||
|
shows = ManyToOne('Show')
|
||||||
|
|
||||||
|
|
||||||
|
class Episode(Entity):
|
||||||
|
"""Combined Show and Library"""
|
||||||
|
|
||||||
|
#using_options(order_by = '-default') # ???
|
||||||
|
#identifier = Field(String(20), index = True)
|
||||||
|
|
||||||
|
last_edit = Field(Integer, default = lambda: int(time.time()), index = True)
|
||||||
|
title = Field(Unicode) # Show title
|
||||||
|
simple_title = Field(Unicode, index = True) # Simple show title
|
||||||
|
default = Field(Boolean, default = False, index = True) # ???
|
||||||
|
|
||||||
|
status = ManyToOne('Status') # Download, watched, etc
|
||||||
|
profile = ManyToOne('Profile') # ??? Quality ???
|
||||||
|
category = ManyToOne('Category') # ???
|
||||||
|
releases = OneToMany('Release', cascade = 'all, delete-orphan') # List all available releases that can be downloaded?
|
||||||
|
files = ManyToMany('File', cascade = 'all, delete-orphan', single_parent = True) # File on hard drive
|
||||||
|
language = OneToMany('Language') # Language ??? (en) ???
|
||||||
|
|
||||||
|
# New fields
|
||||||
|
season = Field(Integer) # Season number
|
||||||
|
number = Field(Integer) # Episode number
|
||||||
|
image = Field(BLOB) # Episode Image (XXX: What to do with images?)
|
||||||
|
air_date = Field(Integer) # Origianl air date
|
||||||
|
duration = Field(Integer) # Length of show (24:34) in seconds
|
||||||
|
summary = Field(Unicode) # Description of show
|
||||||
|
rating = Field(Float) # 0.000-10.000 (star rating)
|
||||||
|
content_rating = Field(Unicode) # "TV-PG"
|
||||||
|
production_code = Field(Unicode) # Production code (should this be an Integer)
|
||||||
|
|
||||||
|
show = ManyToOne('Show') # Parent show
|
||||||
|
actors = ManyToMany('Actor') # Guest Actor info and artwork
|
||||||
|
directors = ManyToMany('Director') # Directors of episode
|
||||||
|
writers = ManyToMany('Writer') # Writers of episode
|
||||||
|
provider_ids = ManyToMany('ProviderIds') # 'imdb_id', 'zap2it_id', 'tvrage'
|
||||||
|
|
||||||
|
|
||||||
|
class Fanart(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
show = OneToMany('Show')
|
||||||
|
|
||||||
|
class Actor(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
shows = ManyToMany('Show')
|
||||||
|
episodes = ManyToMany('Episode')
|
||||||
|
|
||||||
|
class Director(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
episodes = ManyToMany('Episode')
|
||||||
|
|
||||||
|
class Writer(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
episodes = ManyToMany('Episode')
|
||||||
|
|
||||||
|
class Genre(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
shows = ManyToMany('Show')
|
||||||
|
|
||||||
|
class Season(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
show = OneToMany('Show')
|
||||||
|
|
||||||
|
class Banner(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
show = OneToMany('Show')
|
||||||
|
|
||||||
|
class Poster(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
show = OneToMany('Show')
|
||||||
|
|
||||||
|
class ProviderIds(Entity):
|
||||||
|
"""Stub for Now"""
|
||||||
|
shows = ManyToMany('Show')
|
||||||
|
episodes = ManyToMany('Episode')
|
||||||
|
|
||||||
|
|
||||||
class Language(Entity):
|
class Language(Entity):
|
||||||
""""""
|
""""""
|
||||||
|
|
||||||
@@ -122,6 +258,9 @@ class Language(Entity):
|
|||||||
label = Field(Unicode)
|
label = Field(Unicode)
|
||||||
|
|
||||||
titles = ManyToOne('LibraryTitle')
|
titles = ManyToOne('LibraryTitle')
|
||||||
|
show_titles = ManyToOne('ShowTitle')
|
||||||
|
show = ManyToOne('Show')
|
||||||
|
episode = ManyToOne('Episode')
|
||||||
|
|
||||||
|
|
||||||
class Release(Entity):
|
class Release(Entity):
|
||||||
@@ -132,6 +271,7 @@ class Release(Entity):
|
|||||||
identifier = Field(String(100), index = True)
|
identifier = Field(String(100), index = True)
|
||||||
|
|
||||||
movie = ManyToOne('Movie')
|
movie = ManyToOne('Movie')
|
||||||
|
episode = ManyToOne('Episode')
|
||||||
status = ManyToOne('Status')
|
status = ManyToOne('Status')
|
||||||
quality = ManyToOne('Quality')
|
quality = ManyToOne('Quality')
|
||||||
files = ManyToMany('File')
|
files = ManyToMany('File')
|
||||||
@@ -171,6 +311,7 @@ class Status(Entity):
|
|||||||
|
|
||||||
releases = OneToMany('Release')
|
releases = OneToMany('Release')
|
||||||
movies = OneToMany('Movie')
|
movies = OneToMany('Movie')
|
||||||
|
episodes = OneToMany('Episode')
|
||||||
|
|
||||||
|
|
||||||
class Quality(Entity):
|
class Quality(Entity):
|
||||||
@@ -198,6 +339,8 @@ class Profile(Entity):
|
|||||||
hide = Field(Boolean, default = False)
|
hide = Field(Boolean, default = False)
|
||||||
|
|
||||||
movie = OneToMany('Movie')
|
movie = OneToMany('Movie')
|
||||||
|
show = OneToMany('Show')
|
||||||
|
episode = OneToMany('Episode')
|
||||||
types = OneToMany('ProfileType', cascade = 'all, delete-orphan')
|
types = OneToMany('ProfileType', cascade = 'all, delete-orphan')
|
||||||
|
|
||||||
def to_dict(self, deep = {}, exclude = []):
|
def to_dict(self, deep = {}, exclude = []):
|
||||||
@@ -218,6 +361,8 @@ class Category(Entity):
|
|||||||
ignored = Field(Unicode(255))
|
ignored = Field(Unicode(255))
|
||||||
|
|
||||||
movie = OneToMany('Movie')
|
movie = OneToMany('Movie')
|
||||||
|
show = OneToMany('Show')
|
||||||
|
episode = OneToMany('Episode')
|
||||||
destination = ManyToOne('Destination')
|
destination = ManyToOne('Destination')
|
||||||
|
|
||||||
|
|
||||||
@@ -253,6 +398,7 @@ class File(Entity):
|
|||||||
|
|
||||||
history = OneToMany('RenameHistory')
|
history = OneToMany('RenameHistory')
|
||||||
movie = ManyToMany('Movie')
|
movie = ManyToMany('Movie')
|
||||||
|
episodes = ManyToMany('Episode')
|
||||||
release = ManyToMany('Release')
|
release = ManyToMany('Release')
|
||||||
library = ManyToMany('Library')
|
library = ManyToMany('Library')
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user