[
https://issues.apache.org/jira/browse/BEAM-7746?focusedWorklogId=491458&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-491458
]
ASF GitHub Bot logged work on BEAM-7746:
----------------------------------------
Author: ASF GitHub Bot
Created on: 25/Sep/20 23:31
Start Date: 25/Sep/20 23:31
Worklog Time Spent: 10m
Work Description: 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]
Issue Time Tracking
-------------------
Worklog Id: (was: 491458)
Time Spent: 102h 50m (was: 102h 40m)
> Add type hints to python code
> -----------------------------
>
> Key: BEAM-7746
> URL: https://issues.apache.org/jira/browse/BEAM-7746
> Project: Beam
> Issue Type: New Feature
> Components: sdk-py-core
> Reporter: Chad Dombrova
> Priority: P3
> Time Spent: 102h 50m
> Remaining Estimate: 0h
>
> As a developer of the beam source code, I would like the code to use pep484
> type hints so that I can clearly see what types are required, get completion
> in my IDE, and enforce code correctness via a static analyzer like mypy.
> This may be considered a precursor to BEAM-7060
> Work has been started here: [https://github.com/apache/beam/pull/9056]
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)