Skip to main content

Commenting sucks so let your code do it for you with Guava like preconditions that also actually do something.

Project description

Build Status

Commenting sucks so let your code do it for you with preconditions that actually do something.

Examples:

from pyconditions.pre import *

@Between( "b", 1, 10 )
def divideAbyB( a, b )
  return a / b

@NotNone( "a" )
@Between( "a", "a", "n" )
@NotNone( "b" )
@Between( "b", "n", "z" )
def concat( a, b ):
  return a + b

@Custom( "a", lambda x: x % 2 == 0 )
@Custom( "b", lambda x: not x % 2 == 0 )
def evenOdd( a, b ):
  return a * b

The documenting is there with the code it self, and if you violate the preconditions then a PyCondition exception is thrown with a much nicer error message than broken code.

evenOdd( 3, 1 )
pyconditions.exceptions.PyCondition: 3 did not pass the custom condition for parameter 'a' in function evenOdd

How about some postconditions?

from pyconditions.post import *

@NotNone()
def test( a ):
  return a

@Custom( lambda a: a % 2 == 0 )
def even( a ):
  return a
test( None )
pyconditions.exception.PyCondition: The return value for uber.awesome.project.test was None

You can also mix the two as well.

from pyconditions import pre
from pyconditions import post

@pre.Custom( "a", lamda a: a % 2 == 0 )
@post.Custom( lambda a: a % 2 == 0 )
def superSafeEven( a ):
  return a

Want some class invariant shenanigans?

from pyconditions.invariant import Invariant, FieldsNotNone
@FieldsNotNone( [ "test" ] )
class Test:
    def __init__( self ):
            self.test = 1
    def add( self ):
            return self.test + 1
    def set( self, v ):
            self.test = v

t = Test()
print t.add()
t.set( None )

That last call to add will cause the invariant to fail and thus throw the following:

pyconditions.exceptions.PyCondition: Field "test" was None when it should not have been in invariant "notNone"

Have conditions you want added? Open a PR with code.

Have an issue? Open a PR with fixed code.

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

pyConditions-0.3.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

pyConditions-0.3.0.macosx-10.9-intel.exe (71.7 kB view details)

Uploaded Source

File details

Details for the file pyConditions-0.3.0.tar.gz.

File metadata

File hashes

Hashes for pyConditions-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d4ccea70ccd4b0f24add3441adbf26bcf18b62c2e454bcea7346805708916f81
MD5 909ee27c4ffb39674a3c834e4d2aa5f2
BLAKE2b-256 e060d7d5a06fe9ebaad47186f1a312cbd2222a9f62386181e20eadada3fd7a0f

See more details on using hashes here.

File details

Details for the file pyConditions-0.3.0.macosx-10.9-intel.exe.

File metadata

File hashes

Hashes for pyConditions-0.3.0.macosx-10.9-intel.exe
Algorithm Hash digest
SHA256 2f38575eaa1c819326cf3ca677e18db66fd3d4c9773835f4ae6f119901433994
MD5 cecf025e3e59f037f4447dd3cf5ea7f1
BLAKE2b-256 f546a6773b2f891dd91f21f20d752e74d5cf843b20031dd67dc6ffe96056488f

See more details on using hashes here.

Supported by

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