Allow to specify default provides at task definition

It is now possible to specify what task provides when task class
(deriving from taskflow.task.Task) is defined, using 'default_provides'
class attribute or property. This specification may still be overridden
when task instance is created via 'provides' constructor parameter.

Change-Id: If300c3a35807422d06c0196e84891faebde83c02
This commit is contained in:
Ivan A. Melnikov
2013-09-18 12:00:32 +04:00
parent 0417ebf956
commit 1bfed651ae
2 changed files with 23 additions and 0 deletions

View File

@@ -204,13 +204,19 @@ class Task(BaseTask):
Adds following features to Task:
- auto-generates name from type of self
- adds all execute argument names to task requirements
- items provided by the task may be specified via
'default_provides' class attribute or property
"""
default_provides = None
def __init__(self, name=None, provides=None, requires=None,
auto_extract=True, rebind=None):
"""Initialize task instance"""
if name is None:
name = reflection.get_callable_name(self)
if provides is None:
provides = self.default_provides
super(Task, self).__init__(name,
provides=provides)
self.rebind = _build_arg_mapping(self.name, requires, rebind,

View File

@@ -31,6 +31,13 @@ class KwargsTask(task.Task):
pass
class DefaultProvidesTask(task.Task):
default_provides = 'def'
def execute(self):
return None
class TaskTestCase(test.TestCase):
def test_passed_name(self):
@@ -149,3 +156,13 @@ class TaskTestCase(test.TestCase):
def test_rebind_list_bad_value(self):
with self.assertRaisesRegexp(TypeError, '^Invalid rebind value:'):
MyTask(rebind=object())
def test_default_provides(self):
task = DefaultProvidesTask()
self.assertEquals(task.provides, set(['def']))
self.assertEquals(task.save_as, {'def': None})
def test_default_provides_can_be_overridden(self):
task = DefaultProvidesTask(provides=('spam', 'eggs'))
self.assertEquals(task.provides, set(['spam', 'eggs']))
self.assertEquals(task.save_as, {'spam': 0, 'eggs': 1})