[ 
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)

Reply via email to