[build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [project] name = "scrape-movies" version = "0.1.0" description = "Day 45 of 100 Days of Code: web scraping with Requests and BeautifulSoup (Hacker News and the Empire 100 greatest movies)." readme = "README.md" requires-python = ">=3.13" license = { file = "LICENSE" } dependencies = [ "requests>=2.32", "beautifulsoup4>=4.12", ] [project.optional-dependencies] dev = [ "pytest>=8.3", "pytest-cov>=5.0", "ruff>=0.6", "mypy>=1.11", "types-requests>=2.32", "pillow>=10.4", ] [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["src"] [tool.ruff] line-length = 88 src = ["src", "tests"] extend-exclude = ["framework", ".agents", ".claude"] [tool.ruff.lint] select = ["E", "F", "I", "N", "UP", "B", "D"] # UP040 off: mypy 1.11 (the pinned CI version) does not support PEP 695 aliases. ignore = ["D203", "D213", "UP040"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["D"] [tool.mypy] strict = true python_version = "3.13" mypy_path = "src" [[tool.mypy.overrides]] module = ["bs4.*", "requests.*", "PIL.*", "pytest.*"] ignore_missing_imports = true