[project] authors = [{ name = "pyflowx" }] classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Software Development :: Libraries :: Application Frameworks", ] dependencies = ["graphlib_backport >= 1.0.0; python_version < '3.9'"] description = "Lightweight, type-safe DAG task scheduler with multi-strategy execution." keywords = ["async", "dag", "scheduler", "task", "workflow"] license = { text = "MIT" } name = "pyflowx" readme = "README.md" requires-python = ">=3.8" version = "0.1.2" [project.scripts] pymake = "pyflowx.cli.pymake:main" [project.optional-dependencies] dev = [ "hatch>=1.14.2", "httpx>=0.28.0", "mypy >= 1.0", "prek>=0.4.5", "pytest-asyncio>=0.24.0", "pytest-cov>=5.0.0", "pytest-html>=4.1.1", "pytest-mock>=3.14.0", "pytest-xdist>=3.6.1", "pytest>=8.0.0", "ruff>=0.8.0", "tox-uv>=1.13.1", "tox>=4.25.0", ] [build-system] build-backend = "hatchling.build" requires = ["hatchling"] [tool.hatch.build.targets.wheel] packages = ["src/pyflowx"] [tool.hatch.build.targets.wheel.force-include] "src/pyflowx/py.typed" = "pyflowx/py.typed" [tool.mypy] # mypy 2.x requires a >=3.10 target. We check against 3.10 syntax; the # runtime stays 3.8-compatible via `from __future__ import annotations` # (all annotations are strings at runtime) and the graphlib_backport # conditional dependency for topological sorting. check_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_defs = true files = ["src/pyflowx"] ignore_missing_imports = false python_version = "3.8" strict = true warn_return_any = true warn_unused_configs = true [tool.uv.sources] pyflowx = { workspace = true } [[tool.uv.index]] default = true url = "https://mirrors.aliyun.com/pypi/simple/" [dependency-groups] dev = ["pyflowx[dev]"] [tool.coverage.run] branch = true concurrency = ["thread"] omit = ["src/pyflowx/examples/*", "tests/*"] source = ["pyflowx"] [tool.coverage.report] exclude_lines = ["if TYPE_CHECKING:", "if __name__ == .__main__.:", "pragma: no cover", "raise NotImplementedError"] fail_under = 95 show_missing = true [tool.pytest.ini_options] asyncio_default_fixture_loop_scope = "function"