/
models.py
89 lines (69 loc) · 2.81 KB
/
models.py
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
# -*- coding: utf-8 -*-
from datetime import datetime
from flask_babelex import gettext
from sqlalchemy.dialects.postgresql import ARRAY
from apollo.constants import LANGUAGES
from apollo.core import db
from apollo.dal.models import BaseModel, Resource
from apollo.utils import current_timestamp
import pytz
def _default_event_start():
return pytz.utc.localize(
datetime.combine(current_timestamp(), datetime.min.time()))
def _default_event_end():
return pytz.utc.localize(
datetime.combine(current_timestamp(), datetime.max.time()))
class Deployment(BaseModel):
__tablename__ = 'deployment'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
hostnames = db.Column(ARRAY(db.String), nullable=False)
allow_observer_submission_edit = db.Column(db.Boolean, default=True)
logo = db.Column(db.String)
include_rejected_in_votes = db.Column(db.Boolean, default=False)
is_initialized = db.Column(db.Boolean, default=False)
dashboard_full_locations = db.Column(db.Boolean, default=True)
enable_partial_response_for_messages = db.Column(db.Boolean, default=True)
primary_locale = db.Column(db.String)
other_locales = db.Column(ARRAY(db.String))
@classmethod
def find_by_hostname(cls, hostname):
return cls.query.filter(cls.hostnames.any(hostname)).first()
def __repr__(self):
return str(self)
def __str__(self):
return self.name or ''
@property
def locale_codes(self):
locales = [self.primary_locale] if self.primary_locale else ['en']
if self.other_locales:
locales.extend(self.other_locales)
return locales
@property
def languages(self):
return {
locale: name
for locale, name in LANGUAGES.items()
if locale in self.locale_codes
}
class Event(Resource):
__mapper_args__ = {'polymorphic_identity': 'event'}
__tablename__ = 'event'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
start = db.Column(
db.DateTime(timezone=True), default=_default_event_start,
nullable=False)
end = db.Column(
db.DateTime(timezone=True), default=_default_event_end,
nullable=False)
resource_id = db.Column(
db.Integer, db.ForeignKey('resource.resource_id', ondelete='CASCADE'))
location_set_id = db.Column(
db.Integer, db.ForeignKey('location_set.id', ondelete='SET NULL'))
participant_set_id = db.Column(
db.Integer, db.ForeignKey('participant_set.id', ondelete='SET NULL'))
location_set = db.relationship('LocationSet', backref='events')
participant_set = db.relationship('ParticipantSet', backref='events')
def __str__(self):
return gettext('Event - %(name)s', name=self.name)