Files
ComfyUI-OpenClaw/pyproject.toml
T

159 lines
3.9 KiB
TOML

[project]
name = "comfyui-openclaw"
description = "Your own personal AIGC Factory. Any picture. Any reel. The Comfy way.©️"
version = "1.0.0"
license = {text = "MIT"}
readme = "README.md"
requires-python = ">=3.10"
# S57: cryptography is required for Fernet AEAD secrets-at-rest encryption.
# S85: defusedxml is required for scanner-recognized fail-closed WeChat XML parsing.
dependencies = ["cryptography>=41.0", "defusedxml>=0.7.1"]
[project.optional-dependencies]
# WeChat AES encrypted ingress mode (R82) — lazy-imported, only needed when encrypt_type=aes
wechat-aes = ["pycryptodomex>=3.20"]
[project.urls]
Repository = "https://github.com/rookiestar28/ComfyUI-OpenClaw"
Documentation = "https://github.com/rookiestar28/ComfyUI-OpenClaw#readme"
"Bug Tracker" = "https://github.com/rookiestar28/ComfyUI-OpenClaw/issues"
[tool.comfy]
PublisherId = "rookiestar"
DisplayName = "ComfyUI OpenClaw"
Icon = ""
# ========================================
# Development Tools Configuration
# ========================================
[tool.ruff]
# Ruff replaces flake8, isort, and other linters
target-version = "py310"
line-length = 88
indent-width = 4
[tool.ruff.lint]
# Enable pycodestyle (E, W), Pyflakes (F), isort (I), and more
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"N", # pep8-naming
"UP", # pyupgrade
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"SIM", # flake8-simplify
"RUF", # Ruff-specific rules
]
ignore = [
"E501", # Line too long (handled by formatter)
"B008", # Do not perform function call in argument defaults
"B904", # Within an except clause, raise exceptions with from err
]
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"] # Allow unused imports in __init__.py
"tests/*" = ["S101"] # Allow assert statements in tests
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "lf"
[tool.black]
line-length = 88
target-version = ["py310"]
[tool.mypy]
python_version = "3.10"
warn_return_any = true
warn_unused_configs = false
disallow_untyped_defs = false # Start lenient, can tighten later
disallow_any_unimported = false
explicit_package_bases = true
no_site_packages = true
ignore_missing_imports = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
check_untyped_defs = true
strict_equality = true
# Production paths governed by tests/static_analysis_policy.json.
files = [
"__init__.py",
"config.py",
"api",
"connector",
"models",
"nodes",
"services",
"scripts",
]
# Ignore missing imports for ComfyUI and external packages
[[tool.mypy.overrides]]
module = [
"aiohttp.*",
"server",
"folder_paths",
]
ignore_missing_imports = true
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
norecursedirs = [".git", ".tox", "dist", "build", "*.egg", "patterns"]
addopts = [
"-v",
"--strict-markers",
"--tb=short",
"--ignore=__init__.py",
# "--cov=.",
# "--cov-report=term-missing",
# "--cov-report=html",
# "--cov-report=xml",
]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"integration: marks tests as integration tests",
"unit: marks tests as unit tests",
"asyncio: marks tests as async (pytest-asyncio)",
]
[tool.coverage.run]
source = ["."]
omit = [
"tests/*",
"**/test_*.py",
"**/__pycache__/*",
".venv/*",
"venv/*",
]
[tool.coverage.report]
fail_under = 45.0
show_missing = true
skip_covered = true
precision = 2
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise AssertionError",
"raise NotImplementedError",
"if __name__ == .__main__.:",
"if TYPE_CHECKING:",
"@abstractmethod",
]
[tool.isort]
profile = "black"
line_length = 88