mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 20:44:30 +08:00
75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
|
|
||
|
from sqlalchemy.ext.declarative import declarative_base
|
||
|
from sqlalchemy import Column, String, Integer, ForeignKey, \
|
||
|
DateTime, Text, Boolean
|
||
|
from sqlalchemy.orm import relationship, backref
|
||
|
from session import new_engine
|
||
|
|
||
|
|
||
|
Base = declarative_base()
|
||
|
|
||
|
|
||
|
def init_db():
|
||
|
Base.metadata.create_all(new_engine())
|
||
|
|
||
|
|
||
|
class Event(Base):
|
||
|
"""
|
||
|
A single event awaiting scheduling. Once a time has been selected by the
|
||
|
user, an email will be sent and this entry deleted.
|
||
|
"""
|
||
|
__tablename__ = 'event'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
title = Column(String(255))
|
||
|
location = Column(Text())
|
||
|
description = Column(Text())
|
||
|
|
||
|
@property
|
||
|
def organizer(self):
|
||
|
return filter(lambda a: a.is_sender, self.attendees)[0]
|
||
|
|
||
|
|
||
|
class EventTime(Base):
|
||
|
"""
|
||
|
A time range option for a single event. An event can have many times - the
|
||
|
user will choose one to schedule the event. Time ranges are deleted when
|
||
|
the event is deleted.
|
||
|
"""
|
||
|
__tablename__ = 'eventtime'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
start = Column(DateTime())
|
||
|
end = Column(DateTime())
|
||
|
key = Column(String(255))
|
||
|
|
||
|
event_id = Column(Integer, ForeignKey('event.id'))
|
||
|
event = relationship('Event',
|
||
|
foreign_keys=[event_id],
|
||
|
backref=backref('times', lazy='dynamic'),
|
||
|
lazy='joined',
|
||
|
single_parent=True,
|
||
|
cascade="all, delete-orphan")
|
||
|
|
||
|
|
||
|
class Attendee(Base):
|
||
|
"""
|
||
|
An attendee for a single event. These are not stored normalized, because
|
||
|
they're short-lived and need to be reliably deleted when the event is
|
||
|
deleted.
|
||
|
"""
|
||
|
__tablename__ = 'attendee'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
|
||
|
name = Column(String(255))
|
||
|
email = Column(String(255))
|
||
|
is_sender = Column(Boolean())
|
||
|
|
||
|
event_id = Column(Integer, ForeignKey('event.id'))
|
||
|
event = relationship('Event',
|
||
|
foreign_keys=[event_id],
|
||
|
backref=backref('attendees', lazy='dynamic'),
|
||
|
lazy='joined',
|
||
|
single_parent=True,
|
||
|
cascade="all, delete-orphan")
|