Frage

Ich brauche Zustand der letzten Build (Erfolg / Misserfolg) zu bestimmen, und ich tue es wie folgt aus:

report_url = 'http://.../ViewLatestBuildReport.aspx'
success_marker = '<td class="header-title" colspan="2">BUILD SUCCESSFUL</td>'
page = urllib.urlopen(report_url)
if all(success_marker not in line for line in page):
  # build is not good, do something
  ...

Das ist aber verschwenderisch (Lasten gesamte HTML-Seite), fehleranfällig (I lief bereits in ein Byte / Unicode-Fehler) und zerbrechlich.

War es hilfreich?

Lösung

OK, ich dachte, irgendwie es aus. CCTray Spuren Baustatus durch Abfragen XmlServerReport.aspx, das ist (Überraschung!) XML.

So ist meine aktuelle Lösung sieht wie folgt aus:

import sys, urllib, xml.sax, xml.sax.handler

report_url = 'http://.../CCNET/XmlServerReport.aspx'

class FoundBuildStatus(Exception):
  def __init__(self, status):
    self.build_status = status

class Handler(xml.sax.handler.ContentHandler):
  def startElement(self, name, attrs):
    if name == 'Project' and attrs.get('name') == '...':
      status = attrs.get('lastBuildStatus')
      if status:
        raise FoundBuildStatus(status)

page = urllib.urlopen(report_url)
try:
  xml.sax.parse(page, Handler())
except FoundBuildStatus, ex:
  if ex.build_status == 'Failure':
    # build is not good, do something
    ...

In meinem Umfeld ist es etwa 8-mal schneller als anfängliche HTML-basierte Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top