Skip to main content

InterfaceMeta

PyPI - Version PyPI - Python Version PyPI - Status CI codecov Ruff

interface_meta provides a convenient way to expose an extensible API with enforced method signatures and consistent documentation.

Overview

This library has been extracted (with some modifications) from omniduct, a library also principally written by this author, where it was central to the extensible plugin architecture. It places an emphasis on the functionality required to create a well-documented extensible plugin system, whereby the act of subclassing is sufficient to register the plugin and ensure compliance to the parent API. As such, this library boasts the following features:

  • All subclasses of an interface must conform to the parent's API.
  • Hierarchical runtime property existence and method signature checking. Methods are permitted to add additional optional arguments, but otherwise must conform to the API of their parent class (which themselves may have extended the API of the interface).
  • Subclass definition time hooks (e.g. for registration of subclasses into a library of plugins, etc).
  • Optional requirement for methods in subclasses to explicity decorate methods with an override decorator when replacing methods on an interface, making it clearer as to when a class is introducing new methods versus replacing those that form the part of the interface API.
  • Generation of clear docstrings on implementations that stitches together the base interface documentation with any downstream extensions and quirks.
  • Support for extracting the quirks documentation for a method from other method docstrings, in the event that subclass implementations are done in an internal method.
  • Compatibility with ABCMeta from the standard library.

Example code

from abc import abstractmethod
from interface_meta import InterfaceMeta, inherit_docs, override


class MyInterface(metaclass=InterfaceMeta):
    """
    An example interface.
    """

    INTERFACE_EXPLICIT_OVERRIDES = True
    INTERFACE_RAISE_ON_VIOLATION = False

    @property
    @abstractmethod
    def name(self) -> str:
        """
        The name of this interface.
        """

    @inherit_docs(method="_do_stuff")
    def do_stuff(self, a, b, c=1):
        """
        Do things with the parameters.
        """
        return self._do_stuff(a, b, c)

    @abstractmethod
    def _do_stuff(self, a, b, c):
        pass


class MyImplementation(MyInterface):
    """
    This implementation of the example interface works nicely.
    """

    @override
    @property
    def name(self) -> str:
        return "Peter"

    @override
    def _do_stuff(self, a, b, c):
        """
        In this implementation, we sum the parameters.
        """
        return a + b + c

Running help(MyImplementation) reveals how the documentation is generated:

class MyImplementation(MyInterface)
 |  This implementation of the example interface works nicely.
 |
 |  Method resolution order:
 |      MyImplementation
 |      MyInterface
 |      builtins.object
 |
 |  do_stuff(self, a, b, c=1)
 |      Do things with the parameters.
 |
 |      MyImplementation Quirks:
 |          In this implementation, we sum the parameters.
 ...

Related projects and prior art

This library is released into an already crowded space, and the author would like to recognise some of the already wonderful work done by others. The primary difference between this and other libraries is typically these other libraries focus more on abstracting interface definitions and compliance, and less on the documentation and plugin registration work. While this work overlaps with these projects, its approach is sufficiently different (in the author's opinion) to warrant a separate library.

python-interface has an emphasis on ensuring that implementations of various interfaces strictly adhere to the methods and properties associated with the interface, and that helpful errors are raised when this is violated.

By comparison this library focusses on functional comformance to parent classes, whereby methods on subclasses are allowed to include additional parameters. It also focusses on ensuring that documentation for such quirks in method signatures are correctly composed into the final documentation rendered for that method.

Metadata

Release files for interface-meta 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for interface-meta 2.0.1
File Size Uploaded
interface_meta-2.0.1.tar.gz 15.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for interface-meta 2.0.1
File Interpreter ABI Platform
interface_meta-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.6 kB

Release files / interface_meta-2.0.1.tar.gz

Download URL interface_meta-2.0.1.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
902bd9a95a12f195f15753a1080075d4eca7a2cb934fac7ac03c9e362b50796a
BLAKE2b-256 checksum
How to use checksums
285b202a48a1ccdef721a95357fbe263c54ef87c18c4972df1ab5c22fe0f33d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.

Transparency log

Release files / interface_meta-2.0.1-py3-none-any.whl

Download URL interface_meta-2.0.1-py3-none-any.whl
Size 15.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f38016bef9a4429b6d0792d809be7b65e9781820c674bf7f463999086b6e6323
BLAKE2b-256 checksum
How to use checksums
a1d320a61a248feb1249cd81f83ce731f0bdf5170ed96a08a298f7081cda9e90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

1.3.0

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page