[ 
https://issues.apache.org/jira/browse/BEAM-12920?focusedWorklogId=723985&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-723985
 ]

ASF GitHub Bot logged work on BEAM-12920:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 09/Feb/22 20:12
            Start Date: 09/Feb/22 20:12
    Worklog Time Spent: 10m 
      Work Description: tvalentyn commented on a change in pull request #16791:
URL: https://github.com/apache/beam/pull/16791#discussion_r803049762



##########
File path: sdks/python/apache_beam/typehints/native_type_compatibility.py
##########
@@ -258,11 +258,11 @@ def convert_to_beam_type(typ):
     elif _match_is_union(typ):
       raise ValueError('Unsupported Union with no arguments.')
     elif _match_issubclass(typing.Generator)(typ):
-      raise ValueError('Unsupported Generator with no arguments.')
+      # Assume a simple generator.
+      args = [typehints.TypeVariable('T_co'), type(None), type(None)]

Review comment:
       fixed, thanks!




-- 
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.

To unsubscribe, e-mail: [email protected]

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


Issue Time Tracking
-------------------

    Worklog Id:     (was: 723985)
    Time Spent: 1h  (was: 50m)

> Convert To Bare Types Fails on Generators in Python 3.9
> -------------------------------------------------------
>
>                 Key: BEAM-12920
>                 URL: https://issues.apache.org/jira/browse/BEAM-12920
>             Project: Beam
>          Issue Type: Sub-task
>          Components: sdk-py-core
>    Affects Versions: 2.32.0
>         Environment: Python 3.9.7
> Linux Mint 20.2, Kernel: 5.4.0-84-generic
>            Reporter: Jonathan Hourany
>            Assignee: Valentyn Tymofieiev
>            Priority: P2
>             Fix For: Not applicable
>
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> In Python 3.9 the test 
> [test_convert_bare_types|https://github.com/apache/beam/blob/6c1c19d6c711babf5f5f042fa465be20948caff6/sdks/python/apache_beam/typehints/native_type_compatibility.py#L40]
>  fails when testing the following Generator test case
> {code:python}
> test_cases += [
>           (
>               'bare generator',
>               typing.Generator,
>               typehints.Generator[typehints.TypeVariable('T_co')]),
>       ]
> {code}
> Raising the following {{ValueError}}
> {noformat}
> ./sdks/python/apache_beam/typehints/native_type_compatibility_test.py::NativeTypeCompatibilityTest::test_convert_bare_types
>  Failed: [undefined]ValueError: Unsupported Generator with no arguments.
> {noformat}
> ----
> The immediate cause may be stemming from 
> [_get_args|https://github.com/apache/beam/blob/6c1c19d6c711babf5f5f042fa465be20948caff6/sdks/python/apache_beam/typehints/native_type_compatibility.py#L40]
>  which attempts to access a type's ___args___ attribute. In Python 3.9 bare 
> generators no longer instantiate with a default ___args___ attribute. Only 
> when instantiated with args do they get one (see example below).
> However,  despite it's name the test doesn't create a generator that's 
> totally bare, so the deeper cause may be coming from the way 
> {{typinghints.Generator}} is constructed.
> h3. Examples
> {code:python}
> # Python 3.7.5
> In [1]: from typing import Generator
> In [2]: Generator.__args__
> Out[2]: (+T_co, -T_contra, +V_co)
> {code}
> ----
> {code:python}
> # Python 3.9.7
> In [1]: from typing import Generator
> In [2]: Generator.__args__
> ---------------------------------------------------------------------------
> AttributeError                            Traceback (most recent call last)
> <ipython-input-2-3e272b948083> in <module>
> ----> 1 Generator.__args__
> ~/.pyenv/versions/3.9.7/lib/python3.9/typing.py in __getattr__(self, attr)
>     704         if '__origin__' in self.__dict__ and not _is_dunder(attr):
>     705             return getattr(self.__origin__, attr)
> --> 706         raise AttributeError(attr)
>     707 
>     708     def __setattr__(self, attr, val):
> AttributeError: __args__
> In [3]: # Initializing with args, however, creates the needed attr
> In [4]: Generator[int, int, int].__args__
> Out[4]: (int, int, int)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to