Little sql model update
[mediagoblin.git] / mediagoblin / db / sql / models.py
1 import datetime
2
3 from sqlalchemy.ext.declarative import declarative_base
4 from sqlalchemy import (
5 Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
6 UniqueConstraint)
7
8
9 Base = declarative_base()
10
11
12 class 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=u"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_token_expire = Column(DateTime)
29
30 ## TODO
31 # plugin data would be in a separate model
32
33
34 class MediaEntry(Base):
35 __tablename__ = "media_entries"
36
37 id = Column(Integer, primary_key=True)
38 uploader = Column(Integer, ForeignKey('users.id'), nullable=False)
39 title = Column(Unicode, nullable=False)
40 slug = Column(Unicode, nullable=False)
41 created = Column(DateTime, nullable=False, default=datetime.datetime.now)
42 description = Column(UnicodeText) # ??
43 description_html = Column(UnicodeText) # ??
44 media_type = Column(Unicode, nullable=False)
45
46 fail_error = Column(Unicode)
47 fail_metadata = Column(UnicodeText)
48
49 queued_media_file = Column(Unicode)
50
51 queued_task_id = Column(Unicode)
52
53 __table_args__ = (
54 UniqueConstraint('uploader', 'slug'),
55 {})
56
57 ## TODO
58 # media_files
59 # media_data
60 # attachment_files
61 # fail_error
62
63
64 class Tag(Base):
65 __tablename__ = "tags"
66
67 id = Column(Integer, primary_key=True)
68 slug = Column(Unicode, nullable=False, unique=True)
69
70
71 class MediaTag(Base):
72 __tablename__ = "media_tags"
73
74 id = Column(Integer, primary_key=True)
75 tag = Column(Integer, ForeignKey('tags.id'), nullable=False)
76 name = Column(Unicode)
77 media_entry = Column(
78 Integer, ForeignKey('media_entries.id'),
79 nullable=False)
80 # created = Column(DateTime, nullable=False, default=datetime.datetime.now)
81
82 __table_args__ = (
83 UniqueConstraint('tag', 'media_entry'),
84 {})
85
86
87 class MediaComment(Base):
88 __tablename__ = "media_comments"
89
90 id = Column(Integer, primary_key=True)
91 media_entry = Column(
92 Integer, ForeignKey('media_entries.id'), nullable=False)
93 author = Column(Integer, ForeignKey('users.id'), nullable=False)
94 created = Column(DateTime, nullable=False, default=datetime.datetime.now)
95 content = Column(UnicodeText, nullable=False)
96 content_html = Column(UnicodeText)
97
98
99 def show_table_init():
100 from sqlalchemy import create_engine
101 engine = create_engine('sqlite:///:memory:', echo=True)
102
103 Base.metadata.create_all(engine)
104
105
106 if __name__ == '__main__':
107 show_table_init()