-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
111 lines (77 loc) · 3.13 KB
/
models.py
File metadata and controls
111 lines (77 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import database
from sqlalchemy import Table, Column, Integer, String, Boolean, Text, DateTime, ForeignKey
from sqlalchemy.orm import relationship, backref
from slugify import slugify
import os, base64
_round_players = Table('players', database.Model.metadata,
Column('round_id', Integer, ForeignKey('rounds.id')),
Column('user_id', Integer, ForeignKey('users.id'))
)
class User(database.Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), nullable=False, unique=True)
password = Column(String(255), nullable=False, server_default='')
email = Column(String(255), nullable=False, unique=True)
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
def generate_session_key():
return base64.b64encode(os.urandom(200))[:-2]
class Session(database.Model):
__tablename__ = 'sessions'
id = Column(Integer, primary_key=True)
key = Column(String(200), nullable=False, server_default='')
user = relationship('User', backref=backref('sessions', lazy='dynamic'))
user_id = Column(Integer, ForeignKey('users.id'))
def __init__(self, user):
self.user = user
self.key = generate_session_key()
class Game(database.Model):
__tablename__ = 'games'
id = Column(Integer, primary_key=True)
title = Column(String(200))
url_slug = Column(String(200))
description = Column(Text)
user = relationship('User', backref=backref('games', lazy='dynamic'))
user_id = Column(Integer, ForeignKey('users.id'))
def set_title(self, title):
self.title = title
self.url_slug = slugify(unicode(title))
def __init__(self, user, title, description):
self.user = user
self.set_title( title )
self.description = description
def __repr__(self):
return '<Game %s/%s>' % (self.user.username, self.url_slug)
class Round(database.Model):
__tablename__ = 'rounds'
id = Column(Integer, primary_key=True)
game = relationship('Game', backref=backref('rounds', lazy='dynamic'))
game_id = Column(Integer, ForeignKey('games.id'))
user = relationship('User', backref=backref('rounds', lazy='dynamic'))
user_id = Column(Integer, ForeignKey('users.id'))
players = relationship("User",
secondary = _round_players,
backref = "current_rounds")
def __init__(self, user, game):
self.user = user
self.game = game
def __repr__(self):
return '<Round %s>'%str(self.id)
class Move(database.Model):
__tablename__ = 'moves'
id = Column(Integer, primary_key=True)
round = relationship('Round', backref=backref('rounds', lazy='dynamic'))
round_id = Column(Integer, ForeignKey('rounds.id'))
user = relationship('User', backref=backref('moves', lazy='dynamic'))
user_id = Column(Integer, ForeignKey('users.id'))
index = Column(Integer)
content = Column(Text)
def __init__(self, round, user, content):
self.round = round
self.user = user
self.content = content
def __repr__(self):
return '<Move>'