diff options
Diffstat (limited to 'taskflow/task.py')
-rw-r--r-- | taskflow/task.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/taskflow/task.py b/taskflow/task.py new file mode 100644 index 0000000..c5133f3 --- /dev/null +++ b/taskflow/task.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import abc + + +class Task(object): + """An abstraction that defines a potential piece of work that can be + applied and can be reverted to undo the work as a single unit. + """ + __metaclass__ = abc.ABCMeta + + def __str__(self): + return "Task: %s" % (self.__class__.__name__) + + @abc.abstractmethod + def apply(self, context, *args, **kwargs): + """Activate a given task which will perform some operation and return. + + This method can be used to apply some given context and given set + of args and kwargs to accomplish some goal. Note that the result + that is returned needs to be serializable so that it can be passed + back into this task if reverting is triggered.""" + raise NotImplementedError() + + def revert(self, context, result, cause): + """Revert this task using the given context, result that the apply + provided as well as any information which may have caused + said reversion.""" + pass |