From 7bb9116d2af78730281ba7016d9c0f504a853819 Mon Sep 17 00:00:00 2001 From: Jamie Cressey Date: Wed, 30 Dec 2015 22:10:56 +0000 Subject: [PATCH 1/3] Attempt to load a transport class using the new modular system. Failback to built-in libraries and raise warning. --- beaver/transports/__init__.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/beaver/transports/__init__.py b/beaver/transports/__init__.py index a06aaa94..7823c7f7 100644 --- a/beaver/transports/__init__.py +++ b/beaver/transports/__init__.py @@ -1,22 +1,44 @@ # -*- coding: utf-8 -*- +def load_transport(module_path, class_name): + _module = __import__(module_path, globals(), locals(), class_name, -1) + return getattr(_module, class_name) + + def create_transport(beaver_config, logger): """Creates and returns a transport object""" transport_str = beaver_config.get('transport') + # allow simple names like 'redis' to load a beaver built-in transport if '.' not in transport_str: - # allow simple names like 'redis' to load a beaver built-in transport - module_path = 'beaver.transports.%s_transport' % transport_str.lower() - class_name = '%sTransport' % transport_str.title() + # Try import the new modular transport package + try: + module_path = 'beaver_{0}'.format(transport_str.lower()) + class_name = 'Transport' + transport_class = load_transport(module_path, class_name) + # Default back to built-in version and throw a deprecation warning + except ImportError: + logger.warn( + ("You are using a deprecated version of the {0} transport ", + "library which will soon be removed. Upgrade by running ", + "'pip install beaver_{0}'".format( + transport_str.lower()))) + module_path = 'beaver.transports.{0}_transport'.format( + transport_str.lower()) + class_name = '{0}Transport'.format( + transport_str.title()) + transport_class = load_transport(module_path, class_name) else: # allow dotted path names to load a custom transport class try: module_path, class_name = transport_str.rsplit('.', 1) except ValueError: - raise Exception('Invalid transport {0}'.format(beaver_config.get('transport'))) + raise Exception( + 'Invalid transport {0}'.format( + beaver_config.get('transport'))) + + transport_class = load_transport(module_path, class_name) - _module = __import__(module_path, globals(), locals(), class_name, -1) - transport_class = getattr(_module, class_name) transport = transport_class(beaver_config=beaver_config, logger=logger) return transport From fc9bbe5f0f952f4d9a02b1095b54c71e58f848e2 Mon Sep 17 00:00:00 2001 From: Jamie Cressey Date: Wed, 30 Dec 2015 22:26:37 +0000 Subject: [PATCH 2/3] Test against the new SQS module --- requirements/tests.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements/tests.txt b/requirements/tests.txt index a7775cc6..8c51cc04 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -6,3 +6,4 @@ six unittest2 coveralls moto +beaver_sqs From 0cbcde947471a931476e2aee320a3c57349e68b1 Mon Sep 17 00:00:00 2001 From: Jamie Cressey Date: Wed, 30 Dec 2015 22:29:53 +0000 Subject: [PATCH 3/3] Fixing SQS tests to use the new module --- beaver/tests/test_sqs_transport.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/beaver/tests/test_sqs_transport.py b/beaver/tests/test_sqs_transport.py index 6b9521c1..cc98d6b3 100644 --- a/beaver/tests/test_sqs_transport.py +++ b/beaver/tests/test_sqs_transport.py @@ -9,7 +9,7 @@ import tempfile import logging -import beaver +import beaver_sqs from beaver.config import BeaverConfig from beaver.transports import create_transport from beaver.unicode_dammit import unicode_dammit @@ -49,7 +49,7 @@ def test_sqs_default_auth_profile(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -62,7 +62,7 @@ def test_sqs_auth_profile(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) @mock_sqs def test_sqs_auth_key(cls): @@ -74,7 +74,7 @@ def test_sqs_auth_key(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -88,7 +88,7 @@ def test_sqs_auth_account_id(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -101,7 +101,7 @@ def test_sqs_single_queue(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -115,7 +115,7 @@ def test_sqs_single_queue_bulklines(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -129,7 +129,7 @@ def test_sqs_multi_queue(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -143,7 +143,7 @@ def test_sqs_multi_queue_bulklines(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) transport.interrupt() @mock_sqs @@ -157,7 +157,7 @@ def test_sqs_send_single_queue(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) data = {} lines = [] @@ -185,7 +185,7 @@ def test_sqs_send_multi_queue(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) data = {} lines = [] @@ -213,7 +213,7 @@ def test_sqs_send_single_queue_bulklines(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) data = {} lines = [] @@ -241,7 +241,7 @@ def test_sqs_send_multi_queue_bulklines(cls): transport = create_transport(cls.beaver_config, logger=cls.logger) - cls.assertIsInstance(transport, beaver.transports.sqs_transport.SqsTransport) + cls.assertIsInstance(transport, beaver_sqs.Transport) data = {} lines = []