gh-118761: Fix star-import of ast (#132025)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
This commit is contained in:
Jelle Zijlstra 2025-04-02 11:15:05 -07:00 committed by GitHub
parent 643dd5107c
commit 06822bfbf6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 22 deletions

View file

@ -6,8 +6,6 @@ from ast import NodeVisitor
from contextlib import contextmanager, nullcontext
from enum import IntEnum, auto, _simple_enum
__all__ = ('unparse',)
# Large float and imaginary literals get turned into infinities in the AST.
# We unparse those infinities to INFSTR.
_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
@ -48,7 +46,7 @@ _SINGLE_QUOTES = ("'", '"')
_MULTI_QUOTES = ('"""', "'''")
_ALL_QUOTES = (*_SINGLE_QUOTES, *_MULTI_QUOTES)
class _Unparser(NodeVisitor):
class Unparser(NodeVisitor):
"""Methods in this class recursively traverse an AST and
output source code for the abstract syntax; original formatting
is disregarded."""
@ -1142,9 +1140,3 @@ class _Unparser(NodeVisitor):
with self.require_parens(_Precedence.BOR, node):
self.set_precedence(_Precedence.BOR.next(), *node.patterns)
self.interleave(lambda: self.write(" | "), self.traverse, node.patterns)
def unparse(ast_obj):
unparser = _Unparser()
return unparser.visit(ast_obj)
unparse.__module__ = 'ast' # backwards compatibility

View file

@ -24,7 +24,6 @@
:copyright: Copyright 2008 by Armin Ronacher.
:license: Python License.
"""
import sys
from _ast import *
@ -621,8 +620,19 @@ class Param(expr_context):
"""Deprecated AST node class. Unused in Python 3."""
def unparse(ast_obj):
global _Unparser
try:
unparser = _Unparser()
except NameError:
from _ast_unparse import Unparser as _Unparser
unparser = _Unparser()
return unparser.visit(ast_obj)
def main():
import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs='?', default='-',
@ -651,15 +661,3 @@ def main():
if __name__ == '__main__':
main()
def __dir__():
dir_ = {n for n in globals() if not n.startswith('_') and n != 'sys'}
return sorted(dir_ | {'unparse'})
def __getattr__(name):
if name == 'unparse':
global unparse
from _ast_unparse import unparse
return unparse
raise AttributeError(f'module {__name__!r} has no attribute {name!r}')