bpo-43795: Don't list private names in the limited API (GH-26740)

* Remove struct _node from the stable ABI list

This struct was removed along with the old parser in Python 3.9 (PEP 617)

* Stable ABI list: Use the public name "PyFrameObject" rather than "_frame"

* Ensure limited API doesn't contain private names

Names prefixed by an underscore are private by definition.

* Add a blurb
This commit is contained in:
Petr Viktorin 2021-06-16 11:22:36 +02:00 committed by GitHub
parent 741b8ae1cf
commit 7cad9cb51b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 5 deletions

View file

@ -492,6 +492,16 @@ def gcc_get_limited_api_definitions(headers):
)
return stable_data | stable_exported_data | stable_functions
def check_private_names(manifest):
"""Ensure limited API doesn't contain private names
Names prefixed by an underscore are private by definition.
"""
for name, item in manifest.contents.items():
if name.startswith('_') and not item.abi_only:
raise ValueError(
f'`{name}` is private (underscore-prefixed) and should be '
+ 'removed from the stable ABI list or or marked `abi_only`')
def main():
parser = argparse.ArgumentParser(
@ -557,6 +567,8 @@ def main():
with args.file.open() as file:
manifest = parse_manifest(file)
check_private_names(manifest)
# Remember results of all actions (as booleans).
# At the end we'll check that at least one action was run,
# and also fail if any are false.