◐ Shell
reader mode source ↗
Skip to content

gh-125331: Allow the parser to activate future imports on the fly#125482

Merged
pablogsal merged 10 commits into
python:mainfrom
pablogsal:gh-125331
Feb 14, 2025
Merged

gh-125331: Allow the parser to activate future imports on the fly#125482
pablogsal merged 10 commits into
python:mainfrom
pablogsal:gh-125331

Conversation

@pablogsal

@pablogsal pablogsal commented Oct 14, 2024

Copy link
Copy Markdown
Member

@nineteendo

nineteendo commented Oct 14, 2024

Copy link
Copy Markdown
Contributor

Eh, not sure if this is desirable, maybe lock the future behind a repl compiler flag:

# tmp.py
from __future__ import barry_as_FLUFL
1 != 2
$ gh-125331/python.exe tmp.py
  File "/Users/wannes/Documents/GitHub/cpython/tmp.py", line 2
    1 != 2
      ^^
SyntaxError: with Barry as BDFL, use '<>' instead of '!='

This is great though:

>>> from __future__ import barry_as_FLUFL
... 1 <> 2
... 
True

@nineteendo

nineteendo commented Oct 14, 2024

Copy link
Copy Markdown
Contributor

This change isn't backwards compatible, although it only affects 14 files (Github search).

@JelleZijlstra

Copy link
Copy Markdown
Member

Eh, not sure if this is desirable, maybe lock the future behind a repl compiler flag

I feel it should work like any other future import, so it can serve as an example.

This change isn't backwards compatible, although it only affects 14 files (Github search).

I feel those people are asking for it; they're using an undocumented joke feature. We can limit this change to 3.14 though.

@pablogsal

pablogsal commented Oct 14, 2024

Copy link
Copy Markdown
Member Author

Eh, not sure if this is desirable, maybe lock the future behind a repl compiler flag:

The whole point of this is that it works everywhere, not just in the REPL

This change isn't backwards compatible, although it only affects 14 files (Github search).

haha, we need to decide if is a bug or if is not. If we decide this should work everywhere the fact that those people are using is fixing the bug. In the issue I said I don't think this is a bug, but if we decide that it is, then it is not backwards incompatible: it's fixing a bug. Notice there is no documentation about how this is supposed to work and all observable behaviour is not protected for backwards compatibility.

@nineteendo

Copy link
Copy Markdown
Contributor

cc @warsaw

@thatbirdguythatuknownot

thatbirdguythatuknownot commented Oct 15, 2024

Copy link
Copy Markdown
Contributor

How about the multiple-name imports?

from __future__ import annotations, barry_as_FLUFL
x: A
print(__annotations__['x'])  # A
print(1 <> 2)  # True

If I'm looking at the code correctly, it only accepts single-name imports for now..

@lysnikolaou lysnikolaou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

I'm generally okay with this, I think we do some similar hacky things elsewhere.

A couple of minor comments.

@pablogsal

Copy link
Copy Markdown
Member Author

How about the multiple-name imports?

from __future__ import annotations, barry_as_FLUFL
x: A
print(__annotations__['x'])  # A
print(1 <> 2)  # True

If I'm looking at the code correctly, it only accepts single-name imports for now..

Yeah, the PR is only a draft for evaluating the idea, is still missing many things like tests, NEWs...etc

@pablogsal pablogsal force-pushed the gh-125331 branch 3 times, most recently from cd167c2 to 8fb86b3 Compare October 29, 2024 23:33
@pablogsal

Copy link
Copy Markdown
Member Author

@lysnikolaou can you take another look?

@pablogsal pablogsal marked this pull request as ready for review October 29, 2024 23:47

@lysnikolaou lysnikolaou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

LGTM! 🎉 A couple of very nitty comments. Feel free to diregard.

@picnixz picnixz left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

Thanks Pablo & Jelle for answering my questions!

@JelleZijlstra JelleZijlstra left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

Someone alluded to it above, but this incorrectly picks up relative future imports:

>>> from .__future__ import barry_as_FLUFL; 1 <> 2
Traceback (most recent call last):
  File "<python-input-4>", line 1, in <module>
    from .__future__ import barry_as_FLUFL; 1 <> 2
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_pyrepl.__future__'
True
>>> from .__future__ import barry_as_FLUFLx; 1 <> 2
  File "<python-input-5>", line 1
    from .__future__ import barry_as_FLUFLx; 1 <> 2
                                               ^^
SyntaxError: invalid syntax

The first one correctly throws ModuleNotFoundError, but it also allows 1 <> 2. The second one throws a SyntaxError as expected.

21 hidden items Load more…
pablogsal and others added 9 commits February 13, 2025 00:45
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
Co-authored-by: Nice Zombies <nineteendo19d0@gmail.com>
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
…e-125331.quKQ7V.rst

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Nice Zombies <nineteendo19d0@gmail.com>
…e-125331.quKQ7V.rst

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
@pablogsal

pablogsal commented Feb 13, 2025

Copy link
Copy Markdown
Member Author

@JelleZijlstra I have fixed the relative imports, rebased and added a test, can you review it again?

@pablogsal pablogsal enabled auto-merge (squash) February 13, 2025 00:51
@pablogsal pablogsal merged commit 3bd3e09 into python:main Feb 14, 2025
@pablogsal pablogsal deleted the gh-125331 branch February 14, 2025 04:54
@pablogsal pablogsal added needs backport to 3.12 only security fixes needs backport to 3.13 bugs and security fixes labels Mar 10, 2025
@miss-islington-app

Copy link
Copy Markdown

Thanks @pablogsal for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

@miss-islington-app

Copy link
Copy Markdown

Thanks @pablogsal for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Mar 10, 2025
…ly (pythonGH-125482)

(cherry picked from commit 3bd3e09)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
@bedevere-app

bedevere-app Bot commented Mar 10, 2025

Copy link
Copy Markdown

GH-131062 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.13 bugs and security fixes label Mar 10, 2025
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Mar 10, 2025
…ly (pythonGH-125482)

(cherry picked from commit 3bd3e09)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
@bedevere-app

bedevere-app Bot commented Mar 10, 2025

Copy link
Copy Markdown

GH-131063 is a backport of this pull request to the 3.12 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.12 only security fixes label Mar 10, 2025
pablogsal added a commit that referenced this pull request Mar 10, 2025
…fly (GH-125482) (#131063)

gh-125331: Allow the parser to activate future imports on the fly (GH-125482)
(cherry picked from commit 3bd3e09)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
pablogsal added a commit that referenced this pull request Mar 10, 2025
…fly (GH-125482) (#131062)

gh-125331: Allow the parser to activate future imports on the fly (GH-125482)
(cherry picked from commit 3bd3e09)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants