buildbot不接受我的MailNotifier的IEMailLookup对象

2024-10-01 19:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的组织中,许多人的电子邮件名称与perforce名称不同,因此我需要创建一个IEmailLookup派生来重写getAddress来执行我的恶意竞价:

(来自我的主控形状.cfg)在

class MyIEmailLookup:
    from buildbot import interfaces
    __implements__ = interfaces.IEmailLookup

    def getAddresses(user):
        address_dict = {"user1", "user_one@our_domain.com"}
        try:
            address = address_dict[user]
        except KeyError:
            address = user + "@our_domain.com"
        return address

maillookup = MyIEmailLookup()

from buildbot.status import mail

c['status'].append(mail.MailNotifier(....
                                     ....
                                     lookup=maillookup
                                    ))

我尝试过很多种排列方式,但是我得到的结果是:

^{pr2}$

…或其他任何数量的问题,这取决于我如何实现IEmailLookup接口。在

我使用的是buildbot0.8.3p1和python2.6.1。在

我看到了一些宝贵的例子来说明如何做到这一点,但在我的背景下,它们中的每一个都失败了。我错过了什么?在


Tags: fromimport名称comaddressdomainstatusour
3条回答

试试这个:

    from buildbot.interfaces import IEmailLookup
    from buildbot.util import ComparableMixin
    from zope.interface import implements
    class lookup_example_email(ComparableMixin):
        implements(IEmailLookup)
        def getAddress(self,user):
            return "%s@example.com"%(user)

。。。在

^{pr2}$

如果要从perforce user获取电子邮件,可以使用此类:

# .-----------------------.
# | Perforce Email Lookup |
# `-----------------------'

from twisted.internet import defer, utils
from buildbot.util import ComparableMixin
from buildbot.interfaces import IEmailLookup
from zope.interface import implements
import os
import re

class PerforceEmailLookup(ComparableMixin):
    implements(IEmailLookup)

    compare_attrs = ["p4port", "p4user", "p4passwd", "p4bin"]

    env_vars = ["P4CLIENT", "P4PORT", "P4PASSWD", "P4USER",
                "P4CHARSET"]

    def __init__(self,
                 p4port   = None,
                 p4user   = None,
                 p4passwd = None,
                 p4bin    = 'p4'):
        self.p4port   = p4port
        self.p4user   = p4user
        self.p4passwd = p4passwd
        self.p4bin    = p4bin
        self.email_re = re.compile(r"Email:\s+(?P<email>\S+@\S+)\s*$")

    def _get_process_output(self, args):
        env = dict([(e, os.environ.get(e)) for e in self.env_vars if os.environ.get(e)])
        d = utils.getProcessOutput(self.p4bin, args, env)
        return d

    @defer.deferredGenerator    
    def getAddress(self, name):

        if '@' in name:
            yield name
            return

        args = []
        if self.p4port:
            args.extend(['-p', self.p4port])
        if self.p4user:
            args.extend(['-u', self.p4user])
        if self.p4passwd:
            args.extend(['-P', self.p4passwd])
        args.extend(['user', '-o', name])

        wfd = defer.waitForDeferred(self._get_process_output(args))
        yield wfd
        result = wfd.getResult()

        for line in result.split('\n'):
            line = line.strip()
            if not line: continue
            m = self.email_re.match(line)
            if m:
                yield m.group('email')
                return

        yield name

用法如下:

^{pr2}$

我只是自己解决了这个问题。在

首先需要添加(在文件顶部的某个地方)

from zope.interface import implements

然后改变

^{pr2}$

if implements:
    implements( interfaces.IEmailLookup )
else:
    __implements__ = interfaces.IEmailLookup

相关问题 更多 >

    热门问题