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