- ➖ compatible with pydantic v1 and v2
- ✨ draw a DAG using graphviz
- 💥 change TawaziBaseException to TawaziError
- 🐛 inherit from Exception instead of BaseException
- ♻️ use dynamic node construction instead of static one
- ♻️ big overhaul to the dag interface
- ♻️ rely on networkx for most of the graph-related computations
- ✨ root nodes implementation (see documentation for further explanation)
- 📝 improve documentation and remove most of the outdated comments
- ✨ added AsyncDAG / AsyncDAGExecution to execute DAG in async context
- ✨ added Async-Threaded resource
- ✨ added feature of running DAG in DAG
- ✨ Include Line Number pointing to the location where the DAG made the error!
- ✨ Support Ellipsis for DAG.compose' input
- ⚡ Optimize ArgExecNode and ReturnExecNode by using main-thread instead of DEFAULT_THREAD
- 🐛 fix twz_active behavior. If twz_active is False, the node returns None
- 🐛 failing Tuple typing check with future annotations
- ⚡ accelerate getting highest priority node (optimizations)
- ⚡ accelerate get_num_running_threads
- ⚡ accelerate node removal by using BiDirectionalDict
- ⚡ accelerate node removal
- ⚡ accelerate get_num_running_threads by using len(running) instead
- 🐛 logging
- 🐛 wrong error message
- 🐛 fix counting nodes during dag description
- 🐛 failing to run DAG inside a Process
- ⚡ faster logging
- ♻️ better mypy on raise_arg_error
- ✅ test execnode with typed tuple
- ✅ test passing DAG inside a Process
- If a debug ExecNode depends on a variable data, the DAG.setup method hanged forever
- If a debug ExecNodes are provided the DAG.setup method sometimes fails
- Tawazi is compatible with pydantic v1 only
- Run the ExecNode’s function with arbitrary arguments names
- pass in arguments & return values from created DAGs like normal functions
- Setup ExecNodes
- Debug ExecNodes
- Tag an ExecNode or multiple ExecNodes
- ExecNode is reusable (even inside the same DAG)
- Create a SubDag by specifying output ExecNodes of the DAG using Tag, id or the ExecNode itself
- Setup ExecNode do not accept dynamic arguments (arguments that can change between executions)
- DAG can return multiple values via dict, tuple or list
- Cache results of a specific DAG execution inside a file and reuse it later to skip running the same executions again
- An ExecNode can not be debug and setup at the same time!
- Configure ExecNodes using yaml, json or a python dict
- Profile the DAG execution (profiling of each ExecNode's execution)
- Create a SubDag by specifying ExecNodes to exclude of the DAG using Tag, id or the ExecNode itself
- pass in a thread-name prefix to the DAG
- Cache all the dependencies of some ExecNodes but not the specified ExecNodes themselves (helpful for debugging these ExecNodes)
- Introduce DAGExecution class which is an instance holding an execution of a DAG
- DAGExecution.scheduled_nodes contains the ExecNodes that will be executed in the next DAGExecution.run() call
- Support mypy typing
- Add a documentation page using mkdocs
- A single ExecNode can have multiple Tags
-
-
-
- ** / // % divmod abs << >> < <= == > >= operations implemented for ExecNode
-
-
- Conditionally execute an ExecNode inside a DAG using
twz_active
- helpers and_, or_, not_ are provided to do logical operations on ExecNodes
- LazyExecNode can be executed outside of DAG description according to env var TAWAZI_EXECNODE_OUTSIDE_DAG_BEHAVIOR
- unpack the results of an ExecNode execution using
unpack_to
property - Check
unpack_to
property against typing - Experimental compose a subdag from a single DAG by choosing the input ExecNodes and the output ExecNodes
- ExecNode can wrap anonymous functions that have no qualname attribute
- Choose where an ExecNode is executed (in main-thread or in a thread-pool)
- Document Usage of the Library
- Improved Interface to create DAGs using
dag
decorator - Improved Interface to create ExecNodes using
xn
decorator
- Use NoVal instead of None to express not yet calculated result in ExecNode
- Copy ExecNode instead of deep-copying it
- Run tests against Python 3.7, 3.8, 3.9, 3.10, 3.11
- Run tests against the documentation
- Test Mypy
- Use Ruff in pre-commit
- use pytest code-blocks instead of mkcodes
- CI tests building the documentation
- 💚 CI with tests on 6 different environments. (Coverage: 99%)
- ✅ Tested on python 3.6, 3.7, 3.8, 3.9, 3.10.
- ✅ Tested on Windows and Linux.
- ♻️ Change the default DAG interface creation to make it ergonomic.
- ⚡ choose Nodes that have more successors over Nodes that no successors.
- ✨ execute the DAG safely without using the scheduler.
- ✨ test the code in the README.
- 🔧 🧑💻 Dynamic configuration of the library with custom environment variables.
- 📝 🧑💻 Static general documentation with mkdocs.
- 🏷️ Repository passes mypy (not tested on the
--strict
option which is too coercive at the moment). - 🔊 Changed logging to loguru by default.
- ✨ Implementation of the subgraph execution feature.
- 💚 Dependabot integration.
- ⬆️ Switched from requirements to poetry for dependency management.
- 🎨 Revamp of the repository.
- 🧑💻 💚 Better pre-commit configuration for ease of development.
- ✨ first functional iteration of the DAG