<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I'm trying to do something similar to the Console page (grouping by tags) in an HtmlResource subclass and my code is throwing an exception inside master.py:<div class=""><br class=""></div><div class="">I create a list representing a tag and then call status.getBuilderNames( tags=[tag] ) on a <buildbot.status.builder.BuilderStatus instance at 0x10954f2d8>.  It throws the exception you see below.  I just upgraded my master from 0.8.8 to 0.8.12 so is there something in the Builder objects that could cause this problem?  The only upgrade warning I've got left is:</div><div class=""><br class=""></div><div class=""><div class="">2016-03-13 15:19:32-0700 [-] /Users/buildbot/master/master.cfg:261: exceptions.DeprecationWarning: buildbot.steps.source.SVN was deprecated in Buildbot 0.8.9: The slave-side SVN step is deprecated and will be removed in a future version.  Please switch to the corresponding master-side step.</div></div><div class=""><br class=""></div><div class="">thanks,</div><div class="">stephen</div><div class=""> <div class=""><b style="font-family: -webkit-standard;" class="">web.Server Traceback (most recent call last):</b><span style="font-family: -webkit-standard; font-size: medium;" class=""></span><div style="font-family: Verdana, Arial, helvetica, sans-serif;" class=""><div class="error" style="color: red; font-weight: bold;">exceptions.AttributeError: Builder instance has no attribute 'matchesAnyTag'</div><div class="stackTrace"><div class="frame" style="padding: 1em; background-color: white; border-bottom-width: thin; border-bottom-color: black; border-bottom-style: dashed; border-top-width: thin; border-top-color: black; border-top-style: dashed;"><div class="location">/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/defer.py:134 in <span class="function" style="font-weight: bold; font-family: 'Courier New', courier, monospace;">maybeDeferred</span></div><div class="snippet" style="margin-bottom: 0.5em; margin-left: 1em; background-color: rgb(255, 255, 221);"><div class="snippetLine"><span class="lineno">133</span> <code class="code">   try:</code></div><div class="snippetHighlightLine" style="color: red;"><span class="lineno">134</span> <code class="code">       result = f(*args, **kw)</code></div><div class="snippetLine"><span class="lineno">135</span> <code class="code">   except:</code></div></div></div><div class="frame" style="padding: 1em; background-color: white; border-bottom-width: thin; border-bottom-color: black; border-bottom-style: dashed;"><div class="location">/Library/Python/2.7/site-packages/buildbot-0.8.12-py2.7.egg/buildbot/status/web/base.py:391 in <span class="function" style="font-weight: bold; font-family: 'Courier New', courier, monospace;"><lambda></span></div><div class="snippet" style="margin-bottom: 0.5em; margin-left: 1em; background-color: rgb(255, 255, 221);"><div class="snippetLine"><span class="lineno">390</span> <code class="code">           if allowed or path_always_viewable(request):</code></div><div class="snippetHighlightLine" style="color: red;"><span class="lineno">391</span> <code class="code">               return defer.maybeDeferred(lambda: self.content(request, ctx))</code></div><div class="snippetLine"><span class="lineno">392</span> <code class="code">           else:</code></div></div></div><div class="frame" style="padding: 1em; background-color: white; border-bottom-width: thin; border-bottom-color: black; border-bottom-style: dashed;"><div class="location">MonitorStatusResource.py:59 in <span class="function" style="font-weight: bold; font-family: 'Courier New', courier, monospace;">content</span></div><div class="snippet" style="margin-bottom: 0.5em; margin-left: 1em; background-color: rgb(255, 255, 221);"><div class="snippetLine"><span class="lineno">58</span> <code class="code">for category in categories:</code></div><div class="snippetHighlightLine" style="color: red;"><span class="lineno">59</span> <code class="code">names = status.getBuilderNames( tags=[category] )</code></div><div class="snippetLine"><span class="lineno">60</span> <code class="code">builders[category] = []</code></div></div></div><div class="frame" style="padding: 1em; background-color: white; border-bottom-width: thin; border-bottom-color: black; border-bottom-style: dashed;"><div class="location">/Library/Python/2.7/site-packages/buildbot-0.8.12-py2.7.egg/buildbot/status/master.py:244 in <span class="function" style="font-weight: bold; font-family: 'Courier New', courier, monospace;">getBuilderNames</span></div><div class="snippet" style="margin-bottom: 0.5em; margin-left: 1em; background-color: rgb(255, 255, 221);"><div class="snippetLine"><span class="lineno">243</span> <code class="code">           bldr = self.botmaster.builders[name]</code></div><div class="snippetHighlightLine" style="color: red;"><span class="lineno">244</span> <code class="code">           if bldr.matchesAnyTag(tags):</code></div><div class="snippetLine"><span class="lineno">245</span> <code class="code">               l.append(name)</code></div></div></div></div><div class="error" style="color: red; font-weight: bold;">exceptions.AttributeError: Builder instance has no attribute 'matchesAnyTag'</div></div></div><div class=""><br class=""></div><div class="">master.py:232</div><div class=""><br class=""></div><div class=""><div class="">    def getBuilderNames(self, tags=None, categories=None):</div><div class="">        if categories is not None:</div><div class="">            # Categories is deprecated; pretend they said "tags".</div><div class="">            tags = categories</div><div class=""><br class=""></div><div class="">        if tags is None:</div><div class="">            return util.naturalSort(self.botmaster.builderNames)  # don't let them break it</div><div class=""><br class=""></div><div class="">        l = []</div><div class="">        # respect addition order</div><div class="">        for name in self.botmaster.builderNames:</div><div class="">            bldr = self.botmaster.builders[name]</div><div class="">            if bldr.matchesAnyTag(tags):<span class="Apple-tab-span" style="white-space:pre">        </span><-- HERE</div><div class="">                l.append(name)</div><div class="">        return util.naturalSort(l)</div></div><div class=""><br class=""></div></div></body></html>