Merge "Kill ability to specify exchange in transport URL"
This commit is contained in:
@@ -24,7 +24,6 @@ from oslo import messaging
|
||||
from oslo.messaging._drivers import amqp as rpc_amqp
|
||||
from oslo.messaging._drivers import base
|
||||
from oslo.messaging._drivers import common as rpc_common
|
||||
from oslo.messaging import _urls as urls
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@@ -246,7 +245,7 @@ class AMQPDriverBase(base.BaseDriver):
|
||||
super(AMQPDriverBase, self).__init__(conf, url, default_exchange,
|
||||
allowed_remote_exmods)
|
||||
|
||||
self._default_exchange = urls.exchange_from_url(url, default_exchange)
|
||||
self._default_exchange = default_exchange
|
||||
|
||||
# FIXME(markmc): temp hack
|
||||
if self._default_exchange:
|
||||
|
||||
@@ -22,7 +22,6 @@ import time
|
||||
|
||||
from oslo import messaging
|
||||
from oslo.messaging._drivers import base
|
||||
from oslo.messaging import _urls as urls
|
||||
|
||||
|
||||
class FakeIncomingMessage(base.IncomingMessage):
|
||||
@@ -92,7 +91,7 @@ class FakeDriver(base.BaseDriver):
|
||||
super(FakeDriver, self).__init__(conf, url, default_exchange,
|
||||
allowed_remote_exmods=[])
|
||||
|
||||
self._default_exchange = urls.exchange_from_url(url, default_exchange)
|
||||
self._default_exchange = default_exchange
|
||||
|
||||
self._exchanges_lock = threading.Lock()
|
||||
self._exchanges = {}
|
||||
|
||||
@@ -16,17 +16,17 @@
|
||||
import urlparse
|
||||
|
||||
|
||||
def parse_url(url, default_exchange=None):
|
||||
def parse_url(url):
|
||||
"""Parse an url.
|
||||
|
||||
Assuming a URL takes the form of:
|
||||
|
||||
transport://user:pass@host1:port[,hostN:portN]/exchange[?opt=val]
|
||||
transport://user:pass@host1:port[,hostN:portN]/virtual_host[?opt=val]
|
||||
|
||||
then parse the URL and return a dictionary with the following structure:
|
||||
|
||||
{
|
||||
'exchange': 'exchange'
|
||||
'virtual_host': 'virtual_host',
|
||||
'transport': 'transport',
|
||||
'hosts': [{'username': 'username',
|
||||
'password': 'password'
|
||||
@@ -62,12 +62,10 @@ def parse_url(url, default_exchange=None):
|
||||
|
||||
:param url: The URL to parse
|
||||
:type url: str
|
||||
:param default_exchange: what to return if no exchange found in URL
|
||||
:type default_exchange: str
|
||||
:returns: A dictionary with the parsed data
|
||||
"""
|
||||
if not url:
|
||||
return dict(exchange=default_exchange)
|
||||
return None
|
||||
|
||||
# NOTE(flaper87): Not PY3K compliant
|
||||
if not isinstance(url, basestring):
|
||||
@@ -77,12 +75,10 @@ def parse_url(url, default_exchange=None):
|
||||
|
||||
parsed = dict(transport=url.scheme)
|
||||
|
||||
exchange = None
|
||||
virtual_host = None
|
||||
if url.path.startswith('/'):
|
||||
exchange = url.path[1:].split('/')[0]
|
||||
if not exchange:
|
||||
exchange = default_exchange
|
||||
parsed["exchange"] = exchange
|
||||
virtual_host = url.path[1:]
|
||||
parsed["virtual_host"] = virtual_host
|
||||
|
||||
# NOTE(flaper87): Parse netloc.
|
||||
hosts = []
|
||||
@@ -113,20 +109,3 @@ def parse_url(url, default_exchange=None):
|
||||
parsed['parameters'] = parameters
|
||||
|
||||
return parsed
|
||||
|
||||
|
||||
def exchange_from_url(url, default_exchange=None):
|
||||
"""Parse an exchange name from a URL.
|
||||
|
||||
Assuming a URL takes the form of:
|
||||
|
||||
transport:///myexchange
|
||||
|
||||
then parse the URL and return the exchange name.
|
||||
|
||||
:param url: the URL to parse
|
||||
:type url: str
|
||||
:param default_exchange: what to return if no exchange found in URL
|
||||
:type default_exchange: str
|
||||
"""
|
||||
return parse_url(url, default_exchange)['exchange']
|
||||
|
||||
@@ -134,7 +134,7 @@ def get_transport(conf, url=None, allowed_remote_exmods=[]):
|
||||
|
||||
An example transport URL might be::
|
||||
|
||||
rabbit://me:passwd@host:5672/myexchange
|
||||
rabbit://me:passwd@host:5672/virtual_host
|
||||
|
||||
:param conf: the user configuration
|
||||
:type conf: cfg.ConfigOpts
|
||||
|
||||
@@ -22,69 +22,31 @@ from tests import utils as test_utils
|
||||
load_tests = testscenarios.load_tests_apply_scenarios
|
||||
|
||||
|
||||
class TestExchangeFromURL(test_utils.BaseTestCase):
|
||||
|
||||
_notset = object()
|
||||
|
||||
scenarios = [
|
||||
('none_url_no_default',
|
||||
dict(url=None, default=_notset, expect=None)),
|
||||
('empty_url_no_default',
|
||||
dict(url='', default=_notset, expect=None)),
|
||||
('empty_url_none_default',
|
||||
dict(url='foo:///', default=None, expect=None)),
|
||||
('empty_url_with_default',
|
||||
dict(url='foo:///', default='bar', expect='bar')),
|
||||
('url_with_no_default',
|
||||
dict(url='foo:///bar', default=_notset, expect='bar')),
|
||||
('url_with_none_default',
|
||||
dict(url='foo:///bar', default=None, expect='bar')),
|
||||
('url_with_none_default',
|
||||
dict(url='foo:///bar', default='blaa', expect='bar')),
|
||||
('multipart_url',
|
||||
dict(url='foo:///bar/blaa', default=None, expect='bar')),
|
||||
('invalid_url',
|
||||
dict(url='hooha', default='blaa', expect='blaa')),
|
||||
]
|
||||
|
||||
def test_exchange_from_url(self):
|
||||
kwargs = {}
|
||||
if self.default is not self._notset:
|
||||
kwargs['default_exchange'] = self.default
|
||||
|
||||
self.assertEqual(urls.exchange_from_url(self.url, **kwargs),
|
||||
self.expect)
|
||||
|
||||
|
||||
class TestParseURL(test_utils.BaseTestCase):
|
||||
|
||||
scenarios = [
|
||||
('transport',
|
||||
dict(url='foo:',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange=None,
|
||||
virtual_host=None,
|
||||
hosts=[],
|
||||
parameters={}))),
|
||||
('default_exchange',
|
||||
dict(url='foo:///bar',
|
||||
default_exchange='bar',
|
||||
('virtual_host_slash',
|
||||
dict(url='foo:////',
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='/',
|
||||
hosts=[],
|
||||
parameters={}))),
|
||||
('exchange',
|
||||
('virtual_host',
|
||||
dict(url='foo:///bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[],
|
||||
parameters={}))),
|
||||
('host',
|
||||
dict(url='foo://host/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host',
|
||||
username='',
|
||||
@@ -93,9 +55,8 @@ class TestParseURL(test_utils.BaseTestCase):
|
||||
parameters={}))),
|
||||
('port',
|
||||
dict(url='foo://host:1234/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host:1234',
|
||||
username='',
|
||||
@@ -104,9 +65,8 @@ class TestParseURL(test_utils.BaseTestCase):
|
||||
parameters={}))),
|
||||
('username',
|
||||
dict(url='foo://u@host:1234/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host:1234',
|
||||
username='u',
|
||||
@@ -115,9 +75,8 @@ class TestParseURL(test_utils.BaseTestCase):
|
||||
parameters={}))),
|
||||
('password',
|
||||
dict(url='foo://u:p@host:1234/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host:1234',
|
||||
username='u',
|
||||
@@ -126,9 +85,8 @@ class TestParseURL(test_utils.BaseTestCase):
|
||||
parameters={}))),
|
||||
('multi_host',
|
||||
dict(url='foo://u:p@host1:1234,host2:4321/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host1:1234',
|
||||
username='u',
|
||||
@@ -140,9 +98,8 @@ class TestParseURL(test_utils.BaseTestCase):
|
||||
parameters={}))),
|
||||
('multi_creds',
|
||||
dict(url='foo://u1:p1@host1:1234,u2:p2@host2:4321/bar',
|
||||
default_exchange=None,
|
||||
expect=dict(transport='foo',
|
||||
exchange='bar',
|
||||
virtual_host='bar',
|
||||
hosts=[
|
||||
dict(host='host1:1234',
|
||||
username='u1',
|
||||
|
||||
Reference in New Issue
Block a user