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.

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.

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.18.3.tar.gz (3.8 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.18.3-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: requiresthat-2025.6.18.3.tar.gz
  • Upload date:
  • Size: 3.8 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.18.3.tar.gz
Algorithm Hash digest
SHA256 144f2c3a775867934f19da31cf922cf6ffb1295de5a950dad3ab7e64d598783a
MD5 0fab2e97d0352b809d5538a5f80d6afb
BLAKE2b-256 8deebd44114e7d63cdb0800cf861a62c5d635810ba363a7df9eef64689214c23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for requiresthat-2025.6.18.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d7d73f8ae6e5a9a2e9c100c57c5d4d781f1fb28d6da42f8e134ee18b11f5a5ef
MD5 7fdb3c5ccbe29aff2f12f6d15819e0b0
BLAKE2b-256 5b30e715adf5b8642c486e18ce520c8c60c2c7ee2eb4a44ae0a86d6f617a86a6

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