Add a register_interface_if decorator. (#3120)

* Add a register_interface_if decorator.

* Add tests.

* PEP 8.
This commit is contained in:
Terry Chia 2016-08-29 20:21:28 +08:00 committed by Alex Gaynor
parent a2bf0ea170
commit 3c35ef1ea7
2 changed files with 36 additions and 1 deletions

View file

@ -31,6 +31,15 @@ def register_interface(iface):
return register_decorator
def register_interface_if(predicate, iface):
def register_decorator(klass):
if predicate:
verify_interface(iface, klass)
iface.register(klass)
return klass
return register_decorator
if hasattr(int, "from_bytes"):
int_from_bytes = int.from_bytes
else:

View file

@ -8,7 +8,33 @@ import pytest
import six
from cryptography.utils import InterfaceNotImplemented, verify_interface
from cryptography.utils import (
InterfaceNotImplemented, register_interface_if, verify_interface
)
def test_register_interface_if_true():
@six.add_metaclass(abc.ABCMeta)
class SimpleInterface(object):
pass
@register_interface_if(1 == 1, SimpleInterface)
class SimpleClass(object):
pass
assert issubclass(SimpleClass, SimpleInterface) is True
def test_register_interface_if_false():
@six.add_metaclass(abc.ABCMeta)
class SimpleInterface(object):
pass
@register_interface_if(1 == 2, SimpleInterface)
class SimpleClass(object):
pass
assert issubclass(SimpleClass, SimpleInterface) is False
class TestVerifyInterface(object):