Programming by contract library.
Project description
Pre (pre, require):
In [1]: from deal import pre, post, inv
In [2]: @pre(lambda *args: all(map(lambda x: x > 0, args)))
...: def my_sum(*args):
...: return sum(args)
...:
In [3]: my_sum(2, 3, 4)
Out[3]: 9
In [4]: my_sum(2, -3, 4)
PreContractError:
Post (post, ensure):
In [5]: @post(lambda x: x > 0)
...: def my_sum(*args):
...: return sum(args)
...:
In [6]: my_sum(2, -3, 4)
Out[6]: 3
In [7]: my_sum(2, -3, -4)
PostContractError:
Inv (inv, invariant):
In [8]: @inv(lambda obj: obj.x > 0)
...: class A:
...: x = 4
...:
In [9]: a = A()
In [10]: a.x = 10
In [11]: a.x = -10
InvContractError:
In [12]: A
Out[12]: contracts.core.AInvarianted
Custom message:
In [13]: @pre(lambda x: x > 0, "x must be > 0")
...: def f(x):
...: return x * 2
...:
In [14]: f(-2)
PreContractError: x must be > 0
Custom exception:
In [15]: @pre(lambda x: x > 0, exception=AssertionError("x must be > 0"))
...: def f(x):
...: return x * 2
...:
In [16]: f(-2)
AssertionError: x must be > 0
Validators (nearly Django Forms style, except initialization):
In [19]: class Validator:
...: def __init__(self, x):
...: self.x = x
...:
...: def is_valid(self):
...: if self.x <= 0:
...: self.errors = ['x must be > 0']
...: return False
...: return True
...:
In [20]: @pre(Validator)
...: def f(x):
...: return x * 2
...:
In [21]: f(5)
Out[21]: 10
In [22]: f(-5)
PreContractError: ['x must be > 0']
Return error message from contract:
In [23]: @pre(lambda x: x > 0 or "x must be > 0")
...: def f(x):
...: return x * 2
...:
In [24]: f(-5)
PreContractError: x must be > 0
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-1.0.0.tar.gz
(6.5 kB
view details)
File details
Details for the file deal-1.0.0.tar.gz
.
File metadata
- Download URL: deal-1.0.0.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9140d775980fbf2c4753569e4fa3825d8b144d61ff83bb6cb6f79c9142ea8ba |
|
MD5 | f75afc85f080fdc7d25c60f01db498d1 |
|
BLAKE2b-256 | d29cb70e4c4d23cdb76067bc0dab6f56c4088bab52c92e967a1f142e925ad10e |