Blame pagure/hooks/fedmsg.py

Pierre-Yves Chibon 4cce24
# -*- coding: utf-8 -*-
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
"""
Pierre-Yves Chibon 2c3a3f
 (c) 2015-2016 - Copyright Red Hat Inc
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
 Authors:
Pierre-Yves Chibon 4cce24
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
"""
Pierre-Yves Chibon 4cce24
Aurélien Bompard dcf6f6
from __future__ import unicode_literals
Aurélien Bompard dcf6f6
Pierre-Yves Chibon 4cce24
import sqlalchemy as sa
Pierre-Yves Chibon 4cce24
import wtforms
Pierre-Yves Chibon 5a5352
try:
Pierre-Yves Chibon 2011e2
    from flask_wtf import FlaskForm
Abhijeet Kasurde f4bf50
except ImportError:
Pierre-Yves Chibon 5a5352
    from flask_wtf import Form as FlaskForm
Pierre-Yves Chibon 4cce24
from sqlalchemy.orm import relation
Pierre-Yves Chibon 4cce24
from sqlalchemy.orm import backref
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon b1fc61
from pagure.hooks import BaseHook
Pierre-Yves Chibon 4cce24
from pagure.lib.model import BASE, Project
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
class FedmsgTable(BASE):
Pierre-Yves Chibon 4cce24
    """ Stores information about the fedmsg hook deployed on a project.
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    Table -- hook_fedmsg
Pierre-Yves Chibon 4cce24
    """
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    __tablename__ = 'hook_fedmsg'
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    id = sa.Column(sa.Integer, primary_key=True)
Pierre-Yves Chibon 4cce24
    project_id = sa.Column(
Pierre-Yves Chibon 4cce24
        sa.Integer,
Pierre-Yves Chibon 145fcb
        sa.ForeignKey(
Pierre-Yves Chibon bb67e0
            'projects.id', onupdate='CASCADE', ondelete='CASCADE'),
Pierre-Yves Chibon 4cce24
        nullable=False,
Pierre-Yves Chibon 4cce24
        unique=True,
Pierre-Yves Chibon 4cce24
        index=True)
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    active = sa.Column(sa.Boolean, nullable=False, default=False)
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    project = relation(
Pierre-Yves Chibon 4cce24
        'Project', remote_side=[Project.id],
Pierre-Yves Chibon 4cce24
        backref=backref(
Pierre-Yves Chibon 4cce24
            'fedmsg_hook', cascade="delete, delete-orphan",
Pierre-Yves Chibon 78837b
            single_parent=True, uselist=False)
farhaanbukhsh 9b97b4
    )
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 5a5352
class FedmsgForm(FlaskForm):
Pierre-Yves Chibon 4cce24
    ''' Form to configure the fedmsg hook. '''
Pierre-Yves Chibon 4cce24
    active = wtforms.BooleanField(
Pierre-Yves Chibon 4cce24
        'Active',
Pierre-Yves Chibon 4cce24
        [wtforms.validators.Optional()]
Pierre-Yves Chibon 4cce24
    )
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 8103ab
DESCRIPTION = '''
Pierre-Yves Chibon 8103ab
This hook pushes commit notification to the fedmsg bus to be consumed by other
Pierre-Yves Chibon 8103ab
applications.
Pierre-Yves Chibon 8103ab
Pierre-Yves Chibon 8103ab
It is different from the fedmsg setting present in the project options block
Pierre-Yves Chibon 8103ab
which publishes notifications about events happening in the project via
Pierre-Yves Chibon 8103ab
pagure's (web) user interface, for example: new tickets, new comments, new
Pierre-Yves Chibon 8103ab
pull-requests and so on.
Pierre-Yves Chibon 8103ab
This hook on the other only acts on commits.
Pierre-Yves Chibon 8103ab
'''
Pierre-Yves Chibon 8103ab
Pierre-Yves Chibon 8103ab
Pierre-Yves Chibon 4cce24
class Fedmsg(BaseHook):
Pierre-Yves Chibon 4cce24
    ''' Fedmsg hooks. '''
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    name = 'Fedmsg'
Pierre-Yves Chibon 8103ab
    description = DESCRIPTION
Pierre-Yves Chibon 4cce24
    form = FedmsgForm
Pierre-Yves Chibon 4cce24
    db_object = FedmsgTable
Pierre-Yves Chibon 4cce24
    backref = 'fedmsg_hook'
Pierre-Yves Chibon 4cce24
    form_fields = ['active']
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    @classmethod
Pierre-Yves Chibon 4cce24
    def install(cls, project, dbobj):
Pierre-Yves Chibon 4cce24
        ''' Method called to install the hook for a project.
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
        :arg project: a ``pagure.model.Project`` object to which the hook
Pierre-Yves Chibon 4cce24
            should be installed
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 638bb4
        This no longer does anything as the code has now been merged into
Pierre-Yves Chibon 638bb4
        the default hook. So we still need this for people to opt in/out of
Pierre-Yves Chibon 638bb4
        sending fedmsg notifications on commit push, but other than that
Pierre-Yves Chibon 638bb4
        this plugin doesn't do much anymore.
Pierre-Yves Chibon 638bb4
Pierre-Yves Chibon 4cce24
        '''
Pierre-Yves Chibon 638bb4
        pass
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
    @classmethod
Pierre-Yves Chibon 4cce24
    def remove(cls, project):
Pierre-Yves Chibon 4cce24
        ''' Method called to remove the hook of a project.
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
        :arg project: a ``pagure.model.Project`` object to which the hook
Pierre-Yves Chibon 4cce24
            should be installed
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 638bb4
        This no longer does anything as the code has now been merged into
Pierre-Yves Chibon 638bb4
        the default hook. So we still need this for people to opt in/out of
Pierre-Yves Chibon 638bb4
        sending fedmsg notifications on commit push, but other than that
Pierre-Yves Chibon 638bb4
        this plugin doesn't do much anymore.
Pierre-Yves Chibon 638bb4
Pierre-Yves Chibon 4cce24
        '''
Pierre-Yves Chibon 638bb4
        pass