Modified: trunk/Tools/TestResultServer/handlers/testfilehandler.py (90664 => 90665)
--- trunk/Tools/TestResultServer/handlers/testfilehandler.py 2011-07-08 20:58:44 UTC (rev 90664)
+++ trunk/Tools/TestResultServer/handlers/testfilehandler.py 2011-07-08 21:18:13 UTC (rev 90665)
@@ -33,6 +33,7 @@
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
+from google.appengine.ext import db
from model.jsonresults import JsonResults
from model.testfile import TestFile
@@ -49,6 +50,12 @@
PARAM_CALLBACK = "callback"
+def _replace_jsonp_callback(json, callback_name):
+ if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
+ json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
+ return json
+
+
class DeleteFile(webapp.RequestHandler):
"""Delete test file for a given builder and name from datastore."""
@@ -73,7 +80,7 @@
class GetFile(webapp.RequestHandler):
"""Get file content or list of files for given builder and name."""
- def _get_file_list(self, master, builder, test_type, name):
+ def _get_file_list(self, master, builder, test_type, name, callback_name=None):
"""Get and display a list of files that matches builder and file name.
Args:
@@ -98,6 +105,10 @@
"name": name,
"files": files,
}
+ if callback_name:
+ json = template.render("templates/showfilelist.jsonp", template_values)
+ self._serve_json(_replace_jsonp_callback(json, callback_name))
+ return
self.response.out.write(template.render("templates/showfilelist.html",
template_values))
@@ -119,6 +130,16 @@
return files[0].data
+ def _get_file_content_from_key(self, key):
+ file = db.get(key)
+
+ if not file:
+ logging.info("File not found, key %s.", key)
+ return None
+
+ file.load_data()
+ return file.data
+
def _get_test_list_json(self, master, builder, test_type):
"""Return json file with test name list only, do not include test
results and other non-test-data .
@@ -134,7 +155,15 @@
return JsonResults.get_test_list(builder, json)
+ def _serve_json(self, json):
+ if json:
+ self.response.headers["Content-Type"] = "application/json"
+ self.response.out.write(json)
+ else:
+ self.error(404)
+
def get(self):
+ key = self.request.get(PARAM_KEY)
master = self.request.get(PARAM_MASTER)
builder = self.request.get(PARAM_BUILDER)
test_type = self.request.get(PARAM_TEST_TYPE)
@@ -147,25 +176,22 @@
"Getting files, master %s, builder: %s, test_type: %s, name: %s.",
master, builder, test_type, name)
- # If parameter "dir" is specified or there is no builder or filename
- # specified in the request, return list of files, otherwise, return
- # file content.
- if dir or not builder or not name:
- return self._get_file_list(master, builder, test_type, name)
+ if not key:
+ # If parameter "dir" is specified or there is no builder or filename
+ # specified in the request, return list of files, otherwise, return
+ # file content.
+ if dir or not builder or not name:
+ return self._get_file_list(master, builder, test_type, name, callback_name)
- if name == "results.json" and test_list_json:
+ if key:
+ json = self._get_file_content_from_key(key)
+ elif name == "results.json" and test_list_json:
json = self._get_test_list_json(master, builder, test_type)
else:
json = self._get_file_content(master, builder, test_type, name)
- if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
- json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
+ self._serve_json(_replace_jsonp_callback(json, callback_name))
- if json:
- self.response.headers["Content-Type"] = "application/json"
- self.response.out.write(json)
- else:
- self.error(404)
class Upload(webapp.RequestHandler):
"""Upload test results file to datastore."""
@@ -207,7 +233,7 @@
# Merge incremental json results.
update_succeeded = JsonResults.update(master, builder, test_type, file.value)
else:
- update_succeeded = TestFile.update(
+ update_succeeded = TestFile.add_file(
master, builder, test_type, file.filename, file.value)
if not update_succeeded:
Modified: trunk/Tools/TestResultServer/model/testfile.py (90664 => 90665)
--- trunk/Tools/TestResultServer/model/testfile.py 2011-07-08 20:58:44 UTC (rev 90664)
+++ trunk/Tools/TestResultServer/model/testfile.py 2011-07-08 21:18:13 UTC (rev 90665)
@@ -97,22 +97,6 @@
return file
- @classmethod
- def update(cls, master, builder, test_type, name, data):
- files = cls.get_files(master, builder, test_type, name)
- if not files:
- return cls.add_file(master, builder, test_type, name, data)
-
- file = files[0]
- if not file.save(data):
- return None
-
- logging.info(
- "File replaced, master: %s, builder: %s, test_type: %s, name: %s, data key: %s.",
- master, builder, test_type, file.name, str(file.data_keys))
-
- return file
-
def save(self, data):
if not self.save_data(data):
return False