Move sql models into db/sql/
[mediagoblin.git] / mediagoblin / db / sql / models.py
CommitLineData
ccca0fbf
CAW
1import datetime
2
3from sqlalchemy.ext.declarative import declarative_base
4from sqlalchemy import (
5 Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
6 UniqueConstraint)
7
8
9Base = declarative_base()
10
11
12class User(Base):
13 __tablename__ = "users"
14
15 id = Column(Integer, primary_key=True)
16 username = Column(Unicode, nullable=False, unique=True)
17 email = Column(Unicode, nullable=False)
18 created = Column(DateTime, nullable=False, default=datetime.datetime.now)
19 pw_hash = Column(Unicode, nullable=False)
20 email_verified = Column(Boolean)
21 status = Column(Unicode, default="needs_email_verification", nullable=False)
22 verification_key = Column(Unicode)
23 is_admin = Column(Boolean, default=False, nullable=False)
24 url = Column(Unicode)
25 bio = Column(UnicodeText) # ??
26 bio_html = Column(UnicodeText) # ??
27 fp_verification_key = Column(Unicode)
28 fp_verification_expire = Column(DateTime)
29
30 ## TODO
31 # plugin data would be in a separate model
32
33
34class MediaEntry(Base):
35 __tablename__ = "media_entries"
36
37 id = Column(Integer, primary_key=True)
38 uploader = Column(Integer, ForeignKey('users.id'), nullable=False)
39 slug = Column(Unicode, nullable=False)
40 created = Column(DateTime, nullable=False, default=datetime.datetime.now)
41 description = Column(UnicodeText) # ??
42 description_html = Column(UnicodeText) # ??
43 media_type = Column(Unicode, nullable=False)
44
45 fail_error = Column(Unicode)
46 fail_metadata = Column(UnicodeText)
47
48 queued_media_file = Column(Unicode)
49
50 queued_task_id = Column(Unicode)
51
52 __table_args__ = (
53 UniqueConstraint('uploader', 'slug'),
54 {})
55
56 ## TODO
57 # media_files
58 # media_data
59 # attachment_files
60 # fail_error
61
62
63class Tag(Base):
64 __tablename__ = "tags"
65
66 id = Column(Integer, primary_key=True)
67 slug = Column(Unicode, nullable=False, unique=True)
68
69
70class MediaTag(Base):
71 __tablename__ = "media_tags"
72
73 id = Column(Integer, primary_key=True)
74 tag = Column(Integer, ForeignKey('tags.id'), nullable=False)
75 name = Column(Unicode)
76 media_entry = Column(
77 Integer, ForeignKey('media_entries.id'),
78 nullable=False)
79 # created = Column(DateTime, nullable=False, default=datetime.datetime.now)
80
81 __table_args__ = (
82 UniqueConstraint('tag', 'media_entry'),
83 {})
84
85
86class MediaComment(Base):
87 __tablename__ = "media_comments"
88
89 id = Column(Integer, primary_key=True)
90 media_entry = Column(
91 Integer, ForeignKey('media_entries.id'), nullable=False)
92 author = Column(Integer, ForeignKey('users.id'), nullable=False)
93 created = Column(DateTime, nullable=False, default=datetime.datetime.now)
94 content = Column(UnicodeText, nullable=False)
95 content_html = Column(UnicodeText)