author | John Sonnenschein <John.Sonnenschein@Sun.COM> |
Thu, 20 Nov 2008 11:38:28 -0800 | |
changeset 8174 | 29be171fb93b |
parent 8042 | 54a2500a85d8 |
child 9920 | 9a117fecafb3 |
permissions | -rw-r--r-- |
7078 | 1 |
#! /usr/bin/python |
2 |
# |
|
3 |
# CDDL HEADER START |
|
4 |
# |
|
5 |
# The contents of this file are subject to the terms of the |
|
6 |
# Common Development and Distribution License (the "License"). |
|
7 |
# You may not use this file except in compliance with the License. |
|
8 |
# |
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
|
10 |
# or http://www.opensolaris.org/os/licensing. |
|
11 |
# See the License for the specific language governing permissions |
|
12 |
# and limitations under the License. |
|
13 |
# |
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
|
19 |
# |
|
20 |
# CDDL HEADER END |
|
21 |
# |
|
22 |
||
23 |
# |
|
24 |
# Copyright 2008 Sun Microsystems, Inc. All rights reserved. |
|
25 |
# Use is subject to license terms. |
|
26 |
# |
|
27 |
||
28 |
# |
|
29 |
# Various database lookup classes/methods, i.e.: |
|
30 |
# * monaco |
|
31 |
# * bugs.opensolaris.org (b.o.o.) |
|
32 |
# * opensolaris.org/cgi/arc.py (for ARC) |
|
33 |
# |
|
34 |
||
35 |
import re |
|
36 |
import urllib |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
37 |
import urllib2 |
7078 | 38 |
import htmllib |
39 |
import os |
|
40 |
from socket import socket, AF_INET, SOCK_STREAM |
|
41 |
||
42 |
from onbld.Checks import onSWAN |
|
43 |
||
44 |
class BugException(Exception): |
|
45 |
def __init__(self, data=''): |
|
46 |
self.data = data |
|
47 |
Exception.__init__(self, data) |
|
48 |
||
49 |
def __str__(self): |
|
50 |
return "Unknown error: %s" % self.data |
|
51 |
||
52 |
class NonExistentBug(BugException): |
|
53 |
def __str__(self): |
|
54 |
return "Bug %s does not exist" % self.data |
|
55 |
||
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
56 |
class BugDBException(Exception): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
57 |
def __init__(self, data=''): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
58 |
self.data = data |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
59 |
Exception.__init__(self, data) |
7078 | 60 |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
61 |
def __str__(self): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
62 |
return "Unknown bug database: %s" % self.data |
7078 | 63 |
|
64 |
class BugDB(object): |
|
65 |
"""Lookup change requests. |
|
66 |
||
67 |
Object can be used on or off of SWAN, using either monaco or |
|
68 |
bugs.opensolaris.org as a database. |
|
69 |
||
70 |
Usage: |
|
71 |
bdb = BugDB() |
|
72 |
r = bdb.lookup("6455550") |
|
73 |
print r["6455550"]["synopsis"] |
|
74 |
r = bdb.lookup(["6455550", "6505625"]) |
|
75 |
print r["6505625"]["synopsis"] |
|
76 |
""" |
|
77 |
||
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
78 |
def __init__(self, priority = ("bugster",), forceBoo = False): |
7078 | 79 |
"""Create a BugDB object. |
80 |
||
81 |
Keyword argument: |
|
82 |
forceBoo: use b.o.o even from SWAN (default=False) |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
83 |
priority: use bug databases in this order |
7078 | 84 |
""" |
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
85 |
self.__validBugDB = ["bugster"] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
86 |
self.__onSWAN = not forceBoo and onSWAN() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
87 |
for database in priority: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
88 |
if database not in self.__validBugDB: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
89 |
raise BugDBException, database |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
90 |
self.__priority = priority |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
91 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
92 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
93 |
def __boobug(self, cr): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
94 |
cr = str(cr) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
95 |
url = "http://bugs.opensolaris.org/view_bug.do" |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
96 |
req = urllib2.Request(url, urllib.urlencode({"bug_id": cr})) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
97 |
results = {} |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
98 |
try: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
99 |
data = urllib2.urlopen(req).readlines() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
100 |
except urllib2.HTTPError, e: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
101 |
if e.code != 404: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
102 |
print "ERROR: HTTP error at " + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
103 |
req.get_full_url() + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
104 |
" got error: " + str(e.code) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
105 |
raise e |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
106 |
else: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
107 |
raise NonExistentBug |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
108 |
except urllib2.URLError, e: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
109 |
print "ERROR: could not connect to " + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
110 |
req.get_full_url() + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
111 |
' got error: "' + e.reason[1] + '"' |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
112 |
raise e |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
113 |
htmlParser = htmllib.HTMLParser(None) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
114 |
metaHtmlRe = re.compile(r'^<meta name="([^"]+)" content="([^"]*)">$') |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
115 |
for line in data: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
116 |
m = metaHtmlRe.search(line) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
117 |
if not m: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
118 |
continue |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
119 |
val = urllib.unquote(m.group(2)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
120 |
htmlParser.save_bgn() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
121 |
htmlParser.feed(val) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
122 |
results[m.group(1)] = htmlParser.save_end() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
123 |
htmlParser.close() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
124 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
125 |
if "synopsis" not in results: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
126 |
raise NonExistentBug(cr) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
127 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
128 |
results["cr_number"] = cr |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
129 |
results["sub_category"] = results.pop("subcategory") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
130 |
results["status"] = results.pop("state") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
131 |
results["date_submitted"] = results.pop("submit_date") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
132 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
133 |
return results |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
134 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
135 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
136 |
def __monaco(self, crs): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
137 |
"""Return all info for requested change reports. |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
138 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
139 |
Argument: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
140 |
crs: list of change request ids |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
141 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
142 |
Returns: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
143 |
Dictionary, mapping CR=>dictionary, where the nested dictionary |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
144 |
is a mapping of field=>value |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
145 |
""" |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
146 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
147 |
# |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
148 |
# We request synopsis last, and split on only |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
149 |
# the number of separators that we expect to |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
150 |
# see such that a | in the synopsis doesn't |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
151 |
# throw us out of whack. |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
152 |
# |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
153 |
monacoFields = [ "cr_number", "category", "sub_category", |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
154 |
"area", "release", "build", "responsible_manager", |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
155 |
"responsible_engineer", "priority", "status", "sub_status", |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
156 |
"submitted_by", "date_submitted", "synopsis" ] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
157 |
cmd = [] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
158 |
cmd.append("set What = cr." + ', cr.'.join(monacoFields)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
159 |
cmd.append("") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
160 |
cmd.append("set Which = cr.cr_number in (" + ','.join(crs) +")") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
161 |
cmd.append("") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
162 |
cmd.append("set FinalClauses = order by cr.cr_number") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
163 |
cmd.append("") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
164 |
cmd.append("doMeta genQuery cr") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
165 |
url = "http://hestia.sfbay.sun.com/cgi-bin/expert?format=" |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
166 |
url += "Pipe-delimited+text;Go=2;no_header=on;cmds=" |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
167 |
url += urllib.quote_plus("\n".join(cmd)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
168 |
results = {} |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
169 |
try: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
170 |
data = urllib2.urlopen(url).readlines() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
171 |
except urllib2.HTTPError, e: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
172 |
print "ERROR: HTTP error at " + url + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
173 |
" got error: " + str(e.code) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
174 |
raise e |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
175 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
176 |
except urllib2.URLError, e: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
177 |
print "ERROR: could not connect to " + url + \ |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
178 |
' got error: "' + e.reason[1] + '"' |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
179 |
raise e |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
180 |
for line in data: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
181 |
line = line.rstrip('\n') |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
182 |
values = line.split('|', len(monacoFields) - 1) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
183 |
v = 0 |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
184 |
cr = values[0] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
185 |
results[cr] = {} |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
186 |
for field in monacoFields: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
187 |
results[cr][field] = values[v] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
188 |
v += 1 |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
189 |
return results |
7078 | 190 |
|
191 |
def lookup(self, crs): |
|
192 |
"""Return all info for requested change reports. |
|
193 |
||
194 |
Argument: |
|
195 |
crs: one change request id (may be integer, string, or list), |
|
196 |
or multiple change request ids (must be a list) |
|
197 |
||
198 |
Returns: |
|
199 |
Dictionary, mapping CR=>dictionary, where the nested dictionary |
|
200 |
is a mapping of field=>value |
|
201 |
""" |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
202 |
results = {} |
7078 | 203 |
if not isinstance(crs, list): |
204 |
crs = [str(crs)] |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
205 |
for database in self.__priority: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
206 |
if database == "bugster": |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
207 |
if self.__onSWAN: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
208 |
results.update(self.__monaco(crs)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
209 |
# else we're off-swan and querying via boo, which we can |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
210 |
# only do one bug at a time |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
211 |
else: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
212 |
for cr in crs: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
213 |
cr = str(cr) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
214 |
try: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
215 |
results[cr] = self.__boobug(cr) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
216 |
except NonExistentBug: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
217 |
continue |
7078 | 218 |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
219 |
# the CR has already been found by one bug database |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
220 |
# so don't bother looking it up in the others |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
221 |
for cr in crs: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
222 |
if cr in results: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
223 |
crs.remove(cr) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
224 |
|
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
225 |
return results |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
226 |
#################################################################### |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
227 |
def ARC(arclist): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
228 |
opts = {} |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
229 |
url = "http://opensolaris.org/cgi/arc.py" |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
230 |
opts["n"] = str(len(arclist)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
231 |
for i, arc in enumerate(arclist): |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
232 |
arc, case = arc |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
233 |
opts["arc" + str(i)] = arc |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
234 |
opts["case" + str(i)] = case |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
235 |
req = urllib2.Request(url, urllib.urlencode(opts)) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
236 |
try: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
237 |
data = urllib2.urlopen(req).readlines() |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
238 |
except urllib2.HTTPError, e: |
8174
29be171fb93b
6773896 hg pbchk throws exception when webrti disappears
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
8042
diff
changeset
|
239 |
print "ERROR: HTTP error at " + req.get_full_url() + \ |
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
240 |
" got error: " + str(e.code) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
241 |
raise e |
7078 | 242 |
|
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
243 |
except urllib2.URLError, e: |
8174
29be171fb93b
6773896 hg pbchk throws exception when webrti disappears
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
8042
diff
changeset
|
244 |
print "ERROR: could not connect to " + req.get_full_url() + \ |
8042
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
245 |
' got error: "' + e.reason[1] + '"' |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
246 |
raise e |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
247 |
ret = {} |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
248 |
for line in data: |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
249 |
oneline = line.rstrip('\n') |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
250 |
fields = oneline.split('|') |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
251 |
# check if each is valid ( fields[0]::validity ) |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
252 |
if fields[0] != "0": |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
253 |
continue |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
254 |
arc, case = fields[1].split(" ") |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
255 |
ret[(arc, case)] = fields[2] |
54a2500a85d8
6750617 un-MacGyver BugDB lookups
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7764
diff
changeset
|
256 |
return ret |
7078 | 257 |
|
258 |
#################################################################### |
|
259 |
||
260 |
# Pointers to the webrti server hostname & port to use |
|
261 |
# Using it directly is probably not *officially* supported, so we'll |
|
262 |
# have a pointer to the official `webrticli` command line interface |
|
263 |
# if using a direct socket connection fails for some reason, so we |
|
264 |
# have a fallback |
|
265 |
WEBRTI_HOST = 'webrti.sfbay.sun.com' |
|
266 |
WEBRTI_PORT = 9188 |
|
7764
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
267 |
WEBRTICLI = '/net/onnv.sfbay.sun.com/export/onnv-gate/public/bin/webrticli' |
7078 | 268 |
|
269 |
||
270 |
class RtiException(Exception): |
|
271 |
def __init__(self, data=''): |
|
272 |
self.data = data |
|
273 |
Exception.__init__(self, data) |
|
274 |
||
275 |
def __str__(self): |
|
276 |
return "Unknown error: %s" % self.data |
|
277 |
||
278 |
class RtiCallFailed(RtiException): |
|
279 |
def __str__(self): |
|
280 |
return "Unable to call webrti: %s" % self.data |
|
281 |
||
282 |
class RtiSystemProblem(RtiException): |
|
283 |
def __str__(self): |
|
284 |
return "RTI status cannot be determined: %s" % self.data |
|
285 |
||
286 |
class RtiIncorrectCR(RtiException): |
|
287 |
def __str__(self): |
|
288 |
return "Incorrect CR number specified: %s" % self.data |
|
289 |
||
290 |
class RtiNotFound(RtiException): |
|
291 |
def __str__(self): |
|
292 |
return "RTI not found: %s" % self.data |
|
293 |
||
294 |
class RtiNeedConsolidation(RtiException): |
|
295 |
def __str__(self): |
|
296 |
return "More than one consolidation has this CR: %s" % self.data |
|
297 |
||
298 |
class RtiBadGate(RtiException): |
|
299 |
def __str__(self): |
|
300 |
return "Incorrect gate name specified: %s" % self.data |
|
301 |
||
302 |
class RtiOffSwan(RtiException): |
|
303 |
def __str__(self): |
|
304 |
return "RTI status checks need SWAN access: %s" % self.data |
|
305 |
||
306 |
WEBRTI_ERRORS = { |
|
307 |
'1': RtiSystemProblem, |
|
308 |
'2': RtiIncorrectCR, |
|
309 |
'3': RtiNotFound, |
|
310 |
'4': RtiNeedConsolidation, |
|
311 |
'5': RtiBadGate, |
|
312 |
} |
|
313 |
||
314 |
# Our Rti object which we'll use to represent an Rti query |
|
315 |
# It's really just a wrapper around the Rti connection, and attempts |
|
316 |
# to establish a direct socket connection and query the webrti server |
|
317 |
# directly (thus avoiding a system/fork/exec call). If it fails, it |
|
318 |
# falls back to the webrticli command line client. |
|
319 |
||
320 |
returnCodeRe = re.compile(r'.*RETURN_CODE=(\d+)') |
|
321 |
class Rti: |
|
322 |
"""Lookup an RTI. |
|
323 |
||
324 |
Usage: |
|
325 |
r = Rti("6640538") |
|
326 |
print r.rtiNumber(); |
|
327 |
""" |
|
328 |
||
329 |
def __init__(self, cr, gate=None, consolidation=None): |
|
330 |
"""Create an Rti object for the specified change request. |
|
331 |
||
332 |
Argument: |
|
333 |
cr: change request id |
|
334 |
||
335 |
Keyword arguments, to limit scope of RTI search: |
|
336 |
gate: path to gate workspace (default=None) |
|
337 |
consolidation: consolidation name (default=None) |
|
338 |
""" |
|
339 |
||
340 |
bufSz = 1024 |
|
341 |
addr = (WEBRTI_HOST, WEBRTI_PORT) |
|
342 |
# If the passed 'cr' was given as an int, then wrap it |
|
343 |
# into a string to make our life easier |
|
344 |
if isinstance(cr, int): |
|
345 |
cr = str(cr) |
|
346 |
self.__queryCr = cr |
|
347 |
self.__queryGate = gate |
|
348 |
self.__queryConsolidation = consolidation |
|
349 |
||
7764
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
350 |
self.__webRtiOutput = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
351 |
self.__mainCR = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
352 |
self.__rtiNumber = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
353 |
self.__consolidation = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
354 |
self.__project = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
355 |
self.__status = [] |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
356 |
self.__rtiType = [] |
7078 | 357 |
try: |
358 |
# try to use a direct connection to the |
|
359 |
# webrti server first |
|
360 |
sock = socket(AF_INET, SOCK_STREAM) |
|
361 |
sock.connect(addr) |
|
362 |
command = "WEBRTICLI/1.0\nRTIstatus\n%s\n" % cr |
|
363 |
if consolidation: |
|
364 |
command += "-c\n%s\n" % consolidation |
|
365 |
if gate: |
|
366 |
command += "-g\n%s\n" % gate |
|
367 |
command += "\n" |
|
368 |
sock.send(command) |
|
369 |
dataList = [] |
|
370 |
# keep receiving data from the socket until the |
|
371 |
# server closes the connection |
|
372 |
stillReceiving = True |
|
373 |
while stillReceiving: |
|
374 |
dataPiece = sock.recv(bufSz) |
|
375 |
if dataPiece: |
|
376 |
dataList.append(dataPiece) |
|
377 |
else: |
|
378 |
stillReceiving = False |
|
379 |
# create the lines, skipping the first |
|
380 |
# ("WEBRTCLI/1.0\n") |
|
381 |
data = '\n'.join(''.join(dataList).split('\n')[1:]) |
|
382 |
except: |
|
383 |
if not onSWAN(): |
|
384 |
raise RtiOffSwan(cr) |
|
385 |
||
386 |
if not os.path.exists(WEBRTICLI): |
|
387 |
raise RtiCallFailed('not found') |
|
388 |
||
389 |
# fallback to the "supported" webrticli interface |
|
390 |
command = WEBRTICLI |
|
391 |
if consolidation: |
|
392 |
command += " -c " + consolidation |
|
393 |
if gate: |
|
394 |
command += " -g " + gate |
|
395 |
command += " RTIstatus " + cr |
|
396 |
||
397 |
try: |
|
398 |
cliPipe = os.popen(command) |
|
399 |
except: |
|
400 |
# we couldn't call the webrticli for some |
|
401 |
# reason, so return a failure |
|
402 |
raise RtiCallFailed('unknown') |
|
403 |
||
404 |
data = cliPipe.readline() |
|
405 |
||
406 |
# parse the data to see if we got a return code |
|
407 |
# if we did, then that's bad. if we didn't, |
|
408 |
# then our call was successfully |
|
409 |
m = returnCodeRe.search(data) |
|
410 |
if m: |
|
411 |
# we got a return code, set it in our |
|
412 |
# object, set the webRtiOutput for debugging |
|
413 |
# or logging, and return a failure |
|
414 |
if m.group(1) in WEBRTI_ERRORS: |
|
415 |
exc = WEBRTI_ERRORS[m.group(1)] |
|
416 |
else: |
|
417 |
exc = RtiException |
|
418 |
raise exc(data) |
|
419 |
||
7764
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
420 |
data = data.splitlines() |
7078 | 421 |
# At this point, we should have valid data |
7764
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
422 |
for line in data: |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
423 |
line = line.rstrip('\r\n') |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
424 |
self.__webRtiOutput.append(line) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
425 |
fields = line.split(':') |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
426 |
self.__mainCR.append(fields[0]) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
427 |
self.__rtiNumber.append(fields[1]) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
428 |
self.__consolidation.append(fields[2]) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
429 |
self.__project.append(fields[3]) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
430 |
self.__status.append(fields[4]) |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
431 |
self.__rtiType.append(fields[5]) |
7078 | 432 |
|
433 |
# accessors in case callers need the raw data |
|
434 |
def mainCR(self): |
|
435 |
return self.__mainCR |
|
436 |
def rtiNumber(self): |
|
437 |
return self.__rtiNumber |
|
438 |
def consolidation(self): |
|
439 |
return self.__consolidation |
|
440 |
def project(self): |
|
441 |
return self.__project |
|
442 |
def status(self): |
|
443 |
return self.__status |
|
444 |
def rtiType(self): |
|
445 |
return self.__rtiType |
|
446 |
def queryCr(self): |
|
447 |
return self.__queryCr |
|
448 |
def queryGate(self): |
|
449 |
return self.__queryGate |
|
450 |
def queryConsolidation(self): |
|
451 |
return self.__queryConsolidation |
|
452 |
||
453 |
# in practice, most callers only care about the following |
|
454 |
def accepted(self): |
|
7764
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
455 |
for status in self.__status: |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
456 |
if status != "S_ACCEPTED": |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
457 |
return False |
06fde484fcce
6752197 rti check logic could be enhanced to deal with multiple returns
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
7711
diff
changeset
|
458 |
return True |
7078 | 459 |
|
460 |
# for logging/debugging in case the caller wants the raw webrti output |
|
461 |
def webRtiOutput(self): |
|
462 |
return self.__webRtiOutput |
|
463 |