1 """Prioritized tasks queue
2
3 :organization: Logilab
4 :copyright: 2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
6 """
7 __docformat__ = "restructuredtext en"
8
9 from bisect import insort_left
10 from Queue import Queue
11
12 LOW = 0
13 MEDIUM = 10
14 HIGH = 100
15
16 REVERSE_PRIORITY = {
17 0: 'LOW',
18 10: 'MEDIUM',
19 100: 'HIGH'
20 }
21
22
24
25 - def _init(self, maxsize):
26 """Initialize the queue representation"""
27 self.maxsize = maxsize
28
29 self.queue = []
30
31 - def _put(self, item):
32 """Put a new item in the queue"""
33 for i, task in enumerate(self.queue):
34
35 if task == item:
36
37
38 if task < item:
39 item.merge(task)
40 del self.queue[i]
41 break
42
43 task.merge(item)
44 return
45 insort_left(self.queue, item)
46
48 """Get an item from the queue"""
49 return self.queue.pop()
50
52 return iter(self.queue)
53
55 """remove a specific task from the queue"""
56
57 for i, task in enumerate(self):
58 if task.id == tid:
59 self.queue.pop(i)
60 return
61 raise ValueError('not task of id %s in queue' % tid)
62
69
71 return '<Task %s @%#x>' % (self.id, id(self))
72
75
77 return self.id == other.id
78
81