Tiny "zope interface" dependent recipe for contract verfification.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import zope.interface.verify
def contractVerifier(implementer):
   for iface in list(implementer.__implemented__):
      implementer_name = implementer.__name__
      try:
         if zope.interface.verify.verifyClass(iface, implementer):
            print "OK: %s correctly implements %s" % (implementer_name, iface.__name__)
       except Exception, err:
           print "Error detected with %s's implementation: %s" % (implementer_name, err)
class IFoo(zope.interface.Interface):
   def foo(arg1): pass
   def bar(): pass # self is not reqd as Interfaces document how obj is used 
class Foo(object):
   zope.interface.implements(IFoo)
   def foo(self): pass
class Foo2(object):
   zope.interface.implements(IFoo)
   def foo(self, arg1): pass
class Foo3(object):
   zope.interface.implements(IFoo)
   def foo(self, arg1): pass
   def bar(self): pass
contractVerifier(Foo)
contractVerifier(Foo2)
contractVerifier(Foo3)
 | 
Zope Interfaces is a nice package especially when you are designing something moderate to large size. Documentation page is a bit outdated and looks dirty though. Here are the links to documentation/articles on zope interfaces. http://wiki.zope.org/Interfaces/InterfaceUserDocumentation (main) http://twistedmatrix.com/projects/core/documentation/howto/components.html And if zope/twisted is installed file:///usr/lib/python/site-packages/zope/interface/README.txt

 Download
Download Copy to clipboard
Copy to clipboard