deb-murano/murano/common/messaging/subscription.py
zhu.rong 8d2a8933ce Fix the run_test unchecked pep8 W503 and E402 errors
Now thw flake8 did not check W503 and E402 errors,
1.E402 module level import not at top of file
2.W503 line break before binary operator
This patch fix it

Change-Id: Ieae4f2f23d2aa0fd1e19ef770c2f1ce6aef30f79
2015-09-26 13:43:55 +08:00

67 lines
2.2 KiB
Python

# Copyright (c) 2013 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import collections
import socket
import time
from eventlet import patcher
from murano.common.messaging import message
kombu = patcher.import_patched('kombu')
class Subscription(object):
def __init__(self, connection, queue, prefetch_count=1):
self._buffer = collections.deque()
self._connection = connection
self._queue = kombu.Queue(name=queue, exchange=None)
self._consumer = kombu.Consumer(self._connection, auto_declare=False)
self._consumer.register_callback(self._receive)
self._consumer.qos(prefetch_count=prefetch_count)
def __enter__(self):
self._consumer.add_queue(self._queue)
self._consumer.consume()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if self._consumer is not None:
self._consumer.cancel()
return False
def get_message(self, timeout=None):
msg_handle = self._get(timeout=timeout)
if msg_handle is None:
return None
return message.Message(self._connection, msg_handle)
def _get(self, timeout=None):
elapsed = 0.0
remaining = timeout
while True:
time_start = time.time()
if self._buffer:
return self._buffer.pop()
try:
self._connection.drain_events(timeout=timeout and remaining)
except socket.timeout:
return None
elapsed += time.time() - time_start
remaining = timeout and timeout - elapsed or None
def _receive(self, message_data, message):
self._buffer.append(message)