from elixir.entity import Entity from elixir.fields import Field from elixir.options import options_defaults from elixir.relationships import OneToMany, ManyToOne from sqlalchemy.types import Integer, String, Unicode options_defaults["shortnames"] = True # We would like to be able to create this schema in a specific database at # will, so we can test it easily. # Make elixir not bind to any session to make this possible. # # http://elixir.ematia.de/trac/wiki/Recipes/MultipleDatabasesOneMetadata __session__ = None class Resource(Entity): """Represents a resource of movies. This resources can be online or offline.""" name = Field(Unicode(255)) path = Field(Unicode(255)) releases = OneToMany('Release') class Release(Entity): """Logically groups all files that belong to a certain release, such as parts of a movie, subtitles, nfo, trailers etc.""" files = OneToMany('File') mooli_id = Field(Integer) resource = ManyToOne('Resource') class File(Entity): """File that belongs to a release.""" history = OneToMany('RenameHistory') path = Field(Unicode(255), nullable = False, unique = True) # Subtitles can have multiple parts, too part = Field(Integer) release = ManyToOne('Release') # Let's remember the size so we know about offline media. size = Field(Integer, nullable = False) type = ManyToOne('FileType') class FileType(Entity): """Types could be trailer, subtitle, movie, partial movie etc.""" identifier = Field(String(20), unique = True) name = Field(Unicode(255), nullable = False) files = OneToMany('File') class RenameHistory(Entity): """Remembers from where to where files have been moved.""" file = ManyToOne('File') old = Field(String(255)) new = Field(String(255))