1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from libxyz.exceptions import XYZValueError
18
20 """
21 Fixed-sized list
22 """
23
29
30
31
33 """
34 Set queue size
35 """
36
37 try:
38 maxsize = int(size)
39
40 assert maxsize >= 0
41 except (ValueError, AssertionError):
42 raise XYZValueError(
43 _(u"Max-size must be a positive integer number"))
44 else:
45 self.maxsize = maxsize
46
47
48
49 - def push(self, item):
50 """
51 Push a new item to queue. If queue already contains maxsize elements
52 replace the oldest one.
53 """
54
55 _len = len(self)
56
57 if self.maxsize <= 0:
58 return
59 elif _len > self.maxsize:
60 m = _len - self.maxsize + 1
61 self[0:] = self[m:_len]
62 elif _len == self.maxsize:
63 del(self[0])
64
65 self.append(item)
66
67
68
70 """
71 Pop item from the beginning of the queue
72 Raise IndexError if queue is empty
73 """
74
75 return super(Queue,self).pop(0)
76
77
78
80 """
81 Clear queue
82 """
83
84 del self[:]
85
86
87
89 """
90 Return tail element
91 """
92
93 _len = len(self)
94
95 if _len:
96 return self[_len - 1]
97 else:
98 return None
99