1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """Prioritized tasks queue
19
20 :organization: Logilab
21
22
23 """
24 __docformat__ = "restructuredtext en"
25
26 from bisect import insort_left
27 from Queue import Queue
28
29 LOW = 0
30 MEDIUM = 10
31 HIGH = 100
32
33 REVERSE_PRIORITY = {
34 0: 'LOW',
35 10: 'MEDIUM',
36 100: 'HIGH'
37 }
38
39
41
42 - def _init(self, maxsize):
43 """Initialize the queue representation"""
44 self.maxsize = maxsize
45
46 self.queue = []
47
48 - def _put(self, item):
49 """Put a new item in the queue"""
50 for i, task in enumerate(self.queue):
51
52 if task == item:
53
54
55 if task < item:
56 item.merge(task)
57 del self.queue[i]
58 break
59
60 task.merge(item)
61 return
62 insort_left(self.queue, item)
63
65 """Get an item from the queue"""
66 return self.queue.pop()
67
69 return iter(self.queue)
70
72 """remove a specific task from the queue"""
73
74 for i, task in enumerate(self):
75 if task.id == tid:
76 self.queue.pop(i)
77 return
78 raise ValueError('not task of id %s in queue' % tid)
79
86
88 return '<Task %s @%#x>' % (self.id, id(self))
89
92
94 return self.id == other.id
95
98