[build-system] build-backend = "setuptools.build_meta" requires = ["setuptools>=83.0.0"] [dependency-groups] dev = [ { include-group = "lint" }, { include-group = "test" }, { include-group = "types" } ] lint = [ { include-group = "pre-commit" }, { include-group = "pylint" } ] pre-commit = [ "prek==0.5.7" ] pylint = [ "pylint==4.1.3" ] test = [ "pytest-cov==7.1.0", "pytest-github-actions-annotate-failures==0.4.2", "pytest==9.1.1", "responses==0.26.3" ] types = [ "ty==0.0.92", "mypy==2.4.0", "types-pyxdg==0.28.0.20261017", "types-python-dateutil==2.9.0.20261021", "types-requests==2.33.0.20261006" ] [project] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "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.15", "Topic :: Software Development :: Internationalization", "Topic :: Software Development :: Localization", "Topic :: Utilities" ] dependencies = [ "argcomplete", "certifi>=2026.10.23", "idna>=3.15", "python-dateutil", "pyxdg>=0.26", "requests>=2.33.0", "urllib3>=2.8.0" ] description = "A command-line utility for Weblate, translation tool with tight version control integration" dynamic = ["version"] keywords = [ "i18n", "l10n", "gettext", "git", "mercurial", "translate" ] license = "GPL-3.0-or-later" license-files = ["LICENSE"] name = "wlc" requires-python = ">=3.10" [[project.authors]] email = "michal@weblate.org" name = "Michal Čihař" [project.readme] content-type = "text/markdown" file = "README.md" [project.scripts] wlc = "wlc.main:main" [project.urls] Documentation = "https://docs.weblate.org/" Download = "https://github.com/WeblateOrg/wlc" Funding = "https://weblate.org/donate/" Homepage = "https://weblate.org/" "Issue Tracker" = "https://github.com/WeblateOrg/wlc/issues" "Source Code" = "https://github.com/WeblateOrg/wlc" Twitter = "https://twitter.com/WeblateOrg" [tool.check-manifest] ignore = [ ".dockerignore", "Dockerfile", ".well-known/*", ".editorconfig", "AGENTS.md", "*.toml", "*.yaml", "*.yml" ] [tool.check-wheel-contents] ignore = [ "W002" # Triggered by API mocks ] [tool.coverage.paths] source = [ "." ] [tool.coverage.report] exclude_also = [ "@(abc\\.)?abstractmethod", # Don't complain about missing debug-only code: "def __repr__", # Don't complain if non-runnable code isn't run: "if 0:", "if __name__ == .__main__.:", "if self\\.debug", # Type checking "if TYPE_CHECKING:", # Have to re-enable the standard pragma "pragma: no cover", # Don't complain if tests don't hit defensive assertion code: "raise AssertionError", "raise NotImplementedError" ] [tool.isort] profile = "black" [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] target-version = "py310" [tool.ruff.format] docstring-code-format = true [tool.ruff.lint] future-annotations = true ignore = [ "incorrect-blank-line-before-class", # CONFIG: incompatible with D211 "multi-line-summary-first-line", # CONFIG: incompatible with D213 "line-too-long", # CONFIG: formatter "raise-vanilla-args", # WONTFIX: Avoid specifying long messages outside the exception class "too-many-arguments", # WONTFIX: Too many arguments to function call "docstring-missing-returns", # WONTFIX "docstring-missing-yields", # WONTFIX "docstring-missing-exception", # WONTFIX "COM", # CONFIG: No trailing commas "PT" # CONFIG: Not using pytest ] preview = true select = ["ALL"] [tool.ruff.lint.flake8-copyright] min-file-size = 2 # Copyright without a year, see https://github.com/astral-sh/ruff/issues/10062 notice-rgx = "(?i)Copyright\\s+©\\s+" [tool.ruff.lint.per-file-ignores] # Test names describe their behavior and self might not be used there "tests/**" = ["D", "no-self-use"] [tool.rumdl] disable = [ # We do not enforce heading "first-line-heading", # Avoid length limit checks "line-length" ] [tool.rumdl.per-file-ignores] "README.md" = [ # Allow HTML "MD033" ] [tool.setuptools] include-package-data = false packages = ["wlc"] platforms = ["any"] [tool.setuptools.data-files] "share/doc/wlc" = ["THREAT_MODEL.md"] [tool.setuptools.dynamic.version] attr = "wlc.const.__version__" [tool.setuptools.package-data] wlc = ["py.typed"] [tool.typos.default] extend-ignore-re = [ "\"shortrevision\": \"[a-f0-9]+\"", "code\": \"[a-z]+\"" ]