social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky
at next 74 lines 1.6 kB view raw
1[project] 2name = "xpost" 3version = "0.1.0" 4description = "social media crossposting tool" 5readme = "README.md" 6requires-python = ">=3.12" 7dependencies = [ 8 "dnspython>=2.8.0", 9 "grapheme>=0.6.0", 10 "httpx>=0.27.0", 11 "python-magic>=0.4.27", 12 "websockets>=15.0.1", 13] 14 15[dependency-groups] 16dev = [ 17 "pytest>=8.4.2", 18 "ruff>=0.9.0", 19 "mypy>=1.15.0", 20] 21 22[tool.pytest.ini_options] 23pythonpath = ["."] 24 25[tool.ruff] 26target-version = "py312" 27line-length = 88 28src = ["."] 29 30[tool.ruff.lint] 31select = [ 32 "E", # pycodestyle errors 33 "W", # pycodestyle warnings 34 "F", # Pyflakes 35 "I", # isort 36 "B", # flake8-bugbear 37 "C4", # flake8-comprehensions 38 "UP", # pyupgrade 39 "ARG", # flake8-unused-arguments 40 "SIM", # flake8-simplify 41] 42ignore = [ 43 "E501", # line too long (handled by formatter) 44 "B008", # do not perform function calls in argument defaults 45 "B904", # raise without from inside except 46 "B023", # loop variable binding in lambdas (false positive for async for) 47] 48 49[tool.ruff.lint.isort] 50force-single-line = false 51lines-after-imports = 2 52 53[tool.ruff.format] 54quote-style = "double" 55indent-style = "space" 56skip-magic-trailing-comma = false 57line-ending = "auto" 58 59[tool.mypy] 60python_version = "3.12" 61warn_return_any = true 62warn_unused_configs = true 63warn_unused_ignores = true 64disallow_untyped_defs = false 65disallow_incomplete_defs = false 66check_untyped_defs = true 67no_implicit_optional = true 68warn_redundant_casts = true 69strict_equality = true 70 71# external libraries 72[[tool.mypy.overrides]] 73module = ["grapheme"] 74ignore_missing_imports = true