Metadata-Version: 1.1
Name: affinitic.verifyinterface
Version: 0.1
Summary: Verify interface contract for all implements/classImplements declaration
Home-page: http://hg.affinitic.be/affinitic.verifyinterface
Author: Affinitic
Author-email: jfroche@affinitic.be
License: GPL
Description: Introduction
        ============
        
        What's the use to declare an interface if your class doesn't implement correctly the interface ?
        
        Of course you should verify that in a test but if you don't want to write a test to check that all your code really implements the promised interfaces use this package.
        
        It's a simple patch that calls ``zope.interface.verify.verifyClass`` once you declare implementing an
        interface and print the BrokenImplementation or BrokenMethodImplementation as a warning (if any).
        
        Simple example in testrunner:
        -----------------------------
        
        By default the egg enable interface contract verification for ``zope.interface.implements`` and
        ``zope.interface.classImplements`` that are present in all your packages::
        
            >>> write('buildout.cfg',
            ... """
            ... [buildout]
            ... parts =
            ...     test
            ...
            ... [test]
            ... recipe = zc.recipe.testrunner
            ... eggs = affinitic.verifyinterface
            ...        zope.exceptions
            ... defaults = ['-m', 'module']
            ... """)
        
            >>> print system(buildout)
            Installing test.
            ...
        
            >>> from os.path import join
            >>> print system(join('bin', 'test')),
            <class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
            <BLANKLINE>
                    The bla attribute was not provided.
            <BLANKLINE>
            <class 'affinitic.verifyinterface.tests.test_module2.Bar'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>
            <BLANKLINE>
                    The bla attribute was not provided.
            <BLANKLINE>
            Running zope.testing.testrunner.layer.UnitTests tests:
              Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
              Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
            Tearing down left over layers:
              Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        
        
        Limit verifications
        -------------------
        
        But you can limit the package where this verification needs to be done (sometimes you don't care that
        a package you depend on didn't implement correctly an interface).
        
        This is done by adding an environment variable ``verifyinterface`` where you specify what packages/modules (separated by \n as usual) you accept to verify interfaces.
        
        Here is a simple example where I only want to have warning for bad implementation of interfaces used by module1::
        
            >>> write('buildout.cfg',
            ... """
            ... [buildout]
            ... parts =
            ...     test
            ...
            ... [test]
            ... recipe = zc.recipe.testrunner
            ... eggs = affinitic.verifyinterface
            ...        zope.exceptions
            ... defaults = ['-m', 'module']
            ... environment = testenv
            ...
            ... [testenv]
            ... verifyinterface = affinitic.verifyinterface.tests.test_module1
            ... """)
        
            >>> print system(buildout)
            Uninstalling test.
            Installing test.
            ...
        
            >>> from os.path import join
            >>> print system(join('bin', 'test'))
            <class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
            <BLANKLINE>
                    The bla attribute was not provided.
            <BLANKLINE>
            Running zope.testing.testrunner.layer.UnitTests tests:
              Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
              Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
            Tearing down left over layers:
              Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        
        Changelog
        =========
        
        0.1 (2009-12-18)
        ----------------
        
        * Initial release
        
        
Keywords: interface zope.interface
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries :: Python Modules
