mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 18:32:20 +08:00
75 lines
No EOL
2.2 KiB
Python
75 lines
No EOL
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") |