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:
parent
f3f0f7eb9e
commit
c8266ad9e9
|
@ -17,10 +17,7 @@ import logging
|
||||||
import random
|
import random
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
try:
|
from six.moves import map
|
||||||
import itertools
|
|
||||||
except ImportError:
|
|
||||||
imap = map
|
|
||||||
|
|
||||||
logging.basicConfig()
|
logging.basicConfig()
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -93,7 +90,7 @@ class Connection(object):
|
||||||
payload.extend(["|#"])
|
payload.extend(["|#"])
|
||||||
payload.append(dimensions)
|
payload.append(dimensions)
|
||||||
|
|
||||||
encoded = "".join(itertools.imap(str, payload))
|
encoded = "".join(map(str, payload))
|
||||||
self._send(encoded)
|
self._send(encoded)
|
||||||
|
|
||||||
def _send_to_server(self, packet):
|
def _send_to_server(self, packet):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# The order of packages is significant, because pip processes them in the order
|
# 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
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
|
six>=1.9.0 # MIT
|
||||||
|
|
|
@ -24,6 +24,8 @@ import unittest
|
||||||
import monascastatsd as mstatsd
|
import monascastatsd as mstatsd
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
import six
|
||||||
|
from six.moves import range
|
||||||
|
|
||||||
|
|
||||||
class FakeSocket(object):
|
class FakeSocket(object):
|
||||||
|
@ -80,35 +82,35 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
counter = self.client.get_counter(name='page.views')
|
counter = self.client.get_counter(name='page.views')
|
||||||
|
|
||||||
counter.increment()
|
counter.increment()
|
||||||
self.assertEqual("page.views:1|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:1|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter += 1
|
counter += 1
|
||||||
self.assertEqual("page.views:1|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:1|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter.increment(11)
|
counter.increment(11)
|
||||||
self.assertEqual("page.views:11|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:11|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter += 11
|
counter += 11
|
||||||
self.assertEqual("page.views:11|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:11|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter.decrement()
|
counter.decrement()
|
||||||
self.assertEqual("page.views:-1|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:-1|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter -= 1
|
counter -= 1
|
||||||
self.assertEqual("page.views:-1|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:-1|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter.decrement(12)
|
counter.decrement(12)
|
||||||
self.assertEqual("page.views:-12|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:-12|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
counter -= 12
|
counter -= 12
|
||||||
self.assertEqual("page.views:-12|c|#{'env': 'test'}",
|
self.assertEqual(six.b("page.views:-12|c|#{'env': 'test'}"),
|
||||||
self.recv(counter))
|
self.recv(counter))
|
||||||
|
|
||||||
def test_counter_with_dimensions(self):
|
def test_counter_with_dimensions(self):
|
||||||
|
@ -118,6 +120,9 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
counter.increment(dimensions={'country': 'canada', 'color': 'red'})
|
counter.increment(dimensions={'country': 'canada', 'color': 'red'})
|
||||||
|
|
||||||
result = self.recv(counter)
|
result = self.recv(counter)
|
||||||
|
if isinstance(result, bytes):
|
||||||
|
result = result.decode('utf-8')
|
||||||
|
|
||||||
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
|
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
|
||||||
self.assertRegexpMatches(result, "'country': 'canada'")
|
self.assertRegexpMatches(result, "'country': 'canada'")
|
||||||
self.assertRegexpMatches(result, "'date': '10/24'")
|
self.assertRegexpMatches(result, "'date': '10/24'")
|
||||||
|
@ -128,6 +133,9 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
counter += 1
|
counter += 1
|
||||||
|
|
||||||
result = self.recv(counter)
|
result = self.recv(counter)
|
||||||
|
if isinstance(result, bytes):
|
||||||
|
result = result.decode('utf-8')
|
||||||
|
|
||||||
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
|
self.assertRegexpMatches(result, "counter_with_dims:1|c|#{")
|
||||||
self.assertRegexpMatches(result, "'date': '10/24'")
|
self.assertRegexpMatches(result, "'date': '10/24'")
|
||||||
self.assertRegexpMatches(result, "'env': 'test'")
|
self.assertRegexpMatches(result, "'env': 'test'")
|
||||||
|
@ -136,7 +144,11 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
def test_gauge(self):
|
def test_gauge(self):
|
||||||
gauge = self.client.get_gauge('gauge')
|
gauge = self.client.get_gauge('gauge')
|
||||||
gauge.send('metric', 123.4)
|
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):
|
def test_gauge_with_dimensions(self):
|
||||||
gauge = self.client.get_gauge('gauge')
|
gauge = self.client.get_gauge('gauge')
|
||||||
|
@ -146,6 +158,9 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
'color': 'blue'})
|
'color': 'blue'})
|
||||||
|
|
||||||
result = self.recv(gauge)
|
result = self.recv(gauge)
|
||||||
|
if isinstance(result, bytes):
|
||||||
|
result = result.decode('utf-8')
|
||||||
|
|
||||||
self.assertRegexpMatches(result, "gauge.gt:123.4|g|#{")
|
self.assertRegexpMatches(result, "gauge.gt:123.4|g|#{")
|
||||||
self.assertRegexpMatches(result, "'country': 'china'")
|
self.assertRegexpMatches(result, "'country': 'china'")
|
||||||
self.assertRegexpMatches(result, "'age': 45")
|
self.assertRegexpMatches(result, "'age': 45")
|
||||||
|
@ -161,7 +176,7 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
self.assert_almost_equal(3000,
|
self.assert_almost_equal(3000,
|
||||||
len(self.client.connection.socket.payloads),
|
len(self.client.connection.socket.payloads),
|
||||||
150)
|
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):
|
def test_samples_with_dimensions(self):
|
||||||
gauge = self.client.get_gauge()
|
gauge = self.client.get_gauge()
|
||||||
|
@ -174,13 +189,16 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
def test_timing(self):
|
def test_timing(self):
|
||||||
timer = self.client.get_timer()
|
timer = self.client.get_timer()
|
||||||
timer.timing('t', 123)
|
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):
|
def test_time(self):
|
||||||
timer = self.client.get_timer()
|
timer = self.client.get_timer()
|
||||||
with timer.time('t'):
|
with timer.time('t'):
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
packet = self.recv(timer)
|
packet = self.recv(timer)
|
||||||
|
if isinstance(packet, bytes):
|
||||||
|
packet = packet.decode("utf-8")
|
||||||
|
|
||||||
name_value, type_, dimensions = packet.split('|')
|
name_value, type_, dimensions = packet.split('|')
|
||||||
name, value = name_value.split(':')
|
name, value = name_value.split(':')
|
||||||
|
|
||||||
|
@ -206,6 +224,9 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
self.assertEqual(result, (1, 2, 1, 3))
|
self.assertEqual(result, (1, 2, 1, 3))
|
||||||
|
|
||||||
packet = self.recv(timer)
|
packet = self.recv(timer)
|
||||||
|
if isinstance(packet, bytes):
|
||||||
|
packet = packet.decode("utf-8")
|
||||||
|
|
||||||
name_value, type_, dimensions = packet.split('|')
|
name_value, type_, dimensions = packet.split('|')
|
||||||
name, value = name_value.split(':')
|
name, value = name_value.split(':')
|
||||||
|
|
||||||
|
@ -228,7 +249,7 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
timer.timing('timer', 123)
|
timer.timing('timer', 123)
|
||||||
self.client.connection.close_buffer()
|
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))
|
self.recv(gauge))
|
||||||
|
|
||||||
def test_context_manager(self):
|
def test_context_manager(self):
|
||||||
|
@ -239,7 +260,7 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
client.get_gauge('page').send('views', 123)
|
client.get_gauge('page').send('views', 123)
|
||||||
client.get_timer('page').timing('timer', 12)
|
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())
|
fake_socket.recv())
|
||||||
|
|
||||||
def test_batched_buffer_autoflush(self):
|
def test_batched_buffer_autoflush(self):
|
||||||
|
@ -250,10 +271,10 @@ class TestMonascaStatsd(unittest.TestCase):
|
||||||
counter = client.get_counter('mycounter')
|
counter = client.get_counter('mycounter')
|
||||||
for _ in range(51):
|
for _ in range(51):
|
||||||
counter.increment()
|
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())
|
fake_socket.recv())
|
||||||
|
|
||||||
self.assertEqual('BufferedTester.mycounter:1|c', fake_socket.recv())
|
self.assertEqual(six.b('BufferedTester.mycounter:1|c'), fake_socket.recv())
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def assert_almost_equal(a, b, delta):
|
def assert_almost_equal(a, b, delta):
|
||||||
|
|
Loading…
Reference in New Issue