Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: sitescripts/crashes/web/submitCrash.py

Issue 8327353: Crawler backend (Closed)
Patch Set: Created Sept. 27, 2012, 9:26 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # coding: utf-8
2
3 # This Source Code is subject to the terms of the Mozilla Public License
4 # version 2.0 (the "License"). You can obtain a copy of the License at
5 # http://mozilla.org/MPL/2.0/.
6
7 import re, os, sys
8 from urlparse import parse_qs
9 from tempfile import mkstemp
10 from sitescripts.utils import get_config, setupStderr
11 from sitescripts.web import url_handler
12
13 @url_handler('/submitCrash')
14 def handleRequest(environ, start_response):
15 setupStderr(environ['wsgi.errors'])
16
17 if not environ.get('HTTP_X_ADBLOCK_PLUS'):
18 return showError('Please use Adblock Plus to submit crashes', start_response )
19
20 if environ['REQUEST_METHOD'].upper() != 'POST' or not environ.get('CONTENT_TYP E', '').startswith('text/xml'):
21 return showError('Unsupported request method', start_response)
22
23 params = parse_qs(environ.get('QUERY_STRING', ''))
24
25 requestVersion = params.get('version', ['0'])[0]
26 if requestVersion != '1':
27 return showError('Unsupported request version', start_response)
28
29 try:
30 request_body_size = int(environ.get('CONTENT_LENGTH', 0))
31 except (ValueError):
32 return showError('No content', start_response)
33
34 dir = get_config().get('crashes', 'dataPath')
35 if not os.path.exists(dir):
36 os.makedirs(dir)
37
38 filename = None
39 try:
40 fd, filename = mkstemp('.xml.tmp', 'crash_', dir)
41 file = os.fdopen(fd, 'wb')
42 file.write(environ['wsgi.input'].read(request_body_size))
43 file.close()
44 os.rename(filename, os.path.splitext(filename)[0]);
45 except Exception, e:
46 if filename != None and os.path.isfile(filename):
47 os.remove(filename)
48 raise e
49
50 start_response('200 Ok', [('Content-Type', 'text/plain; charset=utf-8')])
51 return ['saved'.encode('utf-8')]
52
53 def showError(message, start_response):
54 start_response('400 Processing Error', [('Content-Type', 'text/plain; charset= utf-8')])
55 return [message.encode('utf-8')]
OLDNEW

Powered by Google App Engine
This is Rietveld