CruiseContol.net 웹 대시 보드 보고서 (HTTP를 통해)의 XML 버전에 액세스하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/239587

문제

마지막 빌드 상태 (성공/실패)의 상태를 결정해야하며 다음과 같이합니다.

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
  ...

그러나 이것은 낭비 (전체 HTML 페이지로드), 오류가 발생하기 쉬우 며 (이미 바이트/유니 코드 버그에 부딪 쳤음) 깨지기 쉬운다.

도움이 되었습니까?

해결책

좋아, 나는 그것을 알아 냈다. CCTray는 폴링을 통해 빌드 상태를 추적합니다 XmlServerReport.aspx, (놀라움!) XML입니다.

내 현재 솔루션은 다음과 같습니다.

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
    ...

내 환경에서는 초기 HTML 기반 솔루션보다 약 8 배 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top