Catalog PyPI
PACKAGE EXPLORERView in registry

affinitic.verifyinterface

PyPI

Verify interface contract for all implements/classImplements declaration

interfacezope.interface
Versions collected1
Direct dependencies0From release 0.1
Last observed20 Oct, 21:05 UTC

README

Version 0.1 documentation
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

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.118 Dec 20090

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:05 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:7018ba0cd6ef7eacd40fe69d11d0d24fe5c70e3c486c706a7c87cdc3a5b1137a