Metadata-Version: 2.1
Name: abi3info
Version: 2023.2.8
Summary: A library for abi3 and other CPython API information
Author-email: William Woodruff <william@yossarian.net>
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.10
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Topic :: Security
Requires-Dist: build ; extra == "dev"
Requires-Dist: pdoc3 ; extra == "dev"
Requires-Dist: toml ; extra == "dev"
Requires-Dist: abi3info[test,lint] ; extra == "dev"
Requires-Dist: bandit ; extra == "lint"
Requires-Dist: flake8 ; extra == "lint"
Requires-Dist: black ; extra == "lint"
Requires-Dist: isort ; extra == "lint"
Requires-Dist: interrogate ; extra == "lint"
Requires-Dist: mypy ; extra == "lint"
Requires-Dist: pytest ; extra == "test"
Requires-Dist: pytest-cov ; extra == "test"
Requires-Dist: pretend ; extra == "test"
Requires-Dist: coverage[toml] ; extra == "test"
Project-URL: Documentation, https://woodruffw.github.io/abi3info/
Project-URL: Homepage, https://pypi.org/project/abi3info/
Project-URL: Issues, https://github.com/woodruffw/abi3info/issues
Project-URL: Source, https://github.com/woodruffw/abi3info
Provides-Extra: dev
Provides-Extra: lint
Provides-Extra: test

abi3info
========

[![CI](https://github.com/woodruffw/abi3info/actions/workflows/ci.yml/badge.svg)](https://github.com/woodruffw/abi3info/actions/workflows/ci.yml)
[![PyPI version](https://badge.fury.io/py/abi3info.svg)](https://pypi.org/project/abi3info)

abi3info exposes information about CPython's "limited API" (including the
stable ABI, called `abi3`) as a Python library.

## Installation

abi3info is available via `pip`:

```console
$ pip install abi3info
```

## Usage

abi3info exposes limited API and stable ABI information in the form of a set
of top-level dictionaries, namely:

```python
import abi3info

abi3info.FEATURE_MACROS
abi3info.MACROS
abi3info.STRUCTS
abi3info.TYPEDEFS
abi3info.FUNCTIONS
abi3info.DATAS
```

Each of these is a mapping of a name (either as `str` or `Symbol`) to
a data model describing the kind of item (e.g. `FeatureMacro` or `Function`).

[See the generated documentation](https://woodruffw.github.io/abi3info) for
more details, including comprehensive type hints and explanations of each data
model.

[See also the `stable_abi.toml` file](./codegen/stable_abi.toml), taken from
the CPython sources, which describes each model and their semantics.

### Examples

Get information about a particular function:

```python
from abi3info import FUNCTIONS
from abi3info.models import Symbol

func = FUNCTIONS[Symbol("_Py_NegativeRefcount")]
print(func.symbol, func.added, func.ifdef, func.abi_only)
```

Get information about the feature macros that control the limited API:

```python
from abi3info import FEATURE_MACROS

print(fm for fm in FEATURE_MACROS.values())
```

## Licensing

abi3info is licensed under the MIT license.

abi3info is partially generated from metadata retrieved from the
[CPython sources](https://github.com/python/cpython/blob/main/Misc/stable_abi.toml),
which is licensed under the [PSF license](https://docs.python.org/3/license.html#psf-license).

