CHANGES
=======

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
