You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by pa...@apache.org on 2020/11/21 00:23:39 UTC

[beam] branch master updated: Restore original str() behaviour to MetricName, for user counter(namespace+name) style MetricNames

This is an automated email from the ASF dual-hosted git repository.

pabloem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 60e0221  Restore original str() behaviour to MetricName, for user counter(namespace+name) style MetricNames
     new 6851109  Merge pull request #13400 from Restore original str() behaviour to MetricName, for user counter(namespace+name) style MetricNames
60e0221 is described below

commit 60e02218b41510686ccd828f09db779d52041c48
Author: Alex Amato <aj...@google.com>
AuthorDate: Fri Nov 20 14:41:45 2020 -0800

    Restore original str() behaviour to MetricName, for user counter(namespace+name) style MetricNames
---
 sdks/python/apache_beam/metrics/metric_test.py | 16 ++++++++++++++++
 sdks/python/apache_beam/metrics/metricbase.py  |  8 ++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/sdks/python/apache_beam/metrics/metric_test.py b/sdks/python/apache_beam/metrics/metric_test.py
index 09f1902..a0f75ed 100644
--- a/sdks/python/apache_beam/metrics/metric_test.py
+++ b/sdks/python/apache_beam/metrics/metric_test.py
@@ -137,6 +137,22 @@ class MetricsTest(unittest.TestCase):
     with self.assertRaises(ValueError):
       Metrics.distribution("", "names")
 
+  # Do not change the behaviour of str(), do tno update/delete this test case
+  # if the behaviour of str() is changed. Doing so will
+  # break end user beam code which depends on the str() behaviour.
+  def test_user_metric_name_str(self):
+    mn = MetricName("my_namespace", "my_name")
+    expected_str = 'MetricName(namespace=my_namespace, name=my_name)'
+    self.assertEqual(str(mn), expected_str)
+
+  def test_general_urn_metric_name_str(self):
+    mn = MetricName(
+        "my_namespace", "my_name", urn='my_urn', labels={'key': 'value'})
+    expected_str = (
+        "MetricName(namespace=my_namespace, name=my_name, "
+        "urn=my_urn, labels={'key': 'value'})")
+    self.assertEqual(str(mn), expected_str)
+
   @attr('ValidatesRunner')
   def test_user_counter_using_pardo(self):
     class SomeDoFn(beam.DoFn):
diff --git a/sdks/python/apache_beam/metrics/metricbase.py b/sdks/python/apache_beam/metrics/metricbase.py
index f29641e..b89b4bb 100644
--- a/sdks/python/apache_beam/metrics/metricbase.py
+++ b/sdks/python/apache_beam/metrics/metricbase.py
@@ -87,8 +87,12 @@ class MetricName(object):
     return not self == other
 
   def __str__(self):
-    return 'MetricName(namespace={}, name={}, urn={}, labels={})'.format(
-        self.namespace, self.name, self.urn, self.labels)
+    if self.urn:
+      return 'MetricName(namespace={}, name={}, urn={}, labels={})'.format(
+          self.namespace, self.name, self.urn, self.labels)
+    else:  # User counter case.
+      return 'MetricName(namespace={}, name={})'.format(
+          self.namespace, self.name)
 
   def __hash__(self):
     return hash((self.namespace, self.name, self.urn) +