pyproject.toml (109 lines of code) (raw):

[tool.poetry] name = "jbi" version = "0" description = "jira-bugzilla-integration" authors = ["@mozilla/jbi-core"] license = "MPL" [tool.poetry.dependencies] python = ">=3.12, <3.14" fastapi = "^0.115.12" pydantic = {version = "^2.11.4", extras = ["email"]} uvicorn = {extras = ["standard"], version = "^0.34.2"} atlassian-python-api = "^4.0.3" dockerflow = {extras = ["fastapi"], version = "2024.4.2"} Jinja2 = "^3.1.6" sentry-sdk = {extras = ["fastapi"], version = "^2.27.0"} pydantic-yaml = "^1.4.0" backoff = "^2.2.1" statsd = "^4.0.1" requests = "^2.32.3" pydantic-settings = "^2.9.1" pypandoc = "^1.15" [tool.poetry.group.dev.dependencies] click = "^8.1.8" pre-commit = "^4.2.0" coverage = {extras = ["toml"], version = "^7.8"} mypy = "^1.15" detect-secrets = "^1.5.0" bandit = "^1.8.3" pytest = "^8.3.5" yamllint = "^1.37.1" pytest-dotenv = "^0.5.2" types-requests = "^2.32.0" responses = "^0.25.7" httpx = "^0.28.1" factory-boy = "^3.3.3" pytest-factoryboy = "^2.7.0" ruff = "^0.11.8" pytest-mock = "^3.14.0" pytest-asyncio = "^0.26.0" [tool.poetry.scripts] jbi = "jbi.__main__:cli" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.ruff] target-version = "py312" lint.extend-select = ["I"] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] [tool.pytest.ini_options] testpaths = [ "tests/unit", ] env_override_existing_values = true env_files = [ ".env.example" ] markers = [ "no_mocked_bugzilla", "no_mocked_jira", ] [tool.mypy] python_version = "3.13" # Warn when returning Any from function with non-Any return warn_return_any = true plugins = "pydantic.mypy" [[tool.mypy.overrides]] module = ["ruamel", "bugzilla", "atlassian", "atlassian.rest_client", "statsd.defaults.env", "dockerflow.*"] ignore_missing_imports = true [[tool.mypy.overrides]] module = [ "jbi.app" ] disallow_any_generics = true disallow_subclassing_any = true disallow_untyped_calls = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true no_implicit_optional = true warn_unused_ignores = true warn_return_any = true no_implicit_reexport = true strict_equality = true strict_concatenate = true [tool.coverage] # https://github.com/nedbat/coveragepy [tool.coverage.run] omit = [ '*/.local/*', '/usr/*', '*/.venv/*', '*/.tox/*', '*/virtualenvs/*', ] [tool.coverage.report] exclude_lines = [ "# noqa", "raise NotImplementedError", "pragma: no cover", "def __repr__", "if .debug:", "raise NotImplementedError", "if __name__ == .__main__.:", "logger.", "from", "import" ]