CHANGES
=======

0.7.1
-----

* Revert "Add retries to fetching the zookeeper server version"
* Allow turning off the version check
* adding check for str/unicode type in requires
* Add retries to fetching the zookeeper server version
* Remove duplicate 'the' and link to worker engine section
* Remove delayed decorator and replace with nicer method
* Fix log statement
* Make the atom class an abstract class
* Mark conductor 'stop' method deprecation kwarg with versions
* Move to hacking 0.10
* catch NotFound errors when consuming or abandoning
* Use the new table length constants
* Improve upon/adjust/move around new optional example
* Clarify documentation related to inputs
* Docstrings should document parameters return values
* Let the multi-lock convert the provided value to a tuple
* Map optional arguments as well as required arguments
* Add a BFS tree iterator
* DFS in right order when not starting at the provided node
* Rework the sqlalchemy backend
* Modify stop and add wait on conductor to prevent lockups
* Default to using a thread-safe storage unit
* Add warning to sqlalchemy backend size limit docs
* Updated from global requirements
* Use a thread-identifier that can't easily be recycled
* Use a notifier instead of a direct property assignment
* Tweak the WBE diagram (and present it as an svg)
* Remove duplicate code
* Improved diagram for Taskflow
* Bump up the env_builder.sh to 2.7.9
* Add a capturing listener (for test or other usage)
* Add + use a staticmethod to fetch the immediate callables
* Just directly access the callback attributes
* Use class constants during pformatting a tree node

0.7.0
-----

* Abstract out the worker finding from the WBE engine
* Add and use a nicer kombu message formatter
* Remove duplicated 'do' in types documentation
* Use the class defined constant instead of raw strings
* Use kombu socket.timeout alias instead of socket.timeout
* Stopwatch usage cleanup/tweak
* Add note about publicly consumable types
* Add docstring to wbe proxy to denote not for public use
* Use monotonic time when/if available
* Updated from global requirements
* Link WBE docs together better (especially around arguments)
* Emit a warning when no routing keys provided on publish()
* Center SVG state diagrams
* Use importutils.try_import for optional eventlet imports
* Shrink the WBE request transition SVG image size
* Add a thread bundle helper utility + tests
* Make all/most usage of type errors follow a similar pattern
* Leave use-cases out of WBE developer documentation
* Allow just specifying 'workers' for WBE entrypoint
* Add comments to runner state machine reaction functions
* Fix coverage environment
* Use explicit WBE worker object arguments (instead of kwargs)
* WBE documentation tweaks/adjustments
* Add a WBE request state diagram + explanation
* Tidy up the WBE cache (now WBE types) module
* Fix leftover/remaining 'oslo.utils' usage
* Show the failure discarded (and the future intention)
* Use a class provided logger before falling back to module
* Use explicit WBE object arguments (instead of kwargs)
* Fix persistence doc inheritance hierarchy
* The gathered runtime is for failures/not failures
* add clarification re parallel engine
* Increase robustness of WBE producer/consumers
* Move implementation(s) to there own sections
* Move the jobboard/job bases to a jobboard/base module
* Have the serial task executor shutdown/restart its executor
* Mirror the task executor methods in the retry action
* Add back a 'eventlet_utils' helper utility module
* Use constants for runner state machine event names
* Remove 'SaveOrderTask' and test state in class variables
* Provide the stopwatch elapsed method a maximum
* Fix unused and conflicting variables
* Switch to using 'oslo_serialization' vs 'oslo.serialization'
* Switch to using 'oslo_utils' vs 'oslo.utils'
* Add executor statistics
* Use oslo.utils reflection for class name
* Add split time capturing to the stop watch
* Use platform neutral line separator(s)
* Create and use a multiprocessing sync manager subclass
* Use a single sender
* Updated from global requirements
* Include the 'old_state' in all currently provided listeners
* Update the README.rst with accurate requirements
* Include docstrings for parallel engine types/strings supported
* The taskflow logger module does not provide a logging adapter
* Send in the prior atom state on notification of a state change
* Pass a string as executor in the example instead of an executor
* Updated from global requirements
* Fix for job consumption example using wrong object

0.6.1
-----

* Remove need to inherit/adjust netutils split
* Allow specifying the engine 'executor' as a string
* Disallowing starting the executor when worker running
* Use a single shared queue for an executors lifecycle
* Avoid creating a temporary list(s) for tree type
* Update statement around stopwatch thread safety
* Register with 'ANY' in the cloned process
* Add edge labels for engine states
* Remove less than useful action_engine __str__
* Ensure manager started/shutdown/joined and reset
* Return the same namedtuple that the future module returns
* Add a simplistic hello world example
* Get event/notification sending working correctly
* Move the engine scoping test to its engines test folder
* Get the basics of a process executor working
* Move the persistence base to the parent directory
* Correctly trigger 'on_exit' of starting/initial state

0.6.0
-----

* Add an example which shows how to send events out from tasks
* Move over to using oslo.utils [reflection, uuidutils]
* Rework the in-memory backend
* Updated from global requirements
* Add a basic map/reduce example to show how this can be done
* Add a parallel table mutation example
* Add a 'can_be_registered' method that checks before notifying
* Base task executor should provide 'wait_for_any'
* Replace autobind with a notifier module helper function
* Cleanup some doc warnings/bad/broken links
* Use the notifier type in the task class/module directly
* Use a tiny clamp helper to clamp the 'on_progress' value
* Retain the existence of a 'EngineBase' until 0.7 or later
* Remove the base postfix from the internal task executor
* Remove usage of listener base postfix
* Add a moved_inheritable_class deprecation helper
* Avoid holding the lock while scanning for existing jobs
* Remove the base postfix for engine abstract base class
* Avoid popping while another entity is iterating
* Updated from global requirements
* Use explict 'attr_dict' when adding provider->consumer edge
* Properly handle and skip empty intermediary flows
* Ensure message gets processed correctly
* Just assign a empty collection instead of copy/clear
* Remove rtype from task clone() doc
* Add and use a new simple helper logging module
* Have the sphinx copyright date be dynamic
* Add appropriate links into README.rst
* Use condition variables using 'with'
* Use an appropriate ``extract_traceback`` limit
* Allow all deprecation helpers to take a stacklevel
* Correctly identify stack level in ``_extract_engine``
* Stop returning atoms from execute/revert methods
* Have tasks be able to provide copy() methods
* Allow stopwatches to be restarted
* Ensure that failures can be pickled
* Rework pieces of the task callback capability
* Just use 4 spaces for classifier indents
* Move atom action handlers to there own subfolder/submodule
* Workflow documentation is now in infra-manual
* Ensure frozen attribute is set in fsm clones/copies
* Fix split on "+" for connection strings that specify dialects
* Update listeners to ensure they correctly handle all atoms
* Allow for the notifier to provide a 'details_filter'
* Be explicit about publish keyword arguments
* Some package additions and adjustments to the env_builder.sh
* Cache immutable visible scopes in the runtime component
* Raise value errors instead of asserts
* Add a claims listener that connects job claims to engines
* Split the scheduler into sub-schedulers
* Use a module level constant to provide the DEFAULT_LISTEN_FOR
* Move the _pformat() method to be a classmethod
* Add link to issue 17911
* Avoid deepcopying exception values
* Include documentation of the utility modules
* Use a metaclass to dynamically add testcases to example runner
* Remove default setting of 'mysql_traditional_mode'
* Move scheduler and completer classes to there own modules
* Ensure that the zookeeper backend creates missing atoms
* Use the deprecation utility module instead of warnings
* Tweaks to setup.cfg
* Add a jobboard high level architecture diagram
* Mark 'task_notifier' as renamed to 'atom_notifier'
* Revert wrapt usage until further notice
* Updated from global requirements
* Add a history retry object, makes retry histories easier to use
* Format failures via a static method
* When creating daemon threads use the bundled threading_utils
* Ensure failure types contain only immutable items
* Mark 'task_notifier' as renamed to 'atom_notifier'
* Use wrapt to provide the deprecated class proxy
* Updated from global requirements
* Updated from global requirements
* Updated from global requirements
* Reduce the worker-engine joint testing time
* Link bug in requirements so people understand why pbr is listed
* Updated from global requirements
* Use standard threading locks in the cache types
* Handle the case where '_exc_type_names' is empty
* Add pbr to installation requirements
* Updated from global requirements
* Remove direct usage of the deprecated failure location
* Fix the example 'default_provides'
* Use constants for retry automatically provided kwargs
* Remove direct usage of the deprecated notifier location
* Remove attrdict and just use existing types
* Use the mock that finds a working implementation
* Add a futures type that can unify our future functionality
* Bump the deprecation version number
* Use and verify event and latch wait() return using timeouts
* Deprecate `engine_conf` and prefer `engine` instead
* Use constants for link metadata keys
* Bump up the sqlalchemy version for py26
* Hoist the notifier to its own module
* Move failure to its own type specific module
* Use constants for revert automatically provided kwargs
* Improve some of the task docstrings
* We can now use PyMySQL in py3.x tests
* Updated from global requirements
* Add the database schema to the sqlalchemy docs
* Change messaging from handler connection timeouts -> operation timeouts
* Switch to a custom NotImplementedError derivative
* Allow the worker banner to be written to an arbitrary location
* Update engine class names to better reflect there usage

0.5.0
-----

* Avoid usage of six.moves in local functions
* Refactor parts of the job lock/job condition zookeeper usage
* Make it so that the import works for older versions of kombu
* Rework the state documentation
* Updated from global requirements
* Add a more dynamic/useful logging listener
* Use timeutils functions instead of misc.wallclock
* Expose only `ensure_atom` from storage
* Adjust docs+venv tox environments requirements/dependencies
* Increase robustness of WBE message and request processing
* Adjust the WBE log levels
* Use the features that the oslotest mock base class provides
* Use oslotest to provide our base test case class
* Jobboard example that show jobs + workers + producers
* Adjust on_job_posting to not hold the lock while investigating
* Bring in a newer optional eventlet
* Move some of the custom requirements out of tox.ini
* Document more function/class/method params
* Stop using intersphinx
* Expand toctree to three levels
* Documentation cleanups and tweaks
* Fix multilock concurrency when shared by > 1 threads
* Increase/adjust the logging of the WBE response/send activities
* Color some of the states depending on there meaning
* Switch to using oslo.utils and oslo.serialization
* Typos "searchs"
* Update the requirements-py2.txt file
* Remove no longer needed r/w lock interface base class
* Updated from global requirements
* Better handle the tree freeze method
* Ensure state machine can be frozen
* Link a few of the classes to implemented features/bugs in python
* Add a timing listener that also prints the results
* Remove useless __exit__ return
* Example which shows how to move values from one task to another
* Mention issue with more than one thread and reduce workers
* Add a mandelbrot parallel calculation WBE example
* Add existing types to generated documentation
* Remove the dependency on prettytable
* Work toward Python 3.4 support and testing
* Add a state machine copy() method
* Update the state graph builder to use state machine type
* Add a docs virtualenv
* Reduce unused tox environments

0.4.0
-----

* Add a couple of scope shadowing test cases
* Relax the graph flow symbol constraints
* Relax the unordered flow symbol constraints
* Relax the linear flow symbol constraints
* Revamp the symbol lookup mechanism
* Be smarter about required flow symbols
* Update oslo-incubator to 32e7f0b56f52742754
* Translate the engine runner into a well defined state-machine
* Raise a runtime error when mixed green/non-green futures
* Ensure the cachedproperty creation/setting is thread-safe
* warn against sorting requirements
* Updated from global requirements
* Update transitioning function name to be more understandable
* Move parts of action engine tests to a subdirectory
* Tweak engine iteration 'close-up shop' runtime path
* Use explicit WBE request state transitions
* Reject WBE messages if they can't be put in an ack state
* Make version.py handle pbr not being installed
* Cleanup WBE example to be simpler to understand
* Use __qualname__ where appropriate
* Updated from global requirements
* Updated from global requirements
* Make the WBE worker banner information more meaningful
* Have the dispatch_job function return a future
* Expand documention on failures and wrapped failures types
* Allow worker count to be specified when no executor provided
* Remove sphinx examples emphasize-lines
* Split requirements into py2 and py3 files
* Update oslo-incubator to 037dee004c3e2239
* Remove db locks and use random db names for tests
* Allow WBE request transition timeout to be dynamic
* Avoid naming time type module the same as a builtin
* LOG which requeue filter callback failed
* Add a pformat() failure method and use it in the conductor
* add pre/post execute/retry callbacks to tasks
* Use checked_commit() around consume() and abandon()
* Use a check + create transaction when claiming a job
* Improve WBE testing coverage
* Add basic WBE validation sanity tests
* WBE request message validation
* WBE response message validation
* WBE notification message validation
* Allow handlers to provide validation callables
* Use a common message dispatcher
* Use checked commit when committing kazoo transactions
* Enable hacking checks H305 and H307 in tox.ini template
* Fixes unsorted dicts and sets in doctests
* README.rst: Avoid using non-ascii character
* Updated from global requirements
* Add a sample script that can be used to build a test environment
* Enabled hacking checks H305 and H307
* Bump hacking to version 0.9.2
* Allow a jobs posted book to be none by default
* Cleanup some of the example code & docs
* Make greenexecutor not keep greenthreads active
* Add the arch/big picture omnigraffle diagram
* Remove pbr as a runtime dependency
* Use the `state_graph.py` for all states diagrams
* Make the examples documentation more relevant
* Raise NotImplementedError instead of NotImplemented
* Move the stopwatch tests to test_types
* Remove need to do special exception catching in parse_uri
* Update oslo incubator code to commit 0b02fc0f36814968
* Fix the section name in CONTRIBUTING.rst
* Add a conductor considerations section
* Make the expiring cache a top level cache type
* Use `flow_uuid` and `flow_name` from storage
* Fix traces left in zookeeper
* Clarify locked decorator is for instance methods
* Extract the state changes from the ensure storage method
* Create a top level time type
* Simplify identity transition handling for tasks and retries
* Remove check_doc.py and use doc8
* Remove functions created for pre-six 1.7.0
* Add a tree type
* Make intentions a tuple (to denote immutability)
* Updated from global requirements
* Add example for pseudo-scoping
* Fix E265 hacking warnings
* Fix doc which should state fetch() usage
* Adjust sphinx requirement
* Upgrade hacking version and fix some of the issues
* Denote that other projects can use this library
* Remove misc.as_bool as oslo provides an equivalent
* Update zake to requirements version

0.3.21
------

* Rename additional to general/higher-level
* Sync our version of the interprocess lock
* Increase usefulness of the retry component compile errors
* Switch to a restructuredtext README file
* Create a considerations section
* Include the function name on internal errors
* Add in default transaction isolation levels
* Allow the mysql mode to be more than just TRADITIONAL
* Make the runner a runtime provided property
* Rename inject_task_args to inject_atom_args
* Rename the graph analyzer to analyzer
* Provide the compilation object instead of just a part of it
* Ensure cachedproperty descriptor picks up docstrings

0.3
---

* Warn about internal helper/utility usage
* Rename to atom from task
* Invert the conductor stop() returned result
* Move flattening to the action engine compiler
* Increase the level of usefulness of the dispatching logging
* Avoid forcing engine_conf to a dict
* Allow for two ways to find a flow detail in a job for a conductor
* Add docs related to the new conductor feature
* Add docstring describing the inject instance variable
* Finish factoring apart the graph_action module
* Update sphinx pin from global requirements
* Fix docstring list format
* Allow indent text to be passed in
* Factor out the on_failure to a mixin type
* Use a name property setter instead of a set_name method
* Adds a single threaded flow conductor
* add the ability to inject arguments into tasks at task creation
* Synced jsonutils from oslo-incubator
* Remove wording issue (track does not make sense here)
* Fix case of taskflow in docs
* Put the job external wiki link in a note section
* Rework atom documentation
* Add doc link to examples
* Rework the overview of the notification mechanism
* Standardize on the same capitalization pattern
* Regenerate engine-state sequence diagram
* Add source of engine-state sequence diagram
* Add kwarg check_pending argument to fake lock
* Add a example which uses the run_iter function in a for loop
* Fix error string interpolation
* Rename t_storage to atom_storage
* Create and use a new compilation module
* Add engine state diagram
* Add tests for the misc.cachedproperty descriptor
* Complete the cachedproperty descriptor protocol
* Don't create fake LogBook when we can not fetch one
* Use futures wait() when possible
* Use /taskflow/flush-test in the flush function
* Add a reset nodes function
* Default the impl_memory conf to none
* Fix spelling mistake
* Add a helper tool which clears zookeeper test dirs
* Add a zookeeper jobboard integration test
* Cleanup zookeeper integration testing
* Use a more stable flush method
* Remove the _clear method and do not reset the job_watcher
* Allow command and connection retry configuration
* Check documentation for simple style requirements
* Add an example which uses the run iteration functionality
* Implement run iterations
* Put provides and requires code to basic Flow
* Allow the watcher to re-register if the session is lost
* Add a new wait() method that waits for jobs to arrive
* Add a cachedproperty descriptor
* Add an example for the job board feature
* Engine _cls postfix is not correct
* Pass executor via kwargs instead of config
* Allow the WBE to use a preexisting executor
* Tweaks to object hiearchy diagrams
* Adjust doc linking
* Medium-level docs on engines
* Add docs for the worker based engine (WBE)
* Updated from global requirements
* Move from generator to iterator for iterjobs
* Add a jobboard fetching context manager
* Wrap the failure to load in the not found exception
* Update jobboard docs
* Synced jsonutils from oslo-incubator
* Remove persistence wiki page link
* Load engines with defined args and provided kwargs
* Integrate urlparse for configuration augmentation
* Fix "occured" -> "occurred"
* Documentation tune-ups
* Fix spelling error
* Add a resumption strategy doc
* Docs and cleanups for test_examples runner
* Skip loading (and failing to load) lock files
* Add a persistence backend fetching context manager
* Add a example that activates a future when a result is ready
* Fix documentation spelling errors
* Add a job consideration doc
* Add last_modified & created_on attributes to jobs
* Allow jobboard event notification
* Use sequencing when posting jobs
* Add a directed graph type (new types module)
* Add persistence docs + adjustments
* Updated from global requirements
* Stings -> Strings
* Be better at failure tolerance
* Ensure example abandons job when it fails
* Add docs for jobs and jobboards
* Get persistence backend via kwargs instead of conf
* Allow fetching jobboard implementations
* Reuse already defined variable
* More keywords & classifier topics
* Allow transient values to be stored in storage
* Doc adjustments
* Move the daemon thread helper function
* Create a periodic worker helper class
* Fix not found being raised when iterating
* Allow for only iterating over the most 'fresh' jobs
* Updated from global requirements
* Update oslo-incubator to 46f2b697b6aacc67
* import run_cross_tests.sh from incubator
* Exception in worker queue thread
* Avoid holding the state lock while notifying

0.2
---

* Allow atoms to save their own state/result
* Use correct exception in the timing listener
* Add a engine preparation stage
* Decrease extraneous logging
* Handle retry last_results/last_failure better
* Improve documentation for engines
* Worker executor adjustments
* Revert "Move taskflow.utils.misc.Failure to its own module"
* Move taskflow.utils.misc.Failure to its own module
* Leave the execution_graph as none until compiled
* Move state link to developer docs
* Raise error if atom asked to schedule with unknown intention
* Removed unused TIMED_OUT state
* Rework documentation of notifications
* Test retry fails on revert
* Exception when scheduling task with invalid state
* Fix race in worker-based executor result processing
* Set logbook/flowdetail/atomdetail meta to empty dict
* Move 'inputs and outputs' to developers docs
* tests: Discover absence of zookeeper faster
* Fix spelling mistake
* Should be greater or equal to zero and not greater than
* Persistence cleanup part one
* Run worker-based engine tests faster
* SQLAlchemy requirements put in order
* Add timeout to WaitForOneFromTask
* Use same code to reset flow and parts of it
* Optimize dependency links in flattening
* Adjust the exception hierachy
* docs: Links to methods on arguments and results page
* Add __repr__ method to Atom
* Flattening improvements
* tests: Fix WaitForOneFromTask constructor parameter introspection
* Rework graph flow unit tests
* Rewrite assertion for same elements in sequences
* Unit tests for unordered flow
* Linear flow: mark links and rework unit tests
* Drop indexing operator from linear flow
* Drop obsolete test_unordered_flow
* Iteration over links in flow interface
* Add a timeout object that can be interrupted
* Avoid shutting down of a passed executor
* Add more tests for resumption with retry
* Improve logging for proxy publish
* Small documentation fix
* Improve proxy publish method
* Add Retry to developers documentation
* Move flow states to developers documentation
* Remove extraneous vim configuration comments
* Make schedule a proper method of GraphAction
* Simplify graph analyzer interface
* Test storage with memory and sqlite backends
* Fix few minor spelling errors
* Fix executor requests publishing bug
* Flow smart revert with retry controller
* Add atom intentions for tasks and retries
* [WBE] Collect information from workers
* Add tox environment for pypy
* docs: Add inheritance diagram to exceptions documentation
* Adjust logging levels and usage to follow standards
* Introduce message types for WBE protocol
* Add retry action to execute retries
* Extend logbook and storage to work with retry
* Add retry to execution graph
* Add retry to Flow patterns
* Add base class for Retry
* Update request `expired` property docsting
* docs: Add page describing atom arguments and results
* docs: Improve BaseTask method docstrings
* Remove extra quote symbol
* docs: Relative links improvements
* docs: Ingore 'taskflow.' prefix when sorting module index
* Update comment + six.text_type instead of str for name
* Avoid calling callbacks while holding locks
* Rename remote task to request
* Rework proxy publish functionality
* Updated from global requirements
* Use message.requeue instead of message.reject
* Lock test tweaks
* Move endpoint subclass finding to reflection util
* Correct LOG.warning in persistence utils
* Introduce remote tasks cache for worker-executor
* Worker-based engine clean-ups
* A few worker-engine cleanups
* Add a delay before releasing the lock
* Allow connection string to be just backend name
* Get rid of openstack.common.py3kcompat
* Clean-up several comments in reflection.py
* Fix try_clean not getting the job_path
* Updated from global requirements
* Rename uuid to topic
* Fixups for threads_count usage and logging
* Use the stop watch utility instead of custom timing
* Unify usage of storage error exception type
* Add zookeeper job/jobboard impl
* Updated from global requirements
* Removed copyright from empty files
* Remove extraneous vim configuration comments
* Use six.text_type() instead of str() in sqlalchemy backend
* Fix dummy lock missing pending_writers method
* Move some common/to be shared kazoo utils to kazoo_utils
* Switch to using the type checking decode_json
* Fix few spelling and grammar errors
* Fixed spelling error
* Run action-engine tests with worker-based engine
* Message-oriented worker-based flow with kombu
* Check atom doesn't provide and return same values
* Fix command for pylint tox env
* Remove locale overrides form tox template
* Reduce test and optional requirements to global requirements
* Rework sphinx documentation
* Remove extraneous vim configuration comments
* Sync with global requirements
* Instead of doing set diffing just partition when state checking
* Add ZooKeeper backend to examples
* Storage protects lower level backend against thread safety
* Remove tox locale overrides
* Update .gitreview after repo rename
* Small storage tests clean-up
* Support building wheels (PEP-427)

0.1.3
-----

* Add validate() base method
* Fix deadlock on waiting for pending_writers to be empty
* Rename self._zk to self._client
* Use listener instead of AutoSuspendTask in test_suspend_flow
* Use test utils in test_suspend_flow
* Use reader/writer locks in storage
* Allow the usage of a passed in sqlalchemy engine
* Be really careful with non-ascii data in exceptions/failures
* Run zookeeper tests if localhost has a compat. zookeeper server
* Add optional-requirements.txt
* Move kazoo to testenv requirements
* Unpin testtools version and bump subunit to >=0.0.18
* Remove use of str() in utils.misc.Failure
* Be more resilent around import/detection/setup errors
* Some zookeeper persistence improvements/adjustments
* Add a validate method to dir and memory backends
* Update oslo copy to oslo commit 39e1c5c5f39204
* Update oslo.lock from incubator commit 3c125e66d183
* Refactor task/flow flattening
* Engine tests refactoring
* Tests: don't pass 'values' to task constructor
* Test fetching backends via entry points
* Pin testtools to 0.9.34 in test requirements
* Ensure we register the new zookeeper backend as an entrypoint
* Implement ZooKeeper as persistence storage backend
* Use addCleanup instead of tearDown in test_sql_persistence
* Retain the same api for all helpers
* Update execute/revert comments
* Added more unit tests for Task and FunctorTask
* Doc strings and comments clean-up
* List examples function doesn't accept arguments
* Tests: Persistence test mixin fix
* Test using mysql + postgres if available
* Clean-up and improve async-utils tests
* Use already defined PENDING variable
* Add utilities for working with binary data
* Cleanup engine base class
* Engine cleanups
* Update atom comments
* Put full set of requirements to py26, py27 and py33 envs
* Add base class Atom for all flow units
* Add more requirements to cover tox environment
* Put SQLAlchemy requirements on single line
* Proper exception raised from check_task_transition
* Fix function name typo in persistence utils
* Use the same way of assert isinstance in all tests
* Minor cleanup in test_examples
* Add possibility to create Failure from exception
* Exceptions cleanup
* Alter is_locked() helper comment
* Add a setup.cfg keywords to describe taskflow
* Use the released toxgen tool instead of our copy

0.1.2
-----

* Move autobinding to task base class
* Assert functor task revert/execute are callable
* Use the six callback checker
* Add envs for different sqlalchemy versions
* Refactor task handler binding
* Move six to the right location
* Use constants for the execution event strings
* Added htmlcov folder to .gitignore
* Reduce visibility of task_action
* Change internal data store of LogBook from list to dict
* Misc minor fixes to taskflow/examples
* Add connection_proxy param
* Ignore doc build files
* Fix spelling errors
* Switch to just using tox
* Enable H202 warning for flake8
* Check tasks should not provide same values
* Allow max_backoff and use count instead of attempts
* Skip invariant checking and adding when nothing provided
* Avoid not_done naming conflict
* Add stronger checking of backend configuration
* Raise type error instead of silencing it
* Move the container fetcher function to utils
* Explicitly list the valid transitions to RESUMING state
* Name the graph property the same as in engine
* Bind outside of the try block
* Graph action refactoring
* Add make_completed_future to async_utils
* Update oslo-incubator copy to oslo-incubator commit 8b2b0b743
* Ensure that mysql traditional mode is enabled
* Move async utils to own file
* Update requirements from opentack/requirements
* Code cleanup for eventlet_utils.wait_fo_any
* Refactor engine internals
* Add wait_for_any method to eventlet utils
* Introduce TaskExecutor
* Run some engine tests with eventlet if it's available
* Do not create TaskAction for each task
* Storage: use names instead of uuids in interface
* Add tests for metadata updates
* Fix sqlalchemy 0.8 issues
* Fix minor python3 incompatibility
* Speed up FlowDetail.find
* Fix misspellings
* Raise exception when trying to run empty flow
* Use update_task_metadata in set_task_progress
* Capture task duration
* Fix another instance of callback comparison
* Don't forget to return self
* Fixes how instances methods are not deregistered
* Targeted graph flow pattern
* All classes should explicitly inherit object class
* Initial commit of sphinx related files
* Improve is_valid_attribute_name utility function
* Coverage calculation improvements
* Fix up python 3.3 incompatabilities

0.1.1
-----

* Pass flow failures to task's revert method
* Storage: add methods to get all flow failures
* Pbr requirement went missing
* Update code to comply with hacking 0.8.0
* Don't reset tasks to PENDING state while reverting
* Let pbr determine version automatically
* Be more careful when passing result to revert()

0.1
---

* Support for optional task arguments
* Do not erase task progress details
* Storage: restore injected data on resumption
* Inherit the greenpool default size
* Add debug logging showing what is flattened
* Remove incorrect comment
* Unit tests refactoring
* Use py3kcompat.urlutils from oslo instead of six.urllib_parse
* Update oslo and bring py3kcompat in
* Support several output formats in state_graph tool
* Remove task_action state checks
* Wrapped exception doc/intro comment updates
* Doc/intro updates for simple_linear_listening
* Add docs/intro to simple_linear example
* Update intro/comments for reverting_linear example
* Add docs explaining what/how resume_volume_create works
* A few resuming from backend comment adjustments
* Add an introduction to explain resume_many example
* Increase persistence example comments
* Boost graph flow example comments
* Also allow "_" to be valid identifier
* Remove uuid from taskflow.flow.Flow
* A few additional example boot_vm comments + tweaks
* Add a resuming booting vm example
* Add task state verification
* Beef up storage comments
* Removed unused utilities
* Helpers to save flow factory in metadata
* Storage: add flow name and uuid properties
* Create logbook if not provided for create_flow_details
* Prepare for 0.1 release
* Comment additions for exponential backoff
* Beef up the action engine comments
* Pattern comment additions/adjustments
* Add more comments to flow/task
* Save with the same connection
* Add a persistence util logbook formatting function
* Rename get_graph() -> execution_graph
* Continue adding docs to examples
* Add more comments that explain example & usage
* Add more comments that explain example & usage
* Add more comments that explain example & usage
* Add more comments that explain example & usage
* Fix several python3 incompatibilities
* Python3 compatibility for utils.reflection
* No module name for builtin type and exception names
* Fix python3 compatibility issues in examples
* Fix print statements for python 2/3
* Add a mini-cinder volume create with resumption
* Update oslo copy and bring over versionutils
* Move toward python 3/2 compatible metaclass
* Add a secondary booting vm example
* Resumption from backend for action engine
* A few wording/spelling adjustments
* Create a green executor & green future
* Add a simple mini-billing stack example
* Add a example which uses a sqlite persistence layer
* Add state to dot->svg tool
* Add a set of useful listeners
* Remove decorators and move to utils
* Add reasons as to why the edges were created
* Fix entrypoints being updated/created by update.py
* Validate each flow state change
* Update state sequence for failed flows
* Flow utils and adding comments
* Bump requirements to the latest
* Add a inspect sanity check and note about bound methods
* Some small exception cleanups
* Check for duplicate task names on flattening
* Correctly save task versions
* Allow access by index
* Fix importing of module files
* Wrapping and serializing failures
* Simpler API to load flows into engines
* Avoid setting object variables
* A few adjustments to the progress code
* Cleanup unused states
* Remove d2to dependency
* Warn if multiple providers found
* Memory persistence backend improvements
* Create database from models for SQLite
* Don't allow mutating operations on the underlying graph
* Add graph density
* Suspend single and multi threaded engines
* Remove old tests for unexisted flow types
* Boot fake vm example fixed
* Export graph to dot util
* Remove unused utility classes
* Remove black list of graph flow
* Task decorator was removed and examples updated
* Remove weakref usage
* Add basic sanity tests for unordered flow
* Clean up job/jobboard code
* Add a directory/filesystem based persistence layer
* Remove the older (not used) resumption mechanism
* Reintegrate parallel action
* Add a flow flattening util
* Allow to specify default provides at task definition
* Graph flow, sequential graph action
* Task progress
* Verify provides and requires
* Remap the emails of the committers
* Use executors instead of pools
* Fix linked exception forming
* Remove threaded and distributed flows
* Add check that task provides all results it should
* Use six string types instead of basestring
* Remove usage of oslo.db and oslo.config
* Move toward using a backend+connection model
* Add provides and requires properties to Flow
* Fixed crash when running the engine
* Remove the common config since its not needed
* Allow the lock decorator to take a list
* Allow provides to be a set and results to be a dictionary
* Allow engines to be copied + blacklist broken flows
* Add link to why we have to make this factory due to late binding
* Use the lock decorator and close/join the thread pool
* Engine, task, linear_flow unification
* Combine multiple exceptions into a linked one
* Converted some examples to use patterns/engines
* MultiThreaded engine and parallel action
* State management for engines
* Action engine: save task results
* Initial implementation of action-based engine
* Further updates to update.py
* Split utils module
* Rename Task.__call__ to Task.execute
* Reader/writer no longer used
* Rename "revert_with" => "revert" and "execute_with" to "execute"
* Notify on task reversion
* Have runner keep the exception
* Use distutil version classes
* Add features to task.Task
* Add get_required_callable_args utility function
* Add get_callable_name utility function
* Require uuid + move functor_task to task.py
* Check examples when running tests
* Use the same root test class
* LazyPluggable is no longer used
* Add a locally running threaded flow
* Change namings in functor_task and add docs to its __init__
* Rework the persistence layer
* Do not have the runner modify the uuid
* Refactor decorators
* Nicer way to make task out of any callable
* Use oslo's sqlalchemy layer
* File movements
* Added Backend API Database Implementation
* Added Memory Persistence API and Generic Datatypes
* Resync the latest oslo code
* Remove openstack.common.exception usage
* Forgot to move this one to the right folder
* Add a new simple calculator example
* Quiet the provider linking
* Deep-copy not always possible
* Add a example which simulates booting a vm
* Add a more complicated graph example
* Move examples under the source tree
* Adjust a bunch of hacking violations
* Fix typos in test_linear_flow.py and simple_linear_listening.py
* Fix minor code style
* Fix two minor bugs in docs/examples
* Show file modifications and fix dirpath based on config file
* Add a way to use taskflow until library stabilized
* Provide the length of the flows
* Parents should be frozen after creation
* Allow graph dependencies to be manually provided
* Add helper reset internals function
* Move to using pbr
* Unify creation/usage of uuids
* Use the runner interface as the best task lookup
* Ensure we document and complete correct removal
* Pass runners instead of task objects/uuids
* Move how resuming is done to be disconnected from jobs/flows
* Clear out before connecting
* Make connection/validation of tasks be after they are added
* Add helper to do notification
* Store results by add() uuid instead of in array format
* Integrate better locking and a runner helper class
* Cleaning up various components
* Move some of the ordered flow helper classes to utils
* Allow instance methods to be wrapped and unwrapped correctly
* Add a start of a few simple examples
* Update readme to point to links
* Fix most of the hacking rules
* Fix all flake8 E* and F* errors
* Fix the current flake8 errors
* Don't keep the state/version in the task name
* Dinky change to trigger jenkins so I can cleanup
* Add the task to the accumulator before running
* Add .settings and .venv into .gitignore
* Fix tests for python 2.6
* Add the ability to soft_reset a workflow
* Add a .gitreview file so that git-review works
* Ensure we have an exception and capture the exc_info
* Update how graph results are fetched when they are optional
* Allow for optional task requirements
* We were not notifying when errors occured so fix that
* Bring over the nova get_wrapped_function helper and use it
* Allow for passing in the metadata when creating a task detail entry
* Update how the version task functor attribute is found
* Remove more tabs incidents
* Removed test noise and formatted for pep8
* Continue work on decorator usage
* Ensure we pickup the packages
* Fixed pep8 formatting... Finally
* Add flow disassociation and adjust the assocate path
* Add a setup.cfg and populate it with a default set of nosetests options
* Fix spacing
* Add a better task name algorithm
* Add a major/minor version
* Add a get many attr/s and join helper functions
* Reduce test noise
* Fix a few unit tests due to changes
* Ensure we handle functor names and resetting correctly
* Remove safe_attr
* Modifying db tests
* Removing .pyc
* Fixing .py in .gitignore
* Update db api test
* DB api test cases and revisions
* Allow for turning off auto-extract and add a test
* Use a function to filter args and add comments
* Use update instead of overwrite
* Move decorators to new file and update to use better wraps()
* Continue work with decorator usage
* Update with adding a provides and requires decorator for standalone function usage
* Instead of apply use __call__
* Add comment to why we accumulate before notifying task listeners
* Use a default sqlite backing using a taskflow file
* Add a basic rollback accumlator test
* Use rollback accumulator and remove requires()/provides() from being functions
* Allow (or disallow) multiple providers of items
* Clean the lines in a seperate function
* Resync with oslo-incubator
* Remove uuid since we are now using uuidutils
* Remove error code not found in strict version of pylint
* Include more dev testing packages + matching versions
* Update dependencies for new db/distributed backends
* Move some of the functions to use there openstack/common counterparts
* More import fixups
* Patch up the imports
* Fix syntax error
* Rename cause -> exception and make exception optional
* Allow any of the previous tasks to satisfy requirements
* Ensure we change the self and parents states correctly
* Always have a name provided
* Cleaning up files/extraneous files/fixing relations
* More pylint cleanups
* Make more tests for linear and shuffle test utils to common file
* Only do differences on set objects
* Ensure we fetch the appropriate inputs for the running task
* Have the linear workflow verify the tasks inputs
* Specify that task provides/requires must be an immutable set
* Clean Up for DB changes
* db api defined
* Fleshing out sqlalchemy api
* Almost done with sqlalchemy api
* Fix state check
* Fix flow exception wording
* Ensure job is pending before we associate and run
* More pylint cleanups
* Ensure we associate with parent flows as well
* Add a nice run() method to the job class that will run a flow
* Massive pylint cleanup
* deleting .swp files
* deleting .swp files
* cleaning for initial pull request
* Add a few more graph ordering test cases
* Update automatic naming and arg checks
* Update order calls and connect call
* Move flow failure to flow file and correctly catch ordering failure
* Just kidding - really fixing relations this time
* Fixing table relations
* Allow job id to be passed in
* Check who is being connected to and ensure > 0 connectors
* Move the await function to utils
* Graph tests and adjustments releated to
* Add graph flow tests
* Fix name changes missed
* Enable extraction of what a functor requires from its args
* Called flow now, not workflow
* Second pass at models
* More tests
* Simplify existence checks
* More pythonic functions and workflow -> flow renaming
* Added more utils, added model for workflow
* Spelling errors and stuff
* adding parentheses to read method
* Implemented basic sqlalchemy session class
* Setting up Configs and SQLAlchemy/DB backend
* Fix the import
* Use a different logger method if tolerant vs not tolerant
* More function comments
* Add a bunch of linear workflow tests
* Allow resuming stage to be interrupted
* Fix the missing context variable
* Moving over celery/distributed workflows
* Update description wording
* Pep fix
* Instead of using notify member functions, just use functors
* More wording fixes
* Add the ability to alter the task failure reconcilation
* Correctly run the tasks after partial resumption
* Another wording fix
* Spelling fix
* Allow the functor task to take a name and provide it a default
* Updated functor task comments
* Move some of the useful helpers and functions to other files
* Add the ability to associate a workflow with a job
* Move the useful functor wrapping task from test to wrappers file
* Add a thread posting/claiming example and rework tests to use it
* After adding reposting/unclaiming reflect those changes here
* Add a nicer string name that shows what the class name is
* Adjust some of the states jobs and workflows could be in
* Add a more useful name that shows this is a task
* Remove impl of erasing which doesn't do much and allow for job reposting
* Various reworkings
* Rename logbook contents
* Get a memory test example working
* Add a pylintrc file to be used with pylint
* Rework the logbook to be chapter/page based
* Move ordered workflow to its own file
* Increase the number of comments
* Start adding in a more generic DAG based workflow
* Remove dict_provider dependency
* Rework due to code comments
* Begin adding testing functionality
* Fill in the majority of the memory job
* Rework how we should be using lists instead of ordereddicts for optimal usage
* Add a context manager to the useful read/writer lock
* Ensure that the task has a name
* Add a running state which can be used to know when a workflow is running
* Rename the date created field
* Add some search functionality and adjust the await() function params
* Remove and add a few new exceptions
* Shrink down the exposed methods
* Remove the promise object for now
* Add RESUMING
* Fix spelling
* Continue on getting ready for the memory impl. to be useful
* On python <= 2.6 we need to import ordereddict
* Remove a few other references to nova
* Add in openstack common and remove patch references
* Move simplification over
* Continue moving here
* Update README.md
* Update readme
* Move the code over for now
* Initial commit
