[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "bowser" version = "0.0.1" description = "Educational web browser from scratch" readme = "README.md" requires-python = ">=3.11" license = {text = "MIT"} authors = [{name = "Bowser", email = "bowser@example.com"}] dependencies = [ "PyGObject>=3.54.0", # GTK+ bindings for Python (includes Adwaita via GI) "skia-python>=87.9", # Skia 2D graphics library "Jinja2>=3.0", # Template engine for pages ] [dependency-groups] dev = [ "pytest>=9.0.0", "pytest-cov>=7.0.0", "black>=25.0", "ruff>=0.9.0", "mypy>=1.9.0", ] [project.scripts] bowser = "main:main" [tool.uv] managed = true [tool.hatch.build.targets.wheel] packages = ["src"] [tool.black] line-length = 120 target-version = ["py311"] [tool.ruff] line-length = 120 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W"] [tool.mypy] python_version = "3.11" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "-ra", "--strict-markers", "--strict-config", "--showlocals", ] [tool.coverage.run] source = ["src"] omit = ["tests/*", "*/conftest.py"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", ]