Skip to content

Commit 6429783

Browse files
committed
Replace list with collections.deque
1 parent da5b299 commit 6429783

4 files changed

Lines changed: 41 additions & 33 deletions

File tree

amqpstorm/channel.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""AMQPStorm Connection.Channel."""
22

3+
import collections
34
import logging
45
import threading
56
import time
@@ -48,7 +49,7 @@ def __init__(self, channel_id, connection, rpc_timeout):
4849
self._consumer_callbacks = {}
4950
self._confirming_deliveries = False
5051
self._connection = connection
51-
self._inbound = []
52+
self._inbound = collections.deque()
5253
self._basic = Basic(self, connection.max_frame_size)
5354
self._exchange = Exchange(self)
5455
self._tx = Tx(self)
@@ -206,7 +207,7 @@ def close(self, reply_code=200, reply_text=''):
206207
)
207208
finally:
208209
if self._inbound:
209-
del self._inbound[:]
210+
self._inbound.clear()
210211
self.set_state(self.CLOSED)
211212
LOGGER.debug('Channel #%d Closed', self.channel_id)
212213

@@ -298,7 +299,7 @@ def open(self):
298299
299300
:return:
300301
"""
301-
self._inbound = []
302+
self._inbound = collections.deque()
302303
self._exceptions = []
303304
self._confirming_deliveries = False
304305
self.set_state(self.OPENING)
@@ -464,15 +465,15 @@ def _build_message_headers(self):
464465
465466
:rtype: tuple,None
466467
"""
467-
basic_deliver = self._inbound.pop(0)
468+
basic_deliver = self._inbound.popleft()
468469
if not isinstance(basic_deliver, commands.Basic.Deliver):
469470
LOGGER.warning(
470471
'Received an out-of-order frame: %s was '
471472
'expecting a Basic.Deliver frame',
472473
type(basic_deliver)
473474
)
474475
return None
475-
content_header = self._inbound.pop(0)
476+
content_header = self._inbound.popleft()
476477
if not isinstance(content_header, ContentHeader):
477478
LOGGER.warning(
478479
'Received an out-of-order frame: %s was '
@@ -494,7 +495,7 @@ def _build_message_body(self, body_size):
494495
self.check_for_errors()
495496
time.sleep(IDLE_WAIT)
496497
continue
497-
body_piece = self._inbound.pop(0)
498+
body_piece = self._inbound.popleft()
498499
if not body_piece.value:
499500
break
500501
body += body_piece.value
@@ -514,7 +515,8 @@ def _close_channel(self, frame_in):
514515
pass
515516
self.remove_consumer_tag()
516517
if self._inbound:
517-
del self._inbound[:]
518+
self._inbound.clear()
519+
self._inbound = None
518520
self.exceptions.append(AMQPChannelError(
519521
'Channel %d was closed by remote server: %s' %
520522
(

amqpstorm/tests/unit/channel/test_channel.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import collections
12
from unittest import mock
23
from pamqp import commands
34

@@ -140,7 +141,7 @@ def test_channel_close_channel(self):
140141
channel = Channel(0, FakeConnection(), 360)
141142

142143
# Set up Fake Channel.
143-
channel._inbound = [1, 2, 3]
144+
channel._inbound = collections.deque([1, 2, 3])
144145
channel.set_state(channel.OPEN)
145146
channel._consumer_tags = [4, 5, 6]
146147

@@ -149,7 +150,7 @@ def test_channel_close_channel(self):
149150
# Close Channel.
150151
channel._close_channel(close_frame)
151152

152-
self.assertEqual(channel._inbound, [])
153+
self.assertIsNone(channel._inbound)
153154
self.assertEqual(channel._consumer_tags, [])
154155
self.assertEqual(channel._state, channel.CLOSED)
155156

amqpstorm/tests/unit/channel/test_channel_exception.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def test_channel_raise_with_close_reply_code_500(self):
218218
)
219219
channel._close_channel(close_frame)
220220

221-
self.assertEqual(channel._inbound, [])
221+
self.assertIsNone(channel._inbound)
222222
self.assertEqual(channel._consumer_tags, [])
223223
self.assertEqual(channel._state, channel.CLOSED)
224224

amqpstorm/tests/unit/channel/test_channel_message_handling.py

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import collections
12
import threading
23

34
from unittest import mock
@@ -24,7 +25,7 @@ def test_channel_build_message(self):
2425
header = ContentHeader(body_size=message_len)
2526
body = ContentBody(value=message)
2627

27-
channel._inbound = [deliver, header, body]
28+
channel._inbound = collections.deque([deliver, header, body])
2829
result = channel._build_message(auto_decode=False,
2930
message_impl=Message)
3031

@@ -41,7 +42,7 @@ def test_channel_build_message_auto_decode(self):
4142
header = ContentHeader(body_size=message_len)
4243
body = ContentBody(value=message)
4344

44-
channel._inbound = [deliver, header, body]
45+
channel._inbound = collections.deque([deliver, header, body])
4546
result = channel._build_message(auto_decode=True, message_impl=Message)
4647

4748
self.assertIsInstance(result.body, str)
@@ -56,7 +57,7 @@ def test_channel_build_out_of_order_message_deliver(self):
5657
deliver = commands.Basic.Deliver()
5758
header = ContentHeader(body_size=message_len)
5859

59-
channel._inbound = [deliver, deliver, header]
60+
channel._inbound = collections.deque([deliver, deliver, header])
6061
result = channel._build_message(auto_decode=True, message_impl=Message)
6162

6263
self.assertEqual(result, None)
@@ -73,7 +74,7 @@ def test_channel_build_out_of_order_message_header(self):
7374
header = ContentHeader(body_size=message_len)
7475
body = ContentBody(value=message)
7576

76-
channel._inbound = [header, deliver, header, body]
77+
channel._inbound = collections.deque([header, deliver, header, body])
7778
result = channel._build_message(auto_decode=True, message_impl=Message)
7879

7980
self.assertEqual(result, None)
@@ -86,7 +87,7 @@ def test_channel_build_message_headers(self):
8687
deliver = commands.Basic.Deliver()
8788
header = ContentHeader(body_size=10)
8889

89-
channel._inbound = [deliver, header]
90+
channel._inbound = collections.deque([deliver, header])
9091
result = channel._build_message_headers()
9192

9293
self.assertIsInstance(result[0], commands.Basic.Deliver)
@@ -99,14 +100,14 @@ def test_channel_build_message_headers_out_of_order(self):
99100
deliver = commands.Basic.Deliver()
100101
header = ContentHeader(body_size=10)
101102

102-
channel._inbound = [header, deliver]
103+
channel._inbound = collections.deque([header, deliver])
103104
result = channel._build_message_headers()
104105

105106
self.assertEqual(result, None)
106107
self.assertIn("Received an out-of-order frame:",
107108
self.get_last_log())
108109

109-
channel._inbound = [deliver, deliver]
110+
channel._inbound = collections.deque([deliver, deliver])
110111
result = channel._build_message_headers()
111112

112113
self.assertEqual(result, None)
@@ -115,7 +116,7 @@ def test_channel_build_message_headers_out_of_order(self):
115116

116117
def test_channel_build_message_headers_empty(self):
117118
channel = Channel(0, mock.Mock(name='Connection'), 360)
118-
channel._inbound = []
119+
channel._inbound = collections.deque()
119120
self.assertRaises(IndexError, channel._build_message_headers)
120121

121122
def test_channel_build_message_empty_and_then_break(self):
@@ -126,7 +127,7 @@ def test_channel_build_message_empty_and_then_break(self):
126127
"""
127128
channel = Channel(0, FakeConnection(), 360)
128129
channel.set_state(Channel.OPEN)
129-
channel._inbound = []
130+
channel._inbound = collections.deque()
130131

131132
def add_inbound():
132133
channel._inbound.append(ContentBody(None))
@@ -160,7 +161,7 @@ def test_channel_build_message_body(self):
160161
message_len = len(message)
161162

162163
body = ContentBody(value=message)
163-
channel._inbound = [body]
164+
channel._inbound = collections.deque([body])
164165
result = channel._build_message_body(message_len)
165166

166167
self.assertEqual(message, result)
@@ -172,7 +173,7 @@ def test_channel_build_message_body_break_on_none_value(self):
172173
message_len = len(message)
173174

174175
body = ContentBody(value=None)
175-
channel._inbound = [body]
176+
channel._inbound = collections.deque([body])
176177
result = channel._build_message_body(message_len)
177178

178179
self.assertEqual(result, b'')
@@ -184,7 +185,7 @@ def test_channel_build_message_body_break_on_empty_value(self):
184185
message_len = len(message)
185186

186187
body = ContentBody(value=b'')
187-
channel._inbound = [body]
188+
channel._inbound = collections.deque([body])
188189
result = channel._build_message_body(message_len)
189190

190191
self.assertEqual(result, b'')
@@ -211,7 +212,7 @@ def add_content():
211212
channel._inbound.append(ContentBody(value=message))
212213

213214
deliver = commands.Basic.Deliver()
214-
channel._inbound = [deliver]
215+
channel._inbound = collections.deque([deliver])
215216

216217
self.assertTrue(channel._inbound)
217218

@@ -233,7 +234,7 @@ def test_channel_build_inbound_messages(self):
233234
header = ContentHeader(body_size=message_len)
234235
body = ContentBody(value=message)
235236

236-
channel._inbound = [deliver, header, body]
237+
channel._inbound = collections.deque([deliver, header, body])
237238

238239
messages_consumed = 0
239240
for msg in channel.build_inbound_messages(break_on_empty=True):
@@ -253,8 +254,12 @@ def test_channel_build_multiple_inbound_messages(self):
253254
header = ContentHeader(body_size=message_len)
254255
body = ContentBody(value=message)
255256

256-
channel._inbound = [deliver, header, body, deliver, header, body,
257-
deliver, header, body, deliver, header, body]
257+
channel._inbound = collections.deque(
258+
[
259+
deliver, header, body, deliver, header, body,
260+
deliver, header, body, deliver, header, body
261+
]
262+
)
258263

259264
messages_consumed = 0
260265
for msg in channel.build_inbound_messages(break_on_empty=True):
@@ -322,7 +327,7 @@ def test_channel_build_inbound_messages_as_tuple(self):
322327
header = ContentHeader(body_size=message_len)
323328
body = ContentBody(value=message)
324329

325-
channel._inbound = [deliver, header, body]
330+
channel._inbound = collections.deque([deliver, header, body])
326331

327332
messages_consumed = 0
328333
for msg in channel.build_inbound_messages(break_on_empty=True,
@@ -348,7 +353,7 @@ def test_channel_process_data_events(self):
348353
header = ContentHeader(body_size=message_len)
349354
body = ContentBody(value=message)
350355

351-
channel._inbound = [deliver, header, body]
356+
channel._inbound = collections.deque([deliver, header, body])
352357

353358
def callback(msg):
354359
self.msg = msg
@@ -373,7 +378,7 @@ def test_channel_process_data_events_as_tuple(self):
373378
header = ContentHeader(body_size=message_len)
374379
body = ContentBody(value=message)
375380

376-
channel._inbound = [deliver, header, body]
381+
channel._inbound = collections.deque([deliver, header, body])
377382

378383
def callback(body, channel, method, properties):
379384
self.msg = (body, channel, method, properties)
@@ -407,7 +412,7 @@ def test_channel_start_consuming(self):
407412
header = ContentHeader(body_size=message_len)
408413
body = ContentBody(value=message)
409414

410-
channel._inbound = [deliver, header, body]
415+
channel._inbound = collections.deque([deliver, header, body])
411416

412417
def callback(msg):
413418
self.msg = msg
@@ -436,7 +441,7 @@ def add_inbound():
436441
header = ContentHeader(body_size=message_len)
437442
body = ContentBody(value=message)
438443

439-
channel._inbound = [deliver, header, body]
444+
channel._inbound = collections.deque([deliver, header, body])
440445

441446
def callback(msg):
442447
self.msg = msg
@@ -476,11 +481,11 @@ def test_channel_start_consuming_multiple_callbacks(self):
476481
header = ContentHeader(body_size=message_len)
477482
body = ContentBody(value=message)
478483

479-
channel._inbound = [
484+
channel._inbound = collections.deque([
480485
deliver_one, header, body,
481486
deliver_two, header, body,
482487
deliver_three, header, body
483-
]
488+
])
484489

485490
def callback_one(msg):
486491
self.assertEqual(msg.method.get('consumer_tag'), 'travis-ci-1')

0 commit comments

Comments
 (0)