Skip to content

Latest commit

 

History

History
151 lines (121 loc) · 6.02 KB

CHANGELOG.md

File metadata and controls

151 lines (121 loc) · 6.02 KB

Changelog

Unreleased

v0.5.1 (2024-10-31)

Changes

  • ➖ compatible with pydantic v1 and v2

v0.5.0 (2024-10-28)

Breaking Changes

  • ✨ draw a DAG using graphviz
  • 💥 change TawaziBaseException to TawaziError

Bug Fixes

  • 🐛 inherit from Exception instead of BaseException

v0.4.1 (2024-09-11)

Improvements

  • ♻️ use dynamic node construction instead of static one

v0.4.0 (2024-08-09)

Improvements

  • ♻️ 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

Bug Fixes

  • 🐛 fix twz_active behavior. If twz_active is False, the node returns None

v0.3.4 (2024-03-14)

Bug Fixes

  • 🐛 failing Tuple typing check with future annotations

v0.3.3 (2024-02-26)

Improvements

  • ⚡ 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

Bug Fixes

  • 🐛 logging

v0.3.2 (2024-01-04)

Bug Fixes

  • 🐛 wrong error message
  • 🐛 fix counting nodes during dag description
  • 🐛 failing to run DAG inside a Process

Improvements

  • ⚡ faster logging
  • ♻️ better mypy on raise_arg_error
  • ✅ test execnode with typed tuple
  • ✅ test passing DAG inside a Process

v0.3.1 (2023-07-18)

Bug Fixes

  • 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

v0.3.0 (2023-05-31)

Improvement

  • 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

Breaking Changes

  • Improved Interface to create DAGs using dag decorator
  • Improved Interface to create ExecNodes using xn decorator

Internal Changes

  • 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

v0.2.0 (2022-10-17)

New

  • 💚 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.

v0.1.0 (2022-07-20)

New

  • ✨ first functional iteration of the DAG