| Index: gm/rebaseline_server/server.py
|
| diff --git a/gm/rebaseline_server/server.py b/gm/rebaseline_server/server.py
|
| index 1bd596340b0e4366b47943f6a71a1ed4d6f671f2..6062aed641e1f9581ccc852eaf9f656265682bef 100755
|
| --- a/gm/rebaseline_server/server.py
|
| +++ b/gm/rebaseline_server/server.py
|
| @@ -48,6 +48,8 @@ import download_actuals
|
| import imagediffdb
|
| import imagepairset
|
| import results as results_mod
|
| +import writable_expectations as writable_expectations_mod
|
| +
|
|
|
| PATHSPLIT_RE = re.compile('/([^/]+)/(.+)')
|
|
|
| @@ -67,6 +69,9 @@ MIME_TYPE_MAP = {'': 'application/octet-stream',
|
| KEY__EDITS__MODIFICATIONS = 'modifications'
|
| KEY__EDITS__OLD_RESULTS_HASH = 'oldResultsHash'
|
| KEY__EDITS__OLD_RESULTS_TYPE = 'oldResultsType'
|
| +KEY__LIVE_EDITS__MODIFICATIONS = 'modifications'
|
| +KEY__LIVE_EDITS__SET_A_DESCRIPTIONS = 'setA'
|
| +KEY__LIVE_EDITS__SET_B_DESCRIPTIONS = 'setB'
|
|
|
| DEFAULT_ACTUALS_DIR = results_mod.DEFAULT_ACTUALS_DIR
|
| DEFAULT_GM_SUMMARIES_BUCKET = download_actuals.GM_SUMMARIES_BUCKET
|
| @@ -685,11 +690,11 @@ class HTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
| normpath = posixpath.normpath(self.path)
|
| dispatchers = {
|
| '/edits': self.do_POST_edits,
|
| + '/live-edits': self.do_POST_live_edits,
|
| }
|
| try:
|
| dispatcher = dispatchers[normpath]
|
| dispatcher()
|
| - self.send_response(200)
|
| except:
|
| self.send_error(404)
|
| raise
|
| @@ -749,6 +754,47 @@ class HTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
| # We can do this in a separate thread; we should return our success message
|
| # to the UI as soon as possible.
|
| thread.start_new_thread(_SERVER.update_results, (True,))
|
| + self.send_response(200)
|
| +
|
| + def do_POST_live_edits(self):
|
| + """ Handle a POST request with modifications to SKP expectations, in this
|
| + format:
|
| +
|
| + {
|
| + KEY__LIVE_EDITS__SET_A_DESCRIPTIONS: {
|
| + # setA descriptions from the original data
|
| + },
|
| + KEY__LIVE_EDITS__SET_B_DESCRIPTIONS: {
|
| + # setB descriptions from the original data
|
| + },
|
| + KEY__LIVE_EDITS__MODIFICATIONS: [
|
| + # as needed by writable_expectations.modify()
|
| + ],
|
| + }
|
| +
|
| + Raises an Exception if there were any problems.
|
| + """
|
| + content_type = self.headers[_HTTP_HEADER_CONTENT_TYPE]
|
| + if content_type != 'application/json;charset=UTF-8':
|
| + raise Exception('unsupported %s [%s]' % (
|
| + _HTTP_HEADER_CONTENT_TYPE, content_type))
|
| +
|
| + content_length = int(self.headers[_HTTP_HEADER_CONTENT_LENGTH])
|
| + json_data = self.rfile.read(content_length)
|
| + data = json.loads(json_data)
|
| + logging.debug('do_POST_live_edits: received new GM expectations data [%s]' %
|
| + data)
|
| + with writable_expectations_mod.WritableExpectations(
|
| + data[KEY__LIVE_EDITS__SET_A_DESCRIPTIONS]) as writable_expectations:
|
| + writable_expectations.modify(data[KEY__LIVE_EDITS__MODIFICATIONS])
|
| + diffs = writable_expectations.get_diffs()
|
| + # TODO(stephana): Move to a simpler web framework so we don't have to
|
| + # call these functions. See http://skbug.com/2856 ('rebaseline_server:
|
| + # Refactor server to use a simple web framework')
|
| + self.send_response(200)
|
| + self.send_header('Content-type', 'text/plain')
|
| + self.end_headers()
|
| + self.wfile.write(diffs)
|
|
|
| def redirect_to(self, url):
|
| """ Redirect the HTTP client to a different url.
|
|
|