Python buildbot不';t接受我的邮件通知程序';IEMailLookup对象
我所在组织中的许多人的电子邮件名称与perforce名称不同,因此我需要创建一个IEmailLookup派生,以覆盖getAddress来执行我的恶意竞价: (来自我的主人.cfg) 我尝试过任何数量的排列,但我要么得到:Python buildbot不';t接受我的邮件通知程序';IEMailLookup对象,python,buildbot,mailnotifier,Python,Buildbot,Mailnotifier,我所在组织中的许多人的电子邮件名称与perforce名称不同,因此我需要创建一个IEmailLookup派生,以覆盖getAddress来执行我的恶意竞价: (来自我的主人.cfg) 我尝试过任何数量的排列,但我要么得到: Traceback (most recent call last): File "/Library/Python/2.6/site-packages/buildbot-0.8.3p1-py2.6.egg/buildbot/scripts/runner.py", line
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
回溯(最近一次呼叫最后一次):
doCheckConfig中的文件“/Library/Python/2.6/site packages/buildbot-0.8.3p1-py2.6.egg/buildbot/scripts/runner.py”,第1071行
ConfigLoader(configFileName=configFileName)
文件“/Library/Python/2.6/site packages/buildbot-0.8.3p1-py2.6.egg/buildbot/scripts/checkconfig.py”,第46行,在__
self.loadConfig(configFile,同步检查\u仅\u=True)
loadConfig中的文件“/Library/Python/2.6/site packages/buildbot-0.8.3p1-py2.6.egg/buildbot/master.py”,第727行
localDict中的execf
文件“/Users/playbuilder/buildbot/master.cfg”,第207行,在
查找=邮件查找
文件“/Library/Python/2.6/site packages/buildbot-0.8.3p1-py2.6.egg/buildbot/status/mail.py”,第293行,在__
assert interfaces.IEmailLookup.providedBy(查找)
断言错误
…或任何其他数量的问题,取决于我如何尝试实现IEmailLookup接口
我正在使用buildbot 0.8.3p1和python 2.6.1
我看到了一些关于如何做到这一点的宝贵例子,在我的背景下,每一个都失败了。我在这里遗漏了什么?我刚刚自己解决了这个问题 首先需要添加(文件顶部的某个位置) 然后改变
__implements__ = interfaces.IEmailLookup
到
如果要从perforce用户获取电子邮件,可以使用以下类:
# .-----------------------.
# | 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
试试这个:
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)
下面是我使用的一段代码,它与python3.6中的buildbot
2.3.1
一起工作
from buildbot.interfaces import IEmailLookup
from buildbot.util import ComparableMixin
from zope.interface import implementer
@implementer(IEmailLookup)
class EmailMap(ComparableMixin):
def getAddress(self, name):
return f'{name}@xxxxx'
+1作为输入,但我早已放弃buildbot,转而使用Jenkins。我对这个决定非常满意。
implements(interfaces.IEmailLookup)
就足够了,如果implements,没有理由使用。(如果导入实现,那么它将始终存在。在任何情况下,zope.interface都是twisted和buildbot的硬依赖项。
# .-----------------------.
# | 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
c['status'].append(
MailNotifier(
sendToInterestedUsers = True,
mode = 'failing',
lookup = PerforceEmailLookup(
p4port = "perforce:1666",
p4user = "buildbot",
p4passwd = "buildbot")))
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)
mn = MailNotifier(..., lookup=lookup_example_email(), extraRecipients=m)
from buildbot.interfaces import IEmailLookup
from buildbot.util import ComparableMixin
from zope.interface import implementer
@implementer(IEmailLookup)
class EmailMap(ComparableMixin):
def getAddress(self, name):
return f'{name}@xxxxx'