[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

abarth at webkit.org abarth at webkit.org
Thu Apr 8 00:43:26 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 69392399d804eebceace0c16506fa15144c5bea8
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