Quacks
🦆 Better read-only Protocols for mypy
Install / Use
/learn @ariebovenberg/QuacksREADME
🦆 Quacks
.. image:: https://img.shields.io/pypi/v/quacks.svg :target: https://pypi.python.org/pypi/quacks
.. image:: https://img.shields.io/pypi/l/quacks.svg :target: https://pypi.python.org/pypi/quacks
.. image:: https://img.shields.io/pypi/pyversions/quacks.svg :target: https://pypi.python.org/pypi/quacks
.. image:: https://github.com/ariebovenberg/quacks/actions/workflows/build.yml/badge.svg :target: https://github.com/ariebovenberg/quacks/actions/workflows/build.yml
.. image:: https://img.shields.io/readthedocs/quacks.svg :target: http://quacks.readthedocs.io/
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black
.. epigraph::
If it walks like a duck and it quacks like a duck, then it must be a duck
Thanks to PEP544 <https://www.python.org/dev/peps/pep-0544/>_, Python now has protocols:
a way to define duck typing statically.
This library gives you some niceties to make common idioms easier.
Installation
.. code-block:: bash
pip install quacks
⚠️ For type checking to work with mypy, you'll need to enable the plugin in
your mypy config file <https://mypy.readthedocs.io/en/latest/config_file.html>_:
.. code-block:: ini
[mypy] plugins = quacks
Features
Easy read-only protocols ^^^^^^^^^^^^^^^^^^^^^^^^
Defining read-only protocols is great for encouraging immutability and
working with frozen dataclasses. Use the readonly decorator:
.. code-block:: python
from quacks import readonly
@readonly
class User(Protocol):
id: int
name: str
is_premium: bool
Without this decorator, we'd have to write quite a lot of cruft, reducing readability:
.. code-block:: python
class User(Protocol):
@property
def id(self) -> int: ...
@property
def name(self) -> str: ...
@property
def is_premium(self) -> bool: ...
Related Skills
node-connect
337.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
