Programming by contract
Project description
Deal -- python library for design by contract (DbC) and checking values, exceptions, and side-effects. Read intro to get started.
Features
- Classic DbC: precondition, postcondition, invariant.
- Tracking exceptions and side-effects.
- Property-based testing.
- Static checker.
- Integration with pytest and flake8.
- Type annotations support.
- External validators support.
- Contracts for importing modules.
- Can be enabled or disabled on production.
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)
# test case
@pytest.mark.parametrize('case', deal.cases(count))
def test_count(case: deal.TestCase):
case()
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.0.1.tar.gz
(53.6 kB
view details)
Built Distribution
deal-4.0.1-py3-none-any.whl
(117.0 kB
view details)
File details
Details for the file deal-4.0.1.tar.gz
.
File metadata
- Download URL: deal-4.0.1.tar.gz
- Upload date:
- Size: 53.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: DepHell/0.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 505e36b321e2f3fd20ac697763d14762e71e42db625d2a1e4b5c8fbc9b2bf7fe |
|
MD5 | b08e6ebb3ac60fdf9648876044ae1aab |
|
BLAKE2b-256 | 897a987fa1b63a8ba83ee06ddaa0061eb05f1dff56e41ef1e317343be8bef8c7 |
File details
Details for the file deal-4.0.1-py3-none-any.whl
.
File metadata
- Download URL: deal-4.0.1-py3-none-any.whl
- Upload date:
- Size: 117.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: DepHell/0.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 873bd92c1c9391ed2077a49e099dca4fbac24bc831cd2dfbd6a4064608c34b89 |
|
MD5 | 72f80b4d2296671f6fcdf8c880ce0a6c |
|
BLAKE2b-256 | 8330a1d684a18cf475bd5277edb6af22ac676508c6200c60a9eedd5c7dc71818 |