Adds method based options, limited to one, to allow nodes based on a specific method (think filter, join, etc)...

Reimplementation of "Filter", with (rather simple) code from rdc.etl.
This commit is contained in:
Romain Dorgueil
2017-05-20 10:15:51 +02:00
parent d5cfa0281d
commit cf0b982475
10 changed files with 183 additions and 10 deletions

View File

@ -0,0 +1,73 @@
import pytest
from bonobo.config import Configurable, Method, Option
from bonobo.errors import ConfigurationError
class MethodBasedConfigurable(Configurable):
handler = Method()
foo = Option(positional=True)
bar = Option()
def call(self, *args, **kwargs):
self.handler(*args, **kwargs)
def test_one_wrapper_only():
with pytest.raises(ConfigurationError):
class TwoMethods(Configurable):
h1 = Method()
h2 = Method()
def test_define_with_decorator():
calls = []
@MethodBasedConfigurable
def Concrete(self, *args, **kwargs):
calls.append((args, kwargs,))
t = Concrete('foo', bar='baz')
assert len(calls) == 0
t()
assert len(calls) == 1
def test_define_with_argument():
calls = []
def concrete_handler(*args, **kwargs):
calls.append((args, kwargs,))
t = MethodBasedConfigurable('foo', bar='baz', handler=concrete_handler)
assert len(calls) == 0
t()
assert len(calls) == 1
def test_define_with_inheritance():
calls = []
class Inheriting(MethodBasedConfigurable):
def handler(self, *args, **kwargs):
calls.append((args, kwargs,))
t = Inheriting('foo', bar='baz')
assert len(calls) == 0
t()
assert len(calls) == 1
def test_inheritance_then_decorate():
calls = []
class Inheriting(MethodBasedConfigurable):
pass
@Inheriting
def Concrete(self, *args, **kwargs):
calls.append((args, kwargs,))
t = Concrete('foo', bar='baz')
assert len(calls) == 0
t()
assert len(calls) == 1

View File

@ -59,11 +59,24 @@ def test_simple_execution_context():
assert ctx[i].wrapped is node
assert not ctx.alive
assert not ctx.started
assert not ctx.stopped
ctx.recv(BEGIN, Bag(), END)
assert not ctx.alive
assert not ctx.started
assert not ctx.stopped
ctx.start()
assert ctx.alive
assert ctx.started
assert not ctx.stopped
ctx.stop()
assert not ctx.alive
assert ctx.started
assert ctx.stopped