Add python3 support

Add support for python3 using the six library.

Change-Id: I90851ddf5a98ca05c494a49e4063e1bd233cccee
Signed-off-by: Chuck Short <chuck.short@canonical.com>
This commit is contained in:
Chuck Short 2016-11-03 14:49:04 -04:00
parent f3f0f7eb9e
commit c8266ad9e9
4 changed files with 40 additions and 22 deletions

View File

@ -17,10 +17,7 @@ import logging
import random
import socket
try:
import itertools
except ImportError:
imap = map
from six.moves import map
logging.basicConfig()
log = logging.getLogger(__name__)
@ -93,7 +90,7 @@ class Connection(object):
payload.extend(["|#"])
payload.append(dimensions)
encoded = "".join(itertools.imap(str, payload))
encoded = "".join(map(str, payload))
self._send(encoded)
def _send_to_server(self, packet):

View File

@ -1,4 +1,4 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
six>=1.9.0 # MIT

View File

@ -24,6 +24,8 @@ import unittest
import monascastatsd as mstatsd
import mock
import six
from six.moves import range
class FakeSocket(object):
@ -80,35 +82,35 @@ class TestMonascaStatsd(unittest.TestCase):
counter = self.client.get_counter(name='page.views')
counter.increment()
self.assertEqual("page.views:1|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:1|c|#{'env': 'test'}"),
self.recv(counter))
counter += 1
self.assertEqual("page.views:1|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:1|c|#{'env': 'test'}"),
self.recv(counter))
counter.increment(11)
self.assertEqual("page.views:11|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:11|c|#{'env': 'test'}"),
self.recv(counter))
counter += 11
self.assertEqual("page.views:11|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:11|c|#{'env': 'test'}"),
self.recv(counter))
counter.decrement()
self.assertEqual("page.views:-1|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:-1|c|#{'env': 'test'}"),
self.recv(counter))
counter -= 1
self.assertEqual("page.views:-1|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:-1|c|#{'env': 'test'}"),
self.recv(counter))
counter.decrement(12)
self.assertEqual("page.views:-12|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:-12|c|#{'env': 'test'}"),
self.recv(counter))
counter -= 12
self.assertEqual("page.views:-12|c|#{'env': 'test'}",
self.assertEqual(six.b("page.views:-12|c|#{'env': 'test'}"),
self.recv(counter))
def test_counter_with_dimensions(self):
@ -118,6 +120,9 @@ class TestMonascaStatsd(unittest.TestCase):
counter.increment(dimensions={'country': 'canada', 'color': 'red'})
result = self.recv(counter)
if isinstance(result, bytes):
result = result.decode('utf-8')
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
self.assertRegexpMatches(result, "'country': 'canada'")
self.assertRegexpMatches(result, "'date': '10/24'")
@ -128,6 +133,9 @@ class TestMonascaStatsd(unittest.TestCase):
counter += 1
result = self.recv(counter)
if isinstance(result, bytes):
result = result.decode('utf-8')
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
self.assertRegexpMatches(result, "'date': '10/24'")
self.assertRegexpMatches(result, "'env': 'test'")
@ -136,7 +144,11 @@ class TestMonascaStatsd(unittest.TestCase):
def test_gauge(self):
gauge = self.client.get_gauge('gauge')
gauge.send('metric', 123.4)
assert self.recv(gauge) == "gauge.metric:123.4|g|#{'env': 'test'}"
result = self.recv(gauge)
if isinstance(result, bytes):
result = result.decode('utf-8')
assert result == "gauge.metric:123.4|g|#{'env': 'test'}"
def test_gauge_with_dimensions(self):
gauge = self.client.get_gauge('gauge')
@ -146,6 +158,9 @@ class TestMonascaStatsd(unittest.TestCase):
'color': 'blue'})
result = self.recv(gauge)
if isinstance(result, bytes):
result = result.decode('utf-8')
self.assertRegexpMatches(result, "gauge.gt:123.4|g|#{")
self.assertRegexpMatches(result, "'country': 'china'")
self.assertRegexpMatches(result, "'age': 45")
@ -161,7 +176,7 @@ class TestMonascaStatsd(unittest.TestCase):
self.assert_almost_equal(3000,
len(self.client.connection.socket.payloads),
150)
self.assertEqual("sampled_counter:1|c|@0.3|#{'env': 'test'}", self.recv(counter))
self.assertEqual(six.b("sampled_counter:1|c|@0.3|#{'env': 'test'}"), self.recv(counter))
def test_samples_with_dimensions(self):
gauge = self.client.get_gauge()
@ -174,13 +189,16 @@ class TestMonascaStatsd(unittest.TestCase):
def test_timing(self):
timer = self.client.get_timer()
timer.timing('t', 123)
self.assertEqual("t:123|g|#{'env': 'test'}", self.recv(timer))
self.assertEqual(six.b("t:123|g|#{'env': 'test'}"), self.recv(timer))
def test_time(self):
timer = self.client.get_timer()
with timer.time('t'):
time.sleep(2)
packet = self.recv(timer)
if isinstance(packet, bytes):
packet = packet.decode("utf-8")
name_value, type_, dimensions = packet.split('|')
name, value = name_value.split(':')
@ -206,6 +224,9 @@ class TestMonascaStatsd(unittest.TestCase):
self.assertEqual(result, (1, 2, 1, 3))
packet = self.recv(timer)
if isinstance(packet, bytes):
packet = packet.decode("utf-8")
name_value, type_, dimensions = packet.split('|')
name, value = name_value.split(':')
@ -228,7 +249,7 @@ class TestMonascaStatsd(unittest.TestCase):
timer.timing('timer', 123)
self.client.connection.close_buffer()
self.assertEqual("site.views:123|g|#{'env': 'test'}\nsite.timer:123|g|#{'env': 'test'}",
self.assertEqual(six.b("site.views:123|g|#{'env': 'test'}\nsite.timer:123|g|#{'env': 'test'}"),
self.recv(gauge))
def test_context_manager(self):
@ -239,7 +260,7 @@ class TestMonascaStatsd(unittest.TestCase):
client.get_gauge('page').send('views', 123)
client.get_timer('page').timing('timer', 12)
self.assertEqual('ContextTester.page.views:123|g\nContextTester.page.timer:12|g',
self.assertEqual(six.b('ContextTester.page.views:123|g\nContextTester.page.timer:12|g'),
fake_socket.recv())
def test_batched_buffer_autoflush(self):
@ -250,10 +271,10 @@ class TestMonascaStatsd(unittest.TestCase):
counter = client.get_counter('mycounter')
for _ in range(51):
counter.increment()
self.assertEqual('\n'.join(['BufferedTester.mycounter:1|c' for _ in range(50)]),
self.assertEqual(six.b('\n'.join(['BufferedTester.mycounter:1|c' for _ in range(50)])),
fake_socket.recv())
self.assertEqual('BufferedTester.mycounter:1|c', fake_socket.recv())
self.assertEqual(six.b('BufferedTester.mycounter:1|c'), fake_socket.recv())
@staticmethod
def assert_almost_equal(a, b, delta):

View File

@ -1,5 +1,5 @@
[tox]
envlist = py27,pep8
envlist = py35,py27,pep8
minversion = 1.6
skipsdist = True