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