**Deal** is a Python library for [design by contract][wiki] (DbC) programming.
Project description
A Python library for design by contract (DbC) and checking values, exceptions, and side-effects. In a nutshell, deal empowers you to write bug-free code. Read intro to get started.
Features
- Classic DbC: precondition, postcondition, invariant.
- Tracking exceptions and side-effects.
- Property-based testing.
- Static checker.
- Integration with pytest, flake8, sphinx, and hypothesis.
- Type annotations support.
- External validators support.
- Contracts for importing modules.
- Can be enabled or disabled on production.
- Colorless: annotate only what you want. Hence, easy integration into an existing project.
- Colorful: syntax highlighting for every piece of code in every command.
- Memory leaks detection: deal makes sure that pure functions don't leave unexpected objects in the memory.
- DRY: test discovery, error messages generation.
- Partial execution: linter executes contracts to statically check possible values.
- Formal verification: prove that your code works for all input (or find out when it doesn't).
- Fast: each code change is benchmarked and profiled.
- Reliable: the deal itself has 100% test coverage, partially verified, and runs on production by multiple comanies since 2018.
Deal in 30 seconds
# the result is always non-negative
@deal.post(lambda result: result >= 0)
# the function has no side-effects
@deal.pure
def count(items: List[str], item: str) -> int:
return items.count(item)
# generate test function
test_count = deal.cases(count)
Now we can:
- Run
python3 -m deal lint
orflake8
to statically check errors. - Run
python3 -m deal test
orpytest
to generate and run tests. - Just use the function in the project and check errors in runtime.
Read more in the documentation.
Installation
python3 -m pip install --user deal
Contributing
Contributions are welcome! A few ideas what you can contribute:
- Add new checks for the linter.
- Improve documentation.
- Add more tests.
- Improve performance.
- Found a bug? Fix it!
- Made an article about deal? Great! Let's add it into the
README.md
. - Don't have time to code? No worries! Just tell your friends and subscribers about the project. More users -> more contributors -> more cool features.
Thank you :heart:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
deal-4.16.0.tar.gz
(701.8 kB
view details)
Built Distribution
deal-4.16.0-py3-none-any.whl
(167.4 kB
view details)
File details
Details for the file deal-4.16.0.tar.gz
.
File metadata
- Download URL: deal-4.16.0.tar.gz
- Upload date:
- Size: 701.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.25.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ecf3c381f9b03f998d2cd64b23e6c62645db9b9126db3f12eba392dcd947e6b4 |
|
MD5 | 2aaca8ca51ae3fdaf7b20fccd8fbc1d4 |
|
BLAKE2b-256 | cc99dda6d36db85710f9e7814186b1769f8689e59947cac6d737bec4d3496812 |
File details
Details for the file deal-4.16.0-py3-none-any.whl
.
File metadata
- Download URL: deal-4.16.0-py3-none-any.whl
- Upload date:
- Size: 167.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.25.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83fa7e7efaa091a6101d52872fa205033fbd02134d70ba00d7b6e2039064f967 |
|
MD5 | c89f96d7cc4bf8da040ee4af84983e03 |
|
BLAKE2b-256 | 55f52a51cd71883f30ea9f0eb0a5a76c141a547e482a7315fb268efa05627b59 |