chadrik commented on a change in pull request #12883:
URL: https://github.com/apache/beam/pull/12883#discussion_r495317141



##########
File path: sdks/python/apache_beam/metrics/metric.py
##########
@@ -101,23 +121,26 @@ def gauge(namespace, name):
   class DelegatingCounter(Counter):
     """Metrics Counter that Delegates functionality to MetricsEnvironment."""
     def __init__(self, metric_name):
+      # type: (MetricName) -> None
       super(Metrics.DelegatingCounter, self).__init__()
       self.metric_name = metric_name
-      self.inc = MetricUpdater(cells.CounterCell, metric_name, default=1)
+      self.inc = MetricUpdater(cells.CounterCell, metric_name, default=1)  # 
type: ignore[assignment]

Review comment:
       Here's the workaround:
   
   ```python
     class DelegatingCounter(Counter):
       """Metrics Counter that Delegates functionality to MetricsEnvironment."""
       def __init__(self, metric_name):
         # type: (MetricName) -> None
         super(Metrics.DelegatingCounter, self).__init__(metric_name)
         self._inc = MetricUpdater(cells.CounterCell, metric_name, default=1)
   
       def inc(value=None):
         self._inc(value)
   ```
   
   I don't know the reasoning behind this limitation.  Even the simplest 
scenario fails on the latest version of mypy:
   
   ```python
   class Foo(object):
     x = None  # type: Callable[[], None]
   
   def blah():
     # type: () -> None
     pass
   
   class Bar(Foo):
     def __init__(self):
       # type: () -> None
       self.x = blah
   ```
   
   Note that it does work without complaint if the callable is defined on the 
class:
   
   ```python
   class Bar(Foo):
      x = blah
   ```
   
   but we can't do that because `MetricUpdater` needs the `metric_name`.
   
   So, since what's being done in this metrics code is valid python, I thought 
ignoring the error was the most expedient path.  If mypy fixes this in a future 
version, these lines will generate an "unused type ignore" error and we can get 
rid of them.
   
   




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to