[project] name = "panda" version = "0.0.10" description = "Code powering the comma.ai panda" requires-python = ">=3.11,<3.13" # macOS doesn't work with 3.13 due to pycapnp from iqdbc license = {text = "MIT"} authors = [{name = "comma.ai"}] classifiers = [ "Natural Language :: English", "Programming Language :: Python :: 3", "Topic :: System :: Hardware", ] dependencies = [ "libusb1", "iqdbc", "spidev; platform_system == 'Linux'", ] [project.optional-dependencies] dev = [ "scons", "pycryptodome >= 3.9.8", "cffi", "flaky", "pytest", "pytest-mock", "pytest-timeout", "pytest-randomly", "ruff", "mypy", "setuptools", "spidev; platform_system == 'Linux'", ] [build-system] requires = [ "setuptools>=64", "scons; platform_system != 'Windows'", "pycryptodome >= 3.9.8; platform_system != 'Windows'", ] build-backend = "setuptools.build_meta" [tool.setuptools] packages = ["panda", "panda.python", "panda.board", "panda.board.body", "panda.board.jungle", "panda.board.obj"] include-package-data = true [tool.setuptools.package-dir] panda = "." [tool.setuptools.package-data] "panda.board" = ["health.h", "can.h", "comms_definitions.h"] "panda.board.jungle" = ["jungle_health.h"] "panda.board.obj" = ["*.bin", "*.signed"] [tool.mypy] # third-party packages ignore_missing_imports = true # helpful warnings warn_redundant_casts = true warn_unreachable = true warn_unused_ignores = true # restrict dynamic typing warn_return_any = true # https://beta.ruff.rs/docs/configuration/#using-pyprojecttoml [tool.ruff] line-length = 160 target-version="py311" [tool.ruff.lint] select = ["E", "F", "W", "PIE", "C4", "ISC", "RUF100", "A"] ignore = ["W292", "E741", "E402", "C408", "ISC003"] flake8-implicit-str-concat.allow-multiline=false [tool.ruff.lint.flake8-tidy-imports.banned-api] "pytest.main".msg = "pytest.main requires special handling that is easy to mess up!" [tool.pytest.ini_options] addopts = "-Werror --strict-config --strict-markers --durations=10 --ignore-glob='*.sh' --ignore=tests/misra --ignore=tests/som --ignore=tests/hitl" python_files = "test_*.py" testpaths = [ "tests/" ]