22f8d2110d
1. add pysnooper>=1.2.3 to dev dependencies in pyproject.toml and uv.lock 2. update type hints in task.py from Iterator to Generator 3. add more PyPI mirrors and update envdev.py comments and checks 4. fix trailing whitespace in executors.py
163 lines
4.7 KiB
TOML
163 lines
4.7 KiB
TOML
[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.14",
|
|
"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'",
|
|
"typing-extensions>=4.13.2",
|
|
]
|
|
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.2.9"
|
|
|
|
[project.scripts]
|
|
autofmt = "pyflowx.cli.autofmt:main"
|
|
bumpversion = "pyflowx.cli.bumpversion:main"
|
|
clr = "pyflowx.cli.clearscreen:main"
|
|
emlman = "pyflowx.cli.emlmanager:main"
|
|
envdev = "pyflowx.cli.envdev:main"
|
|
envpy = "pyflowx.cli.envpy:main"
|
|
envrs = "pyflowx.cli.envrs:main"
|
|
filedate = "pyflowx.cli.filedate:main"
|
|
filelvl = "pyflowx.cli.filelevel:main"
|
|
foldback = "pyflowx.cli.folderback:main"
|
|
foldzip = "pyflowx.cli.folderzip:main"
|
|
gitt = "pyflowx.cli.gittool:main"
|
|
lscalc = "pyflowx.cli.lscalc:main"
|
|
msdown = "pyflowx.cli.llm.msdownload:main"
|
|
packtool = "pyflowx.cli.packtool:main"
|
|
pdftool = "pyflowx.cli.pdftool:main"
|
|
piptool = "pyflowx.cli.piptool:main"
|
|
pymake = "pyflowx.cli.pymake:main"
|
|
reseticon = "pyflowx.cli.reseticoncache:main"
|
|
scrcap = "pyflowx.cli.screenshot:main"
|
|
sglang = "pyflowx.cli.llm.sglang:main"
|
|
sshcopy = "pyflowx.cli.sshcopyid:main"
|
|
taskk = "pyflowx.cli.taskkill:main"
|
|
wch = "pyflowx.cli.which:main"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"hatch>=1.14.2",
|
|
"httpx>=0.28.0",
|
|
"prek>=0.4.5",
|
|
"pyrefly>=1.1.1",
|
|
"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",
|
|
]
|
|
llm = [
|
|
"sglang[all]==0.5.10rc0; python_version >= '3.10' and sys_platform == 'linux'",
|
|
]
|
|
office = [
|
|
"pillow>=10.4.0",
|
|
"pymupdf>=1.24.11",
|
|
"pypdf>=5.9.0",
|
|
"pytesseract>=0.3.13",
|
|
]
|
|
|
|
[build-system]
|
|
build-backend = "hatchling.build"
|
|
requires = ["hatchling"]
|
|
|
|
[[tool.uv.index]]
|
|
default = true
|
|
url = "https://mirrors.aliyun.com/pypi/simple/"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/pyflowx"]
|
|
|
|
[tool.hatch.build.targets.wheel.force-include]
|
|
"src/pyflowx/py.typed" = "pyflowx/py.typed"
|
|
|
|
[tool.uv.sources]
|
|
pyflowx = { workspace = true }
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pyflowx[dev,office,llm]",
|
|
"pysnooper>=1.2.3",
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
branch = true
|
|
concurrency = ["thread"]
|
|
omit = ["src/pyflowx/cli/*", "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"
|
|
markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"]
|
|
|
|
# Ruff 配置 - 与 .pre-commit-config.yaml 保持一致
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py38"
|
|
|
|
[tool.ruff.lint]
|
|
ignore = [
|
|
"E501", # line too long (handled by formatter)
|
|
"PLC0415", # import should be at top-level (intentional for lazy imports)
|
|
"PLR0913", # too many arguments
|
|
"PLR0915", # too many statements (intentional for complex methods)
|
|
"PLR2004", # magic value comparison
|
|
"PTH119", # os.path.basename (intentional for sys.argv)
|
|
"PTH123", # pathlib open() replacement
|
|
"RUF001", # ambiguous unicode characters in string
|
|
"RUF002", # ambiguous unicode characters in docstring
|
|
"RUF003", # ambiguous unicode characters in comment
|
|
"RUF012", # mutable class attributes (intentional for config)
|
|
"SIM108", # use ternary operator
|
|
]
|
|
select = [
|
|
"ARG", # flake8-unused-arguments
|
|
"B", # flake8-bugbear
|
|
"C4", # flake8-comprehensions
|
|
"E", # pycodestyle errors
|
|
"F", # Pyflakes
|
|
"I", # isort
|
|
"PL", # Pylint
|
|
"PTH", # flake8-use-pathlib
|
|
"RUF", # Ruff-specific rules
|
|
"SIM", # flake8-simplify
|
|
"UP", # pyupgrade
|
|
"W", # pycodestyle warnings
|
|
]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"**/tests/**" = ["ARG001", "ARG002"]
|
|
|
|
[tool.pyrefly]
|
|
preset = "strict"
|
|
project-includes = ["**/*.ipynb", "**/*.py*"]
|
|
python-version = "3.8"
|