首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >buildbot不接受我的邮件通知程序的IEMailLookup对象

buildbot不接受我的邮件通知程序的IEMailLookup对象
EN

Stack Overflow用户
提问于 2011-02-01 06:23:55
回答 4查看 880关注 0票数 1

我的组织中有许多人的电子邮件名称与强制名称不同,因此我需要创建一个覆盖getAddress的IEmailLookup派生,以执行我的恶意命令:

(来自我的master.cfg)

代码语言:javascript
复制
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
                                    ))

我尝试了任意数量的排列,但我要么得到:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/buildbot-0.8.3p1-py2.6.egg/buildbot/scripts/runner.py", line 1071, in doCheckConfig
    ConfigLoader(configFileName=configFileName)
  File "/Library/Python/2.6/site-packages/buildbot-0.8.3p1-py2.6.egg/buildbot/scripts/checkconfig.py", line 46, in __init__
    self.loadConfig(configFile, check_synchronously_only=True)
  File "/Library/Python/2.6/site-packages/buildbot-0.8.3p1-py2.6.egg/buildbot/master.py", line 727, in loadConfig
    exec f in localDict
  File "/Users/playbuilder/buildbot/master.cfg", line 207, in <module>
    lookup=maillookup
  File "/Library/Python/2.6/site-packages/buildbot-0.8.3p1-py2.6.egg/buildbot/status/mail.py", line 293, in __init__
    assert interfaces.IEmailLookup.providedBy(lookup)
AssertionError

...or任何其他数量的问题,这取决于我如何尝试实现IEmailLookup接口。

我使用的是buildbot 0.8.3p1和python 2.6.1。

我很少看到如何做到这一点的宝贵的例子,在我的背景下,它们中的每一个都失败了。这里我漏掉了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-22 14:55:46

我刚刚自己解决了这个问题。

首先,您需要添加(在文件顶部的某个位置)

代码语言:javascript
复制
from zope.interface import implements

然后改变

代码语言:javascript
复制
__implements__ = interfaces.IEmailLookup

代码语言:javascript
复制
if implements:
    implements( interfaces.IEmailLookup )
else:
    __implements__ = interfaces.IEmailLookup
票数 2
EN

Stack Overflow用户

发布于 2011-12-20 14:57:11

如果你想从perforce user获取电子邮件,你可以使用这个类:

代码语言:javascript
复制
# .-----------------------.
# | 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

用法如下所示:

代码语言:javascript
复制
c['status'].append(
    MailNotifier(
        sendToInterestedUsers   = True,
        mode                    = 'failing',
        lookup                  = PerforceEmailLookup(
                                        p4port   = "perforce:1666",
                                        p4user   = "buildbot",
                                        p4passwd = "buildbot")))
票数 1
EN

Stack Overflow用户

发布于 2014-03-24 16:17:12

试试这个:

代码语言:javascript
复制
    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)

..。

代码语言:javascript
复制
mn = MailNotifier(..., lookup=lookup_example_email(), extraRecipients=m)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4856829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档