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

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

                Author: ASF GitHub Bot
            Created on: 09/Feb/22 17:05
            Start Date: 09/Feb/22 17:05
    Worklog Time Spent: 10m 
      Work Description: tvalentyn opened a new pull request #16791:
URL: https://github.com/apache/beam/pull/16791


   Assume that bare generator types define simple generators.
   The only type of generators that beam currently handles are simple 
generators: 
https://github.com/apache/beam/blob/d7ee6b8c8b4fedb05d31d6554ab55a6d4bca0356/sdks/python/apache_beam/typehints/typehints.py#L1120
   
   This test started to fail on Python 3.9 because bare Generator instances on 
Python <3.9 were not truly 'bare' and still had __args__ defined, we defined 
inferred a hint for bare geneators and didn't fail. Preserving this behavior 
for Python 3.9+ as well. 


-- 
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: 723807)
    Remaining Estimate: 0h
            Time Spent: 10m

> 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: 10m
>  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