fed13965289a1cf3a310186590720480fda72398
[WebKit-https.git] / Tools / QueueStatusServer / model / queues.py
1 # Copyright (C) 2010 Google Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
5 # met:
6
7 #     * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 #     * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the
12 # distribution.
13 #     * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
30 import re
31
32 from config.queues import all_queue_names
33 from model.activeworkitems import ActiveWorkItems
34 from model.workitems import WorkItems
35
36
37 class Queue(object):
38     def __init__(self, name):
39         assert(name in all_queue_names)
40         self._name = name
41
42     @classmethod
43     def queue_with_name(cls, queue_name):
44         if queue_name not in all_queue_names:
45             return None
46         return Queue(queue_name)
47
48     @classmethod
49     def all(cls):
50         return [Queue(name) for name in all_queue_names]
51
52     @classmethod
53     def all_ews(cls):
54         return [queue for queue in cls.all() if queue.is_ews()]
55
56     def name(self):
57         return self._name
58
59     def work_items(self):
60         return WorkItems.lookup_by_queue(self._name)
61
62     # FIXME: active_work_items is a bad name for this lock-table.
63     def active_work_items(self):
64         return ActiveWorkItems.lookup_by_queue(self._name)
65
66     def _caplitalize_after_dash(self, string):
67         return "-".join([word[0].upper() + word[1:] for word in string.split("-")])
68
69     # For use in status bubbles or table headers
70     def short_name(self):
71         short_name = self._name.replace("-ews", "")
72         short_name = short_name.replace("-queue", "")
73         return self._caplitalize_after_dash(short_name.capitalize())
74
75     def display_name(self):
76         display_name = self._name.replace("-", " ")
77         display_name = display_name.title()
78         display_name = display_name.replace("Wk2", "WK2")
79         display_name = display_name.replace("Ews", "EWS")
80         display_name = display_name.replace("Ios", "iOS")
81         return display_name
82
83     _dash_regexp = re.compile("-")
84
85     def name_with_underscores(self):
86         return self._dash_regexp.sub("_", self._name)
87
88     def is_ews(self):
89         # Note: The style-queue is just like an EWS in that it has an EWS
90         # bubble, and it works off of the r? patches.  If at some later
91         # point code wants to not treat the style-queue as an EWS
92         # (e.g. expecting is_ews() queues to have build results?)
93         # then we should fix all callers and change this check.
94         return self._name.endswith("-ews") or self._name == "style-queue"