Re: [RFC 1/6] scripts/get_abi.py: make it backward-compatible with Python 3.6

Mauro Carvalho Chehab
2025-02-05T07:15:06Z

Em Wed, 5 Feb 2025 11:37:52 +0900
Akira Yokosawa <akiyks@gmail.com> escreveu:

> Hi,
>
> Jonathan Corbet wrote:
> > Mauro Carvalho Chehab <mchehab+huawei@kernel.org> writes:
> >
> >> Despite being introduced on Python 3.6, the original implementation
> >> was too limited: it doesn't accept anything but the argument.
> >
> > The original implementation *of f-strings* ?

Yes. IMO, even the original version of f-strings is better than the legacy
way of using '"string" % (tuple)' or "str.format".

Besides that, there aren't many places where it uses expressions inside
f-strings.

> >
> >> Even on python 3.10.12, support was still limited, as more complex
> >> operations cause SyntaxError:
> >>
> >> Exception occurred:
> >> File ".../linux/Documentation/sphinx/kernel_abi.py", line 48, in <module>
> >> from get_abi import AbiParser
> >> File ".../linux/scripts/get_abi.py", line 525
> >> msg += f"{part}\n{"-" * len(part)}\n\n"
> >> ^
> >> SyntaxError: f-string: expecting '}'
> >>
> >> Replace f-strings by normal string concatenation when it doesn't
> >> work on Python 3.6.
> >>
> >> Reported-by: Akira Yokosawa <akiyks@gmail.com>
>
> You might want to add
>
> Closes: https://lore.kernel.org/2d4d3fd1-5fe2-4d18-9085-73f9ff930c2d@gmail.com/
>
> >> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> >
> > So I'm curious ... later in the series, you make 3.9 the minimal version
> > for the kernel. Given that, is there value in adding compatibility for
> > older versions here?

No because 3.9 is still not enough to accept a valid Python expression on f-strings.
This arrived only on Python 3.12[1]:
"Expression components inside f-strings can now be any valid Python expression"

So, with this patch, doc build can be using Python 3.6. Still, it makes
sense to move minimal version to 3.9 due to the current status of other
Python scripts.

[1] https://docs.python.org/3/whatsnew/3.12.html#pep-701-syntactic-formalization-of-f-strings

> I think rewording the summary to
>
> "scripts/get_abi.py: make it backward-compatible with Python <3.11"
>
> would resolve Jon's confusion.

Sure, but IMO it is still valuable to say somewhere that the script
was tested and it is known to work since Python 3.6.

>
> I haven't looked into python3'changelog, but it might be
> "... backward-compatible with Python <3.12".
> Mauro, which python3 release extended the f-string implementation?

See above. I only did a quick check, but it sounds that 3.12 is the
one that finally implemented f-strings properly in a similar way to
what Perl 5 does with $'expression' inside strings.

Thanks,
Mauro