Ejemplo n.º 1
0
class Revisions(BaseMixin, db.Model):
    """
    Collection of revisions of content.
    """
    __tablename__ = 'revisions'
    #: All revisions of the content
    history = db.relationship(
        ContentRevision,
        primaryjoin='ContentRevision.parent_id == Revisions.id',
        order_by=ContentRevision.id.desc,
        backref=db.backref('parent', cascade='all'))
    #: Latest published revision
    published_id = db.Column(db.Integer,
                             db.ForeignKey('content_revision.id'),
                             nullable=True)
    published = db.relationship(ContentRevision,
                                post_update=True,
                                primaryjoin=published_id == ContentRevision.id)
    #: Latest draft revision
    draft_id = db.Column(db.Integer,
                         db.ForeignKey('content_revision.id'),
                         nullable=True)
    draft = db.relationship(ContentRevision,
                            post_update=True,
                            primaryjoin=draft_id == ContentRevision.id)
Ejemplo n.º 2
0
class ContentRevision(BaseMixin, db.Model):
    """
    A single revision of any piece of content.
    """
    __tablename__ = 'content_revision'
    parent_id = db.Column(db.Integer,
                          db.ForeignKey('revisions.id',
                                        use_alter=True,
                                        name='fk_content_revision_parent_id'),
                          nullable=False)
    #: Previous revision
    previous_id = db.Column(db.Integer,
                            db.ForeignKey('content_revision.id'),
                            nullable=True)
    previous = db.relationship('ContentRevision',
                               remote_side='ContentRevision.id',
                               uselist=False)
    #: User who made this content revision
    user_id = db.Column(db.Integer,
                        db.ForeignKey('user.id'),
                        nullable=False,
                        default=default_user_id)
    user = db.relationship(User)
    #: Title of the current revision
    title = db.Column(db.Unicode(250), nullable=False)
    #: Abstract that is shown in summaries. Plain text.
    description = db.Column(db.UnicodeText, nullable=False, default=u'')
    #: Page content. Rich text.
    _content = db.Column('content',
                         db.UnicodeText,
                         nullable=False,
                         default=u'')
    #: Template with which this page will be rendered
    template = db.Column(db.Unicode(80), nullable=False, default=u'')

    def __init__(self, **kwargs):
        super(ContentRevision, self).__init__(**kwargs)
        if self.previous:
            # Copy over content from the previous revision
            if not self.user:
                self.user = self.previous.user
            if not self.title:
                self.title = self.previous.title
            if not self.description:
                self.description = self.previous.description
            if not self._content:
                self._content = self.previous._content
            if not self.template:
                self.template = self.previous.template

    @property
    def content(self):
        return Markup(self._content)

    @content.setter
    def content(self, value):
        self._content = value

    content = db.synonym('_content', descriptor=content)
Ejemplo n.º 3
0
class Participant(BaseMixin, db.Model):
    __tablename__ = 'participant'

    #: List that this participant is in
    participant_list_id = db.Column(None,
                                    db.ForeignKey('participant_list.id'),
                                    nullable=False)
    #: Datetime when this participant's record was created upstream
    datetime = db.Column(db.DateTime, nullable=True)
    #: Ticket no, the reference key
    ticket = db.Column(db.Unicode(80), nullable=True, unique=True)
    #: Participant's name
    fullname = db.Column(db.Unicode(80), nullable=True)
    #: Unvalidated email address
    email = db.Column(db.Unicode(80), nullable=True)
    #: Unvalidated phone number
    phone = db.Column(db.Unicode(80), nullable=True)
    #: Unvalidated Twitter id
    twitter = db.Column(db.Unicode(80), nullable=True)
    #: Ticket type, if the registration system had multiple tickets
    ticket_type = db.Column(db.Unicode(80), nullable=True)
    #: Job title
    jobtitle = db.Column(db.Unicode(80), nullable=True)
    #: Company
    company = db.Column(db.Unicode(80), nullable=True)
    #: Participant's city
    city = db.Column(db.Unicode(80), nullable=True)
    #: T-shirt size
    tshirt_size = db.Column(db.Unicode(4), nullable=True)
    #: Link to the user record
    user_id = db.Column(None, db.ForeignKey('user.id'), nullable=True)
    user = db.relationship(User)
    #: Access key for connecting to the user record (nulled when linked)
    access_key = db.Column(db.Unicode(44),
                           nullable=True,
                           default=newsecret,
                           unique=True)
    #: Is listed in the public directory
    is_listed = db.Column(db.Boolean, default=False, nullable=False)
    #: Data fields the participant has chosen to reveal in public
    fields_directory = db.Column(db.Unicode(250),
                                 nullable=False,
                                 default=u'fullname company')
    #: Data fields the participant has chosen to reveal via ContactPoint
    fields_contactpoint = db.Column(
        db.Unicode(250),
        nullable=False,
        default=u'fullname email phone twitter jobtitle company city')

    participant_list = db.relationship(ParticipantList,
                                       backref=db.backref(
                                           'participants',
                                           order_by=fullname,
                                           cascade='all, delete-orphan'))

    parent = db.synonym('participant_list')
Ejemplo n.º 4
0
class ListItem(BaseMixin, db.Model):
    __tablename__ = 'list_item'
    list_id = db.Column(None, db.ForeignKey('list.id'), nullable=False)
    name = db.Column(db.Unicode(80), nullable=True)
    title = db.Column(db.Unicode(250), nullable=True)
    url = db.Column(db.Unicode(250), nullable=True)
    node_id = db.Column(None, db.ForeignKey('node.id'), nullable=True)
    node = db.relationship(Node,
                           backref=db.backref('lists',
                                              cascade='all, delete-orphan'))
    seq = db.Column(db.Integer, nullable=False)

    __table_args__ = (
        db.UniqueConstraint(
            'list_id',
            'name'),  # name, if present, must be unique in this list
        db.UniqueConstraint('list_id',
                            'node_id')  # A node can only be in a list once
    )

    @classmethod
    def get_or_new(cls, list, name=None, node=None):
        if name is None and node is None:
            return
        query = cls.query.filter_by(list=list)
        if name:
            query = query.filter_by(name=name)
        if node:
            query = query.filter_by(node=node)
        item = query.first()
        if item:
            return item
        else:
            item = cls(list=list, name=name, node=node)
            db.session.add(item)
        return item
Ejemplo n.º 5
0
class MapItem(BaseScopedNameMixin, db.Model):
    __tablename__ = 'map_item'
    map_id = db.Column(None, db.ForeignKey('map.id'), nullable=False)
    parent = db.synonym('map')
    url = db.Column(db.Unicode(250), nullable=True)
    latitude = db.Column(db.Numeric(7, 4), nullable=False)
    longitude = db.Column(db.Numeric(7, 4), nullable=False)
    zoomlevel = db.Column(db.Integer, nullable=True)
    marker = db.Column(db.Unicode(80), nullable=True)
    seq = db.Column(db.Integer, nullable=False)

    __table_args__ = (db.UniqueConstraint('map_id', 'name'),)

    @classmethod
    def get_or_new(cls, map, name=None):
        item = cls.query.filter_by(map=map, name=name).first()
        if item is None:
            item = cls(map=map, name=name)
            db.session.add(item)
        return item
Ejemplo n.º 6
0
 def revisions_id(cls):
     return db.Column(db.Integer,
                      db.ForeignKey('revisions.id'),
                      nullable=False)