Skip to main content

Support for requirements-assisted development

Project description

Decorate an instance method with pre- and/or postconditions that must be fulfilled

Example usage

from requiresthat import requires, RequirementNotFulfilledError, APRIORI, POSTMORTEM, BEFOREANDAFTER

class C:

    def __init__(self, data=None):
        self.data = data

    @requires(that='self.data is not None')
    @requires(that='self.data == "spam"', when=APRIORI)
    @requires(that='True is not False')
    @requires(that='self.data != "spam"', when=POSTMORTEM)
    @requires(that='len(self.data) >= 3', when=BEFOREANDAFTER)
    def method(self):
        self.data = 'ham'

X = C(data='spam')
X.method()

See the tests for more.

The that can be almost any valid Python statement which can be evaluated and whose veracity can be asserted, and the result thereof will decide whether or not the method fires/will be considered a success. Then details should be observed here.

The parameter when decides if the condition is a-priori, post-mortem, or before-and-after. The default is a-priori, meaning a precondition. Note that before-and-after does not mean during; you cannot mandate an invariant this way!

RequirementNotFulfilledError is the exception you have to deal with in case a condition is not met. NoCallableConstructError gets raised should you apply the decorator to a construct that is not callable. Both of these derive from the base class RequirementError.

Installation

Currently, use pip with test PyPi:

python -m pip install --index-url=https://test.pypi.org/simple/ requiresthat

If you want to cook it on your own, do this:

git clone git@gitlab.com:bedhanger/mwe.git
cd mwe/python/requiresthat
python -m venv --system-site-packages venv
source venv/bin/activate
python -m build
python -m pip install .
deactivate

It is recommended to carry out the build and install steps in a venv.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

requiresthat-2025.6.24.0.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

requiresthat-2025.6.24.0-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file requiresthat-2025.6.24.0.tar.gz.

File metadata

  • Download URL: requiresthat-2025.6.24.0.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for requiresthat-2025.6.24.0.tar.gz
Algorithm Hash digest
SHA256 8b2286de7a779efd7273a977cf7fd349f7b76b3a853dd54528f81091a2bff588
MD5 d869cf7e93463a190d3319e8cb8ce1d6
BLAKE2b-256 25ce0b4596e5b5a927380766bcefb052ae8ae2bb5db278ecdc3ee81249b11694

See more details on using hashes here.

File details

Details for the file requiresthat-2025.6.24.0-py3-none-any.whl.

File metadata

File hashes

Hashes for requiresthat-2025.6.24.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a6f64361912a4026bcfb5a8b0a22c354f72c233ee252c77f84b39953c1c569fc
MD5 061a1d0aecbaa092e589d530265141e7
BLAKE2b-256 a8d8e8842512bfc8f1f723aca07718d4bba59e1b82ee8a0275d6f7cbda2caa6c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page