From 22e0a5a26c1db649694bedda7590575e738268a8 Mon Sep 17 00:00:00 2001 From: alshain Date: Mon, 7 Feb 2011 22:44:33 +0100 Subject: [PATCH] Adds models. --- src/couchpotato/model.py | 129 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/couchpotato/model.py diff --git a/src/couchpotato/model.py b/src/couchpotato/model.py new file mode 100644 index 00000000..6edf2804 --- /dev/null +++ b/src/couchpotato/model.py @@ -0,0 +1,129 @@ +from sqlalchemy.orm import scoped_session, sessionmaker +from sqlalchemy import create_engine +from sqlalchemy.schema import ThreadLocalMetaData +from elixir import * + +engine = None +session = scoped_session(sessionmaker(autoflush=True, transactional=True)) +metadata + + +class Language(Entity): + name = OneToMany("LanguageName") + + +class LanguageName(Entity): + translation_id = Field(Integer, primary_key=True) + language = ManyToOne('Language', primary_key=True) + text = Field(Unicode(20), unique=True) + + +class Provider(Entity): + url = Field(String(20), unique=True) + + +class ExternalMovieId(Entity): + provider = ManyToOne('Provider') + value = Field(Unicode(40)) + movie = ManyToOne('Movie') + # such as IMDB's, maybe some use text -> long + + +class MovieTitle(Entity): + language = ManyToOne('Language') + movie = ManyToOne('Movie') + title = Field(UnicodeText) + + def __init__(self, title, movie=None): + self.title = unicode(title) + self.movie = movie + +class Movie(Entity): + titles = OneToMany('MovieTitle', lazy=False) + plot = Field(UnicodeText) + year = Field(Integer) + tagline = Field(UnicodeText(255)) + genres = ManyToMany('Genre') + identifiers = OneToMany('ExternalMovieId') + characters = ManyToMany('Character') + + def __init__(self, title, year): + try: + title = unicode(title) + self.titles.append(MovieTitle(title)) + except TypeError: + pass + + +class Character(Entity): + names = OneToMany('CharacterName', required=True) + movies = ManyToMany('Movie') + + +class CharacterName(Entity): + language = ManyToOne('Language') + character = ManyToOne('Character') + + +class AssociatedPeople(Entity): + directors = ManyToMany('Person') + screenwriters = ManyToMany('Person') + actors = ManyToMany('Person') + + +class AspectRatio(Entity): + name = Field(Unicode(20), required=True, unique=True) + ratio = Field(Float) + movies = ManyToMany('Movie') + # The Dark Knight has multiple... + +class Specification(Entity): + language = ManyToOne('Language') + color = Field(Boolean) + + +class Genre(Entity): + name = Field(UnicodeText(255)) + + +class Person(Entity): + name = Field(UnicodeText(50)) + birthday = Field(Date) + + +class Rating(Entity): + name = Field(UnicodeText(40)) + position = Field(Float) + movies = ManyToMany('Movie') + + def __cmp__(self, other): + if self.position < other.position: + return -1 + elif self.primary_key > other.position: + return 1 + else: + return 0 + + +class AgeRating(Entity): + name = Field(UnicodeText(40)) + position = Field(Float) + movies = ManyToMany('Movie') + + def __cmp__(self, other): + if self.position < other.position: + return -1 + elif self.primary_key > other.position: + return 1 + else: + return 0 + + +def doctest(engine=None): + """Test + >>> from couchpotato import model + >>> model.metadata.bind = "sqlite:///:memory:" + >>> model.setup_all() + >>> model.setup_all() + """ + pass