From 50b7e147b435f9ee7f076c367addf34fb7ccff1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl>
Date: Mon, 7 Jun 2021 16:24:28 +0200
Subject: [PATCH] 2.17.2

---
 CHANGELOG.md                                           |  2 ++
 satella/__init__.py                                    |  2 +-
 satella/instrumentation/metrics/metric_types/simple.py |  5 ++++-
 tests/test_coding/test_concurrent.py                   | 10 +++++-----
 .../test_instrumentation/test_metrics/test_metrics.py  |  6 ++++++
 5 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1dec1f20..cb60eea2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,2 +1,4 @@
 # v2.17.2
 
+* **bugfix release** default values for metrics
+
diff --git a/satella/__init__.py b/satella/__init__.py
index 123e9fd7..cee49d06 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.17.2a1'
+__version__ = '2.17.2'
diff --git a/satella/instrumentation/metrics/metric_types/simple.py b/satella/instrumentation/metrics/metric_types/simple.py
index eae3726c..03c844dc 100644
--- a/satella/instrumentation/metrics/metric_types/simple.py
+++ b/satella/instrumentation/metrics/metric_types/simple.py
@@ -11,10 +11,11 @@ class SimpleMetric(EmbeddedSubmetrics):
 
     CLASS_NAME = 'string'
     CONSTRUCTOR = str
+    DEFAULT_VALUE = ''
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.data = None  # type: tp.Any
+        self.data = self.DEFAULT_VALUE  # type: tp.Any
 
     def _handle(self, value, **labels) -> None:
         if self.embedded_submetrics_enabled or labels:
@@ -33,9 +34,11 @@ class SimpleMetric(EmbeddedSubmetrics):
 class IntegerMetric(SimpleMetric):
     CLASS_NAME = 'int'
     CONSTRUCTOR = int
+    DEFAULT_VALUE = 0
 
 
 @register_metric
 class FloatMetric(SimpleMetric, MeasurableMixin):
     CLASS_NAME = 'float'
     CONSTRUCTOR = float
+    DEFAULT_VALUE = 0.0
diff --git a/tests/test_coding/test_concurrent.py b/tests/test_coding/test_concurrent.py
index 49db4072..cdbff9c6 100644
--- a/tests/test_coding/test_concurrent.py
+++ b/tests/test_coding/test_concurrent.py
@@ -485,15 +485,16 @@ class TestConcurrent(unittest.TestCase):
     @unittest.skipUnless(sys.implementation.name == 'cpython', 'Does not work on PyPy :(')
     def test_condition(self):
         dct = {'a': False}
+        slf = self
         cond = Condition()
         interlock_cond = Condition()
 
         class MyThread(TerminableThread):
-            def run(self2) -> None:
-                self2.safe_sleep(-2)
-                self2.safe_sleep(0.5)
+            def run(self) -> None:
+                self.safe_sleep(-2)
+                self.safe_sleep(0.5)
                 interlock_cond.notify()
-                self.assertRaises(WouldWaitMore, lambda: cond.wait(timeout=0.5))
+                slf.assertRaises(WouldWaitMore, lambda: cond.wait(timeout=0.5))
                 cond.wait(timeout=0.5, dont_raise=True)
                 cond.wait()
                 dct['a'] = True
@@ -590,7 +591,6 @@ class TestConcurrent(unittest.TestCase):
 
         mtt = MyTerminableThread()
         mtt.start()
-        a = mtt.a
         time.sleep(0.3)
         self.assertIn(mtt.a, (1, 2))
         self.assertFalse(mtt.overrun)
diff --git a/tests/test_instrumentation/test_metrics/test_metrics.py b/tests/test_instrumentation/test_metrics/test_metrics.py
index d64ee8c2..df00b539 100644
--- a/tests/test_instrumentation/test_metrics/test_metrics.py
+++ b/tests/test_instrumentation/test_metrics/test_metrics.py
@@ -29,6 +29,12 @@ class TestMetric(unittest.TestCase):
         kid = choose('.kid', data)
         self.assertIsNone(kid)
 
+    def test_default_float(self):
+        met = getMetric('test.float', 'float')
+        data = met.to_metric_data()
+        v = choose('', data)
+        self.assertEqual(v.value, 0.0)
+
     def test_uptime_metric(self):
         up_metric = getMetric('uptime.metric', 'uptime')
         time.sleep(1)
-- 
GitLab