75 lines
1.5 KiB
Python
75 lines
1.5 KiB
Python
from operator import attrgetter
|
|
|
|
from bonobo.config import Configurable
|
|
from bonobo.config.processors import ContextCurrifier, ContextProcessor, resolve_processors, use_context_processor
|
|
|
|
|
|
class CP1(Configurable):
|
|
@ContextProcessor
|
|
def c(self):
|
|
yield
|
|
|
|
@ContextProcessor
|
|
def a(self):
|
|
yield "this is A"
|
|
|
|
@ContextProcessor
|
|
def b(self, a):
|
|
yield a.upper()[:-1] + "b"
|
|
|
|
def __call__(self, a, b):
|
|
return a, b
|
|
|
|
|
|
class CP2(CP1):
|
|
@ContextProcessor
|
|
def f(self):
|
|
pass
|
|
|
|
@ContextProcessor
|
|
def e(self):
|
|
pass
|
|
|
|
@ContextProcessor
|
|
def d(self):
|
|
pass
|
|
|
|
|
|
class CP3(CP2):
|
|
@ContextProcessor
|
|
def c(self):
|
|
pass
|
|
|
|
@ContextProcessor
|
|
def b(self):
|
|
pass
|
|
|
|
|
|
def get_all_processors_names(cls):
|
|
return list(map(attrgetter("__name__"), resolve_processors(cls)))
|
|
|
|
|
|
def test_inheritance_and_ordering():
|
|
assert get_all_processors_names(CP1) == ["c", "a", "b"]
|
|
assert get_all_processors_names(CP2) == ["c", "a", "b", "f", "e", "d"]
|
|
assert get_all_processors_names(CP3) == ["c", "a", "b", "f", "e", "d", "c", "b"]
|
|
|
|
|
|
def test_setup_teardown():
|
|
o = CP1()
|
|
stack = ContextCurrifier(o)
|
|
stack.setup()
|
|
assert o(*stack.args) == ("this is A", "THIS IS b")
|
|
stack.teardown()
|
|
|
|
|
|
def test_processors_on_func():
|
|
def cp(context):
|
|
yield context
|
|
|
|
@use_context_processor(cp)
|
|
def node(context):
|
|
pass
|
|
|
|
assert get_all_processors_names(node) == ["cp"]
|