كيفية الوصول إلى صيغة XML التقارير CruiseContol.NET لوحة ويب (على HTTP)؟
-
04-07-2019 - |
سؤال
ولست بحاجة لتحديد حالة بناء الماضي (نجاح / فشل)، وأنا أفعل مثل هذا:
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)، (جريت بالفعل إلى بايت / علة يونيكود) وهشة عرضة للخطأ.
المحلول
وOK، I نوع من أحسب بها. 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
...
في بيئتي فهو يقع في حوالي 8 مرات أسرع من حل يستند إلى HTML الأولي.
لا تنتمي إلى StackOverflow