scan-view: Store bug reporter defaults in ~/.scanview.cfg

llvm-svn: 56424
This commit is contained in:
Daniel Dunbar 2008-09-22 02:27:45 +00:00
parent 4aed7dede7
commit 34525a91fa
1 changed files with 56 additions and 13 deletions

View File

@ -12,6 +12,7 @@ import time
import socket import socket
import Reporter import Reporter
import ConfigParser
# Keys replaced by server. # Keys replaced by server.
@ -27,6 +28,7 @@ kReportReplacements = [(kReportColRE, kReportColRepl),
# Other simple parameters # Other simple parameters
kResources = posixpath.join(posixpath.dirname(__file__), 'Resources') kResources = posixpath.join(posixpath.dirname(__file__), 'Resources')
kConfigPath = os.path.expanduser('~/.scanview.cfg')
### ###
@ -71,6 +73,37 @@ class ScanViewServer(BaseHTTPServer.HTTPServer):
self.reporters = reporters self.reporters = reporters
self.options = options self.options = options
self.halted = False self.halted = False
self.config = None
self.load_config()
def load_config(self):
self.config = ConfigParser.RawConfigParser()
# Add defaults
self.config.add_section('ScanView')
for r in Reporter.getReporters():
self.config.add_section(r.getName())
for p in r.getParameterNames():
self.config.set(r.getName(), p, '')
# Ignore parse errors
try:
self.config.read([kConfigPath])
except:
pass
# Save on exit
import atexit
atexit.register(lambda: self.save_config())
def save_config(self):
# Ignore errors (only called on exit).
try:
f = open(kConfigPath,'w')
self.config.write(f)
f.close()
except:
pass
def halt(self): def halt(self):
self.halted = True self.halted = True
@ -180,7 +213,7 @@ class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
title = self.fields.get('title') title = self.fields.get('title')
description = self.fields.get('description') description = self.fields.get('description')
report = self.fields.get('report') report = self.fields.get('report')
reporter = self.fields.get('reporter') reporterIndex = self.fields.get('reporter')
# Type check form parameters. # Type check form parameters.
reportPath = posixpath.join(self.server.root, reportPath = posixpath.join(self.server.root,
@ -192,12 +225,12 @@ class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
if not description: if not description:
return (False, "Missing description.") return (False, "Missing description.")
try: try:
reporter = int(reporter) reporterIndex = int(reporterIndex)
except: except:
return (False, "Invalid report method.") return (False, "Invalid report method.")
# Get the reporter and parameters. # Get the reporter and parameters.
reporter = self.server.reporters[reporter] reporter = self.server.reporters[reporterIndex]
parameters = {} parameters = {}
for o in reporter.getParameterNames(): for o in reporter.getParameterNames():
name = '%s_%s'%(reporter.getName(),o) name = '%s_%s'%(reporter.getName(),o)
@ -207,6 +240,11 @@ class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
reporter.getName())) reporter.getName()))
parameters[o] = self.fields[name] parameters[o] = self.fields[name]
# Update config defaults.
self.server.config.set('ScanView', 'reporter', reporterIndex)
for o in reporter.getParameterNames():
self.server.config.set(reporter.getName(), o, parameters[o])
# Create the report. # Create the report.
bug = Reporter.BugReport(title, description, [reportPath]) bug = Reporter.BugReport(title, description, [reportPath])
@ -291,17 +329,23 @@ Line: %s
reporterSelections = [] reporterSelections = []
reporterOptions = [] reporterOptions = []
try:
active = self.server.config.getint('ScanView','reporter')
except:
active = 0
for i,r in enumerate(self.server.reporters): for i,r in enumerate(self.server.reporters):
reporterSelections.append('<option value="%d">%s</option>'%(i,r.getName())) selected = (i == active)
if selected:
selectedStr = ' selected'
else:
selectedStr = ''
reporterSelections.append('<option value="%d"%s>%s</option>'%(i,selectedStr,r.getName()))
options = '\n'.join(["""\ options = '\n'.join(["""\
<tr> <tr>
<td class="form_clabel">%s:</td> <td class="form_clabel">%s:</td>
<td class="form_value"><input type="text" name="%s_%s"></td> <td class="form_value"><input type="text" name="%s_%s" value="%s"></td>
</tr>"""%(o,r.getName(),o) for o in r.getParameterNames()]) </tr>"""%(o,r.getName(),o,self.server.config.get(r.getName(), o)) for o in r.getParameterNames()])
if i==0: display = ('none','')[selected]
display = ''
else:
display = 'none'
reporterOptions.append("""\ reporterOptions.append("""\
<tr id="%sReporterOptions" style="display:%s"> <tr id="%sReporterOptions" style="display:%s">
<td class="form_label">%s Options</td> <td class="form_label">%s Options</td>
@ -377,10 +421,9 @@ function updateReporterOptions() {
</table> </table>
</form> </form>
<iframe src="/report-%(report)s.html" width="100%%" height="70%%"
<iframe src="/report-%(report)s.html#EndPath" width="100%%" height="40%%"
scrolling="auto" frameborder="1"> scrolling="auto" frameborder="1">
<a href="/report-%(report)s.html#EndPath">View Bug Report</a> <a href="/report-%(report)s.html">View Bug Report</a>
</iframe> </iframe>
</body> </body>