[project] name = "xpost" version = "0.1.0" description = "social media crossposting tool" readme = "README.md" requires-python = ">=3.12" dependencies = [ "dnspython>=2.8.0", "grapheme>=0.6.0", "httpx>=0.27.0", "python-magic>=0.4.27", "websockets>=15.0.1", ] [dependency-groups] dev = [ "pytest>=8.4.2", "ruff>=0.9.0", "mypy>=1.15.0", ] [tool.pytest.ini_options] pythonpath = ["."] [tool.ruff] target-version = "py312" line-length = 88 src = ["."] [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # Pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "ARG", # flake8-unused-arguments "SIM", # flake8-simplify ] ignore = [ "E501", # line too long (handled by formatter) "B008", # do not perform function calls in argument defaults "B904", # raise without from inside except "B023", # loop variable binding in lambdas (false positive for async for) ] [tool.ruff.lint.isort] force-single-line = false lines-after-imports = 2 [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true warn_unused_ignores = true disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true strict_equality = true # external libraries [[tool.mypy.overrides]] module = ["grapheme"] ignore_missing_imports = true