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]