content: [project]
  name = "androidtvremote2"
  version = "0.2.3"
  license = "Apache-2.0"
  authors = [
      { name="tronikos", email="tronikos@gmail.com" },
  ]
  description = "A Python library for interacting with Android TV using the Android TV Remote protocol v2"
  readme = "README.md"
  requires-python = ">=3.10"
  dependencies = [
      "aiofiles>=0.8",
      "cryptography>=3",
      "protobuf>=4.21",
  ]
  
  [project.optional-dependencies]
  test = [
      "pytest",
  ]
  demo = [
      "pynput",
      "zeroconf",
  ]
  
  
  [project.urls]
  "Homepage" = "https://github.com/tronikos/androidtvremote2"
  "Bug Tracker" = "https://github.com/tronikos/androidtvremote2/issues"
  
  [build-system]
  requires = ["setuptools"]
  build-backend = "setuptools.build_meta"
  
  [tool.ruff]
  target-version = "py310"
  line-length = 127
  exclude = [
      ".git", ".mypy_cache", ".ruff_cache", ".venv", "__pypackages__",
      "build", "dist", "venv", "*_pb2.py", "*_pb2_grpc.py", "*.pyi"
  ]
  
  [tool.ruff.lint]
  select = [
      "A",  # flake8-builtins
      "ASYNC",  # flake8-async
      "B",  # flake8-bugbear
      "C",  # flake8-mccabe
      "C4",  # flake8-comprehensions
      "D",  # pydocstyle
      "E",  # pycodestyle (error)
      "F",  # pyflakes
      "G",  # flake8-logging-format
      "I",  # isort
      "PGH",  # pygrep-hooks
      "PL",  # Pylint
      "RET",  # flake8-return
      "RUF",  # Ruff-specific rules
      "S",  # flake8-bandit (security)
      "SIM",  # flake8-simplify
      "T20",  # flake8-print
      "TCH",  # flake8-type-checking
      "TRY",  # tryceratops
      "UP",  # pyupgrade
      "W",  # pycodestyle (warning)
  ]
  ignore = [
      "S101",  # Ignore assert
      "D203",  # 1 blank line required before class docstring
      "D213",  # Multi-line docstring summary should start at the second line
      "PLR0913",  # Too many arguments in function definition
      "PLR1714",  # Consider merging multiple comparisons
      "PLR2004",  # Magic value used in comparison
      "TRY003",  # Avoid specifying long messages outside the exception class
  ]
  fixable = ["ALL"]
  
  [tool.ruff.lint.mccabe]
  max-complexity = 25
  
  [tool.mypy]
  python_version = "3.10"
  exclude = [".venv", "venv", "build"]
  pretty = true
  strict = true
  show_error_codes = true
  warn_incomplete_stub = true
  enable_error_code = ["ignore-without-code", "redundant-self", "truthy-iterable"]
  
  [tool.codespell]
  skip = "*.json,*.csv,*.lock,./.git/*,./.venv/*"
  check-filenames = true
  check-hidden = true
  