[jira] [Updated] (THRIFT-5715) Python 3.11 Immutable errors can't be used with contextlib.contextmanager
[ https://issues.apache.org/jira/browse/THRIFT-5715?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jens Geyer updated THRIFT-5715: --- Issue Type: Improvement (was: Bug) > Python 3.11 Immutable errors can't be used with contextlib.contextmanager > - > > Key: THRIFT-5715 > URL: https://issues.apache.org/jira/browse/THRIFT-5715 > Project: Thrift > Issue Type: Improvement > Components: Python - Compiler >Affects Versions: 0.14.1, 0.16.0, 0.18.1 > Environment: The client runtime is the python:3.10 and python:3.11 > docker images from dockerhub, installing the latest thrift library from pypi. > > The thrift compiler is installed on debian (v0.14.1 and v0.18.1) or ubuntu > (v0.16.0). >Reporter: Katie Atkinson >Priority: Major > > Generated Thrift IDLs create exceptions that are immutable. In Python 3.11 > contextlib manipulates exceptions to update tracebacks. When a Thrift client > raises an error within a context manager the context manager fails. This > doesn't happen with Python 3.10. > This example uses > [tutorial.thrift|https://github.com/apache/thrift/blob/master/tutorial/tutorial.thrift]. > I compiled the IDL with versions v0.14.1, v0.16. and v0.18.1, each with the > same result. > > {code:java} > // contextmanager.py > import contextlib > import syssys.path.append('gen-py') > from tutorial.ttypes import InvalidOperation > @contextlib.contextmanager > def example(): > yield > return > def main(): > with example(): > raise InvalidOperation > if __name__ == "__main__": > main() {code} > > > {code:java} > # Run in script in Python 3.11 > py (master) $ docker run -it --rm --volume /home/katie/python/thrift:/code > --workdir /code/tutorial/py python:3.11 /bin/sh -c "pip install thrift && > python contextmanager.py" > Collecting thrift > Downloading thrift-0.16.0.tar.gz (59 kB) > [?25l [90m[0m [32m0.0/59.6 kB[0m > [31m?[0m eta [36m-:--:--[0m > [2K [91m[0m[91m╸[0m[90m━━━[0m > [32m30.7/59.6 kB[0m [31m1.2 MB/s[0m eta [36m0:00:01[0m > [2K [91m[0m[91m╸[0m[90m━━━[0m > [32m30.7/59.6 kB[0m [31m1.2 MB/s[0m eta [36m0:00:01[0m > [2K [90m━━━[0m [32m59.6/59.6 kB[0m > [31m535.6 kB/s[0m eta [36m0:00:00[0m > [?25h Preparing metadata (setup.py) ... [?25l- done > [?25hCollecting six>=1.7.2 > Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) > Building wheels for collected packages: thrift > Building wheel for thrift (setup.py) ... [?25l- \ | / - \ done > [?25h Created wheel for thrift: > filename=thrift-0.16.0-cp311-cp311-linux_x86_64.whl size=509416 > sha256=29702930fd4c49e8f70b568ae03ab3a2a0e46ce92c620ec6a7113432fb59d9e5 > Stored in directory: > /root/.cache/pip/wheels/29/6e/43/fe5a143fd6ed0ca5c385a5dba8a445de49cb3e66013095074d > Successfully built thrift > Installing collected packages: six, thrift > Successfully installed six-1.16.0 thrift-0.16.0 > [33mWARNING: Running pip as the 'root' user can result in broken permissions > and conflicting behaviour with the system package manager. It is recommended > to use a virtual environment instead: https://pip.pypa.io/warnings/venv[0m[33m > [0m > [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m A new release of pip available: > [0m[31;49m22.3.1[0m[39;49m -> [0m[32;49m23.1.2[0m > [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m To update, run: [0m[32;49mpip > install --upgrade pip[0m > Traceback (most recent call last): > File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__ > self.gen.throw(typ, value, traceback) > File "/code/tutorial/py/server_in_wrapper.py", line 9, in example > yield > File "/code/tutorial/py/server_in_wrapper.py", line 14, in main > raise InvalidOperation > tutorial.ttypes.InvalidOperation: InvalidOperation(whatOp=None, > why=None)During handling of the above exception, another exception > occurred:Traceback (most recent call last): > File "/code/tutorial/py/server_in_wrapper.py", line 17, in > main() > File "/code/tutorial/py/server_in_wrapper.py", line 13, in main > with example(): > File "/usr/local/lib/python3.11/contextlib.py", line 188, in __exit__ > exc.__traceback__ = traceback > ^ > File "/code/tutorial/py/gen-py/tutorial/ttypes.py", line 160, in __setattr__ > raise TypeError("can't modify immutable instance") > TypeError: can't modify immutable instance > {code} > > > {code:java} > # Running same script in Python 3.10 > py (master) $ docker run -it --rm --volume /home/katie/python/thrift:/code > --workdir /code/tutorial/py python:3.10 /bin/sh -c "pip install thrift && > python contextmanager.py" > Collecting thrift >
[jira] [Updated] (THRIFT-5715) Python 3.11 Immutable errors can't be used with contextlib.contextmanager
[ https://issues.apache.org/jira/browse/THRIFT-5715?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Katie Atkinson updated THRIFT-5715: --- Summary: Python 3.11 Immutable errors can't be used with contextlib.contextmanager (was: Immutable errors can't be used with contextlib.contextmanager in Python 3.11) > Python 3.11 Immutable errors can't be used with contextlib.contextmanager > - > > Key: THRIFT-5715 > URL: https://issues.apache.org/jira/browse/THRIFT-5715 > Project: Thrift > Issue Type: Bug > Components: Python - Compiler >Affects Versions: 0.14.1, 0.16.0, 0.18.1 > Environment: The client runtime is the python:3.10 and python:3.11 > docker images from dockerhub, installing the latest thrift library from pypi. > > The thrift compiler is installed on debian (v0.14.1 and v0.18.1) or ubuntu > (v0.16.0). >Reporter: Katie Atkinson >Priority: Major > > Generated Thrift IDLs create exceptions that are immutable. In Python 3.11 > contextlib manipulates exceptions to update tracebacks. When a Thrift client > raises an error within a context manager the context manager fails. This > doesn't happen with Python 3.10. > This example uses > [tutorial.thrift|https://github.com/apache/thrift/blob/master/tutorial/tutorial.thrift]. > I compiled the IDL with versions v0.14.1, v0.16. and v0.18.1, each with the > same result. > > {code:java} > // contextmanager.py > import contextlib > import syssys.path.append('gen-py') > from tutorial.ttypes import InvalidOperation > @contextlib.contextmanager > def example(): > yield > return > def main(): > with example(): > raise InvalidOperation > if __name__ == "__main__": > main() {code} > > > {code:java} > # Run in script in Python 3.11 > py (master) $ docker run -it --rm --volume /home/katie/python/thrift:/code > --workdir /code/tutorial/py python:3.11 /bin/sh -c "pip install thrift && > python contextmanager.py" > Collecting thrift > Downloading thrift-0.16.0.tar.gz (59 kB) > [?25l [90m[0m [32m0.0/59.6 kB[0m > [31m?[0m eta [36m-:--:--[0m > [2K [91m[0m[91m╸[0m[90m━━━[0m > [32m30.7/59.6 kB[0m [31m1.2 MB/s[0m eta [36m0:00:01[0m > [2K [91m[0m[91m╸[0m[90m━━━[0m > [32m30.7/59.6 kB[0m [31m1.2 MB/s[0m eta [36m0:00:01[0m > [2K [90m━━━[0m [32m59.6/59.6 kB[0m > [31m535.6 kB/s[0m eta [36m0:00:00[0m > [?25h Preparing metadata (setup.py) ... [?25l- done > [?25hCollecting six>=1.7.2 > Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) > Building wheels for collected packages: thrift > Building wheel for thrift (setup.py) ... [?25l- \ | / - \ done > [?25h Created wheel for thrift: > filename=thrift-0.16.0-cp311-cp311-linux_x86_64.whl size=509416 > sha256=29702930fd4c49e8f70b568ae03ab3a2a0e46ce92c620ec6a7113432fb59d9e5 > Stored in directory: > /root/.cache/pip/wheels/29/6e/43/fe5a143fd6ed0ca5c385a5dba8a445de49cb3e66013095074d > Successfully built thrift > Installing collected packages: six, thrift > Successfully installed six-1.16.0 thrift-0.16.0 > [33mWARNING: Running pip as the 'root' user can result in broken permissions > and conflicting behaviour with the system package manager. It is recommended > to use a virtual environment instead: https://pip.pypa.io/warnings/venv[0m[33m > [0m > [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m A new release of pip available: > [0m[31;49m22.3.1[0m[39;49m -> [0m[32;49m23.1.2[0m > [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m To update, run: [0m[32;49mpip > install --upgrade pip[0m > Traceback (most recent call last): > File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__ > self.gen.throw(typ, value, traceback) > File "/code/tutorial/py/server_in_wrapper.py", line 9, in example > yield > File "/code/tutorial/py/server_in_wrapper.py", line 14, in main > raise InvalidOperation > tutorial.ttypes.InvalidOperation: InvalidOperation(whatOp=None, > why=None)During handling of the above exception, another exception > occurred:Traceback (most recent call last): > File "/code/tutorial/py/server_in_wrapper.py", line 17, in > main() > File "/code/tutorial/py/server_in_wrapper.py", line 13, in main > with example(): > File "/usr/local/lib/python3.11/contextlib.py", line 188, in __exit__ > exc.__traceback__ = traceback > ^ > File "/code/tutorial/py/gen-py/tutorial/ttypes.py", line 160, in __setattr__ > raise TypeError("can't modify immutable instance") > TypeError: can't modify immutable instance > {code} > > > {code:java} > # Running same script in Python 3.10 > py (master) $ docker run -it --rm --volume