pagure-new/pagure/hooks/irc.py

139 lines
3.5 KiB
Python
Raw Normal View History

2016-09-21 23:21:07 +00:00
# -*- coding: utf-8 -*-
"""
(c) 2014-2016 - Copyright Red Hat Inc
Authors:
Pierre-Yves Chibon <pingou@pingoured.fr>
"""
import os
import flask_wtf as wtf
import sqlalchemy as sa
import pygit2
import wtforms
from sqlalchemy.orm import relation
from sqlalchemy.orm import backref
from pagure.hooks import BaseHook, RequiredIf
from pagure.lib.model import BASE, Project
from pagure import get_repo_path
class IrcTable(BASE):
""" Stores information about the irc hook deployed on a project.
Table -- hook_irc
"""
__tablename__ = 'hook_irc'
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)
server = sa.Column(sa.Text, nullable=False)
port = sa.Column(sa.Text, nullable=False)
room = sa.Column(sa.Text, nullable=False)
nick = sa.Column(sa.Text, nullable=True, default=None)
nick_pass = sa.Column(sa.Text, nullable=True, default=None)
active = sa.Column(sa.Boolean, nullable=False, default=False)
join = sa.Column(sa.Boolean, nullable=False, default=True)
ssl = sa.Column(sa.Boolean, nullable=False, default=True)
project = relation(
'Project', remote_side=[Project.id],
backref=backref(
'irc_hook', cascade="delete, delete-orphan",
single_parent=True, uselist=False)
)
class IrcForm(wtf.Form):
''' Form to configure the irc hook. '''
server = wtforms.TextField(
'Server <span class="error">*</span>',
[RequiredIf('active')]
)
port = wtforms.TextField(
'Port <span class="error">*</span>',
[RequiredIf('active')]
)
room = wtforms.TextField(
'Room <span class="error">*</span>',
[RequiredIf('active')]
)
nick = wtforms.TextField(
'Nick',
[wtforms.validators.Optional()]
)
nick_pass = wtforms.TextField(
'Nickserv Password',
[wtforms.validators.Optional()]
)
active = wtforms.BooleanField(
'Active',
[wtforms.validators.Optional()]
)
join = wtforms.BooleanField(
'Message Without Join',
[wtforms.validators.Optional()]
)
ssl = wtforms.BooleanField(
'Use SSL',
[wtforms.validators.Optional()]
)
class Hook(BaseHook):
''' IRC hooks. '''
name = 'IRC'
description = 'This hook sends message to the mention channel regarding'\
' the changes made by the pushes to the git repository.'
form = IrcForm
db_object = IrcTable
backref = 'irc_hook'
form_fields = [
'server', 'port', 'room', 'nick', 'nick_pass', 'active', 'join',
'ssl'
]
@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
'''
repopaths = [get_repo_path(project)]
repo_obj = pygit2.Repository(repopaths[0])
# Configure the hook
# repo_obj.config.set_multivar()
# Install the hook itself
# cls.base_install(repopaths, dbobj, 'irc', 'git_irc.py')
@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
'''
repopaths = [get_repo_path(project)]
# cls.base_remove(repopaths, 'irc')