content: [project]
  name = "audible"
  version = "0.10.0"
  description = "A(Sync) Interface for internal Audible API written in pure Python."
  authors = [{ name = "mkb79", email = "mkb79@hackitall.de" }]
  requires-python = ">=3.10,<3.14"
  readme = "README.md"
  license = "AGPL-3.0-only"
  keywords = [
      "Audible",
      "API",
      "async",
  ]
  classifiers = [
      "Development Status :: 4 - Beta",
      "Intended Audience :: Developers",
      "License :: OSI Approved :: GNU Affero General Public License v3",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
  ]
  dependencies = [
      "Pillow (>=9.4.0)",
      "beautifulsoup4 (>=4.11.2)",
      "httpx (>=0.23.3)",
      "pbkdf2 (>=1.3)",
      "pyaes (>=1.6.1)",
      "rsa (>=4.9)",
  ]
  homepage = "https://github.com/mkb79/Audible"
  repository = "https://github.com/mkb79/Audible"
  documentation = "https://audible.readthedocs.io"
  
  [project.urls]
  Changelog = "https://github.com/mkb79/Audible/releases"
  
  [dependency-groups]
  dev = [
      "nox>=2025.5.1",
      "nox-uv>=0.3.0",
  ]
  
  docs = [
      "myst-parser>=0.16.1",
      "sphinx>=4.3.2",
      "sphinx-autobuild>=2021.3.14",
      "sphinx-autodoc-typehints>=1.22",
      "sphinx-rtd-theme>=1.2.0",
      "sphinxcontrib-httpdomain>=1.8.1",
  ]
  
  mypy = [
      "mypy>=0.930",
      "types-beautifulsoup4>=4.12.0.20250516",
      "types-docutils>=0.21.0.20250516",
      "types-html5lib>=1.1.11.20250516",
      "types-pygments>=2.19.0.20250516",
  ]
  
  pre-commit = [
      "darglint>=1.8.1",
      "nox>=2025.5.1",
      "pre-commit>=2.16.0",
      "pre-commit-hooks>=4.1.0",
      "ruff>=0.3.7",
  ]
  
  safety = [
      "safety>=1.10.3",
  ]
  
  tests = [
      "coverage[toml]>=6.2",
      "pytest>=6.2.5",
      "pytest-mock>=3.10.0",
  ]
  
  typeguard = [
      {include-group = "tests"},
      "Pygments>=2.10.0",
      "typeguard>=2.13.3",
  ]
  
  xdocs = [
      "xdoctest[colors]>=0.15.10",
  ]
  
  [tool.hatch.build.targets.sdist]
  include = ["src/audible"]
  
  [tool.hatch.build.targets.wheel]
  include = ["src/audible"]
  
  [tool.hatch.build.targets.wheel.sources]
  "src/audible" = "audible"
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [tool.uv]
  required-version = ">=0.7.1"
  
  [tool.coverage.paths]
  source = ["src/audible", "*/site-packages"]
  tests = ["tests", "*/tests"]
  
  [tool.coverage.run]
  branch = true
  source = ["src/audible", "tests"]
  relative_files = true
  
  [tool.coverage.report]
  show_missing = true
  fail_under = 10  # temporarily drop complexity, target is 100
  exclude_lines = [
      "pragma: no cover",
      "if TYPE_CHECKING:"
  ]
  
  [tool.mypy]
  pretty = true
  show_column_numbers = true
  show_error_codes = true
  show_error_context = true
  strict = true
  warn_unreachable = true
  
  [tool.ruff]
  #  missing rst-docstrings check, these should be adding through ruff
  line-length = 88
  src = ["src"]
  target-version = "py310"
  output-format = "grouped"
  
  [tool.ruff.lint]
  ignore = [
      "D10",  # temporarily ignore missing docstrings
      "E501",
      "N818",
      "PLR0912",  # temporarily
      "PLR0913",  # temporarily
      "PLR0915",  # temporarily
      "PLR2004",  # temporarily
  ]
  select=[
      "A",
      "ASYNC",
      "B",
      "C4",
      "C90",
      "D",
      "E",
      "F",
      "G",
      "I",
      "N",
      "PGH",
      "PL",
      "Q",
      "RUF",
      "S",
      "UP",
      "W",
  ]
  
  [tool.ruff.lint.mccabe]
  max-complexity = 21  # temporarily raise complexity, target is 10
  
  [tool.ruff.lint.pydocstyle]
  convention = "google"
  
  [tool.ruff.lint.isort]
  force-single-line = false
  known-first-party = ["audible"]
  lines-after-imports = 2
  
  [tool.ruff.lint.per-file-ignores]
  "tests/*" = ["S101"]
  
  [tool.pytest.ini_options]
  testpaths = ["tests", "src/audible"]
  