[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.17-1283-gcf603cf
abarth at webkit.org
abarth at webkit.org
Tue Jan 5 23:55:11 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit 68ba7b55d9aa8f77fe960a97a082f1e02a0976ae
Author: abarth at webkit.org <abarth at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Dec 19 07:14:07 2009 +0000
2009-12-18 Adam Barth <abarth at webkit.org>
Reviewed by Eric Seidel.
Split QueueStatus server into modules
https://bugs.webkit.org/show_bug.cgi?id=32768
One monolithic file is no good.
* QueueStatusServer/app.yaml:
* QueueStatusServer/handlers/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
* QueueStatusServer/handlers/patchstatus.py: Added.
* QueueStatusServer/handlers/recentstatus.py: Added.
* QueueStatusServer/handlers/showresults.py: Added.
* QueueStatusServer/handlers/statusbubble.py: Added.
* QueueStatusServer/handlers/updatestatus.py: Added.
* QueueStatusServer/main.py: Added.
* QueueStatusServer/model.py: Added.
* QueueStatusServer/queue_status.py: Removed.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52381 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 3d34f84..81e590f 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,5 +1,25 @@
2009-12-18 Adam Barth <abarth at webkit.org>
+ Reviewed by Eric Seidel.
+
+ Split QueueStatus server into modules
+ https://bugs.webkit.org/show_bug.cgi?id=32768
+
+ One monolithic file is no good.
+
+ * QueueStatusServer/app.yaml:
+ * QueueStatusServer/handlers/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
+ * QueueStatusServer/handlers/patchstatus.py: Added.
+ * QueueStatusServer/handlers/recentstatus.py: Added.
+ * QueueStatusServer/handlers/showresults.py: Added.
+ * QueueStatusServer/handlers/statusbubble.py: Added.
+ * QueueStatusServer/handlers/updatestatus.py: Added.
+ * QueueStatusServer/main.py: Added.
+ * QueueStatusServer/model.py: Added.
+ * QueueStatusServer/queue_status.py: Removed.
+
+2009-12-18 Adam Barth <abarth at webkit.org>
+
Rubber stamped by Eric Seidel.
Renamed WorkQueue to QueueEngine. WorkQueue is not a queue.
diff --git a/WebKitTools/QueueStatusServer/app.yaml b/WebKitTools/QueueStatusServer/app.yaml
index 2756112..f6ff870 100644
--- a/WebKitTools/QueueStatusServer/app.yaml
+++ b/WebKitTools/QueueStatusServer/app.yaml
@@ -8,4 +8,4 @@ handlers:
static_dir: stylesheets
- url: /.*
- script: queue_status.py
+ script: main.py
diff --git a/WebKitTools/QueueStatusServer/filters/__init__.py b/WebKitTools/QueueStatusServer/handlers/__init__.py
similarity index 100%
copy from WebKitTools/QueueStatusServer/filters/__init__.py
copy to WebKitTools/QueueStatusServer/handlers/__init__.py
diff --git a/WebKitTools/QueueStatusServer/handlers/patchstatus.py b/WebKitTools/QueueStatusServer/handlers/patchstatus.py
new file mode 100644
index 0000000..73ae53a
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/handlers/patchstatus.py
@@ -0,0 +1,40 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.ext import webapp
+
+from model import QueueStatus
+
+
+class PatchStatus(webapp.RequestHandler):
+ def get(self, queue_name, attachment_id):
+ statuses = QueueStatus.all().filter('queue_name =', queue_name).filter('active_patch_id =', int(attachment_id)).order('-date').fetch(1)
+ if not statuses:
+ self.error(404)
+ return
+ self.response.out.write(statuses[0].message)
diff --git a/WebKitTools/QueueStatusServer/handlers/recentstatus.py b/WebKitTools/QueueStatusServer/handlers/recentstatus.py
new file mode 100644
index 0000000..09648bf
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/handlers/recentstatus.py
@@ -0,0 +1,56 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp import template
+
+from model import QueueStatus
+
+class RecentStatus(webapp.RequestHandler):
+ def _title_case(self, string):
+ words = string.split(" ")
+ words = map(lambda word: word.capitalize(), words)
+ return " ".join(words)
+
+ def _pretty_queue_name(self, queue_name):
+ return self._title_case(queue_name.replace("-", " "))
+
+ # We could change "/" to just redirect to /queue-status/commit-queue in the future
+ # at which point we would not need a default value for queue_name here.
+ def get(self, queue_name="commit-queue"):
+ statuses_query = QueueStatus.all().filter("queue_name =", queue_name).order("-date")
+ statuses = statuses_query.fetch(6)
+ if not statuses:
+ return self.response.out.write("No status to report.")
+ template_values = {
+ "last_status" : statuses[0],
+ "recent_statuses" : statuses[1:],
+ "pretty_queue_name" : self._pretty_queue_name(queue_name),
+ "show_commit_queue_footer" : queue_name == "commit-queue"
+ }
+ self.response.out.write(template.render("index.html", template_values))
diff --git a/WebKitTools/QueueStatusServer/handlers/showresults.py b/WebKitTools/QueueStatusServer/handlers/showresults.py
new file mode 100644
index 0000000..cb14a9a
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/handlers/showresults.py
@@ -0,0 +1,41 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.ext import webapp
+
+from model import QueueStatus
+
+
+class ShowResults(webapp.RequestHandler):
+ def get(self, status_id):
+ status = QueueStatus.get_by_id(int(status_id))
+ if not status:
+ self.error(404)
+ return
+ self.response.headers["Content-Type"] = "text/plain; charset=utf-8"
+ self.response.out.write(status.results_file)
diff --git a/WebKitTools/QueueStatusServer/handlers/statusbubble.py b/WebKitTools/QueueStatusServer/handlers/statusbubble.py
new file mode 100644
index 0000000..c3f547b
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/handlers/statusbubble.py
@@ -0,0 +1,79 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp import template
+
+from model import QueueStatus
+
+
+class StatusSummary(object):
+ def _status_to_code(self, status):
+ code_names = {
+ "Pass": "pass",
+ "Pending": "pending",
+ "Fail": "fail",
+ "Error": "error",
+ }
+ return code_names.get(status, "none")
+
+ def _queue_name_to_code(self, queue_name):
+ code_names = {
+ "style-queue": "style",
+ }
+ return code_names[queue_name]
+
+ queues = [
+ "style-queue",
+ ]
+
+ def __init__(self):
+ self._summary = {}
+
+ def summarize(self, attachment_id):
+ if self._summary.get(attachment_id):
+ return self._summary.get(attachment_id)
+
+ attachment_summary = {}
+ for queue in self.queues:
+ statuses = QueueStatus.all().filter('queue_name =', queue).filter('active_patch_id =', attachment_id).order('-date').fetch(1)
+ status_code = self._status_to_code(statuses[0].message if statuses else None)
+ queue_code = self._queue_name_to_code(queue)
+ attachment_summary[queue_code] = status_code
+
+ self._summary[attachment_id] = attachment_summary
+ return attachment_summary
+
+
+class StatusBubble(webapp.RequestHandler):
+ def get(self, attachment_id):
+ status_summary = StatusSummary()
+ template_values = {
+ "queue_status" : status_summary.summarize(int(attachment_id)),
+ }
+ self.response.out.write(template.render('status_bubble.html', template_values))
diff --git a/WebKitTools/QueueStatusServer/handlers/updatestatus.py b/WebKitTools/QueueStatusServer/handlers/updatestatus.py
new file mode 100644
index 0000000..493b816
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/handlers/updatestatus.py
@@ -0,0 +1,63 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.api import users
+from google.appengine.ext import webapp, db
+from google.appengine.ext.webapp import template
+
+from model import QueueStatus
+
+
+class UpdateStatus(webapp.RequestHandler):
+ def get(self):
+ self.response.out.write(template.render('update_status.html', None))
+
+ def _int_from_request(self, name):
+ string_value = self.request.get(name)
+ try:
+ int_value = int(string_value)
+ return int_value
+ except ValueError, TypeError:
+ pass
+ return None
+
+ def post(self):
+ queue_status = QueueStatus()
+
+ if users.get_current_user():
+ queue_status.author = users.get_current_user()
+
+ queue_name = self.request.get('queue_name')
+ queue_status.queue_name = queue_name
+ queue_status.active_bug_id = self._int_from_request('bug_id')
+ queue_status.active_patch_id = self._int_from_request('patch_id')
+ queue_status.message = self.request.get('status')
+ results_file = self.request.get("results_file")
+ queue_status.results_file = db.Blob(str(results_file))
+ queue_status.put()
+ self.response.out.write(queue_status.key().id())
diff --git a/WebKitTools/QueueStatusServer/main.py b/WebKitTools/QueueStatusServer/main.py
new file mode 100644
index 0000000..da2f4c4
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/main.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Request a modern Django
+from google.appengine.dist import use_library
+use_library('django', '1.1')
+
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp.util import run_wsgi_app
+
+from handlers.patchstatus import PatchStatus
+from handlers.recentstatus import RecentStatus
+from handlers.showresults import ShowResults
+from handlers.statusbubble import StatusBubble
+from handlers.updatestatus import UpdateStatus
+
+webapp.template.register_template_library('filters.webkit_extras')
+
+routes = [
+ ('/', RecentStatus),
+ ('/queue-status/(.*)', RecentStatus),
+ ('/update-status', UpdateStatus),
+ (r'/patch-status/(.*)/(.*)', PatchStatus),
+ (r'/status-bubble/(.*)', StatusBubble),
+ (r'/results/(.*)', ShowResults)
+]
+
+application = webapp.WSGIApplication(routes, debug=True)
+
+def main():
+ run_wsgi_app(application)
+
+if __name__ == "__main__":
+ main()
diff --git a/WebKitTools/QueueStatusServer/model.py b/WebKitTools/QueueStatusServer/model.py
new file mode 100644
index 0000000..3d7e599
--- /dev/null
+++ b/WebKitTools/QueueStatusServer/model.py
@@ -0,0 +1,38 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from google.appengine.ext import db
+
+class QueueStatus(db.Model):
+ author = db.UserProperty()
+ queue_name = db.StringProperty()
+ active_bug_id = db.IntegerProperty()
+ active_patch_id = db.IntegerProperty()
+ message = db.StringProperty(multiline=True)
+ date = db.DateTimeProperty(auto_now_add=True)
+ results_file = db.BlobProperty()
diff --git a/WebKitTools/QueueStatusServer/queue_status.py b/WebKitTools/QueueStatusServer/queue_status.py
deleted file mode 100644
index 69e7e89..0000000
--- a/WebKitTools/QueueStatusServer/queue_status.py
+++ /dev/null
@@ -1,190 +0,0 @@
-# Copyright (C) 2009 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import cgi
-import os
-
-# Request a modern Django
-from google.appengine.dist import use_library
-use_library('django', '1.1')
-
-from google.appengine.ext.webapp import template
-from google.appengine.api import users
-from google.appengine.ext import webapp, db
-from google.appengine.ext.webapp.util import run_wsgi_app
-
-webapp.template.register_template_library('filters.webkit_extras')
-
-
-class QueueStatus(db.Model):
- author = db.UserProperty()
- queue_name = db.StringProperty()
- active_bug_id = db.IntegerProperty()
- active_patch_id = db.IntegerProperty()
- message = db.StringProperty(multiline=True)
- date = db.DateTimeProperty(auto_now_add=True)
- results_file = db.BlobProperty()
-
-
-class RecentStatus(webapp.RequestHandler):
- def _title_case(self, string):
- words = string.split(" ")
- words = map(lambda word: word.capitalize(), words)
- return " ".join(words)
-
- def _pretty_queue_name(self, queue_name):
- return self._title_case(queue_name.replace("-", " "))
-
- # We could change "/" to just redirect to /queue-status/commit-queue in the future
- # at which point we would not need a default value for queue_name here.
- def get(self, queue_name="commit-queue"):
- statuses_query = QueueStatus.all().filter("queue_name =", queue_name).order("-date")
- statuses = statuses_query.fetch(6)
- if not statuses:
- return self.response.out.write("No status to report.")
- template_values = {
- "last_status" : statuses[0],
- "recent_statuses" : statuses[1:],
- "pretty_queue_name" : self._pretty_queue_name(queue_name),
- "show_commit_queue_footer" : queue_name == "commit-queue"
- }
- self.response.out.write(template.render("index.html", template_values))
-
-
-class PatchStatus(webapp.RequestHandler):
- def get(self, queue_name, attachment_id):
- statuses = QueueStatus.all().filter('queue_name =', queue_name).filter('active_patch_id =', int(attachment_id)).order('-date').fetch(1)
- if not statuses:
- self.error(404)
- return
- self.response.out.write(statuses[0].message)
-
-
-class StatusSummary(object):
- def _status_to_code(self, status):
- code_names = {
- "Pass": "pass",
- "Pending": "pending",
- "Fail": "fail",
- "Error": "error",
- }
- return code_names.get(status, "none")
-
- def _queue_name_to_code(self, queue_name):
- code_names = {
- "style-queue": "style",
- }
- return code_names[queue_name]
-
- queues = [
- "style-queue",
- ]
-
- def __init__(self):
- self._summary = {}
-
- def summarize(self, attachment_id):
- if self._summary.get(attachment_id):
- return self._summary.get(attachment_id)
-
- attachment_summary = {}
- for queue in self.queues:
- statuses = QueueStatus.all().filter('queue_name =', queue).filter('active_patch_id =', attachment_id).order('-date').fetch(1)
- status_code = self._status_to_code(statuses[0].message if statuses else None)
- queue_code = self._queue_name_to_code(queue)
- attachment_summary[queue_code] = status_code
-
- self._summary[attachment_id] = attachment_summary
- return attachment_summary
-
-
-class StatusBubble(webapp.RequestHandler):
- def get(self, attachment_id):
- status_summary = StatusSummary()
- template_values = {
- "queue_status" : status_summary.summarize(int(attachment_id)),
- }
- self.response.out.write(template.render('status_bubble.html', template_values))
-
-
-class UpdateStatus(webapp.RequestHandler):
- def get(self):
- self.response.out.write(template.render('update_status.html', None))
-
- def _int_from_request(self, name):
- string_value = self.request.get(name)
- try:
- int_value = int(string_value)
- return int_value
- except ValueError, TypeError:
- pass
- return None
-
- def post(self):
- queue_status = QueueStatus()
-
- if users.get_current_user():
- queue_status.author = users.get_current_user()
-
- queue_name = self.request.get('queue_name')
- queue_status.queue_name = queue_name
- queue_status.active_bug_id = self._int_from_request('bug_id')
- queue_status.active_patch_id = self._int_from_request('patch_id')
- queue_status.message = self.request.get('status')
- results_file = self.request.get("results_file")
- queue_status.results_file = db.Blob(str(results_file))
- queue_status.put()
- self.response.out.write(queue_status.key().id())
-
-
-class ShowResults(webapp.RequestHandler):
- def get(self, status_id):
- status = QueueStatus.get_by_id(int(status_id))
- if not status:
- self.error(404)
- return
- self.response.headers["Content-Type"] = "text/plain; charset=utf-8"
- self.response.out.write(status.results_file)
-
-
-routes = [
- ('/', RecentStatus),
- ('/queue-status/(.*)', RecentStatus),
- ('/update-status', UpdateStatus),
- (r'/patch-status/(.*)/(.*)', PatchStatus),
- (r'/status-bubble/(.*)', StatusBubble),
- (r'/results/(.*)', ShowResults)
-]
-
-application = webapp.WSGIApplication(routes, debug=True)
-
-def main():
- run_wsgi_app(application)
-
-if __name__ == "__main__":
- main()
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list