[build-system] requires = ["setuptools>=80.0.0"] build-backend = "setuptools.build_meta" [project] name = "yt-shorts-downloader" version = "0.1.0" description = "Typed library and CLI for downloading YouTube Shorts as MP4 via Netscape cookie sessions" readme = "README.md" requires-python = ">=3.12" dependencies = [ "yt-dlp>=2024.12.13", ] [project.scripts] yt-shorts-downloader = "yt_shorts_downloader.cli:main" [dependency-groups] dev = [ "deptry>=0.24.0", "mypy>=1.14.1", "pytest>=8.3.4", "pytest-cov>=6.0.0", "ruff>=0.8.4", ] [tool.setuptools] package-dir = {"" = "src"} include-package-data = true [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] yt_shorts_downloader = ["py.typed"] [tool.ruff] line-length = 160 target-version = "py312" src = ["src", "tests"] [tool.ruff.format] quote-style = "single" indent-style = "space" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "Q", "ERA", "D", "SIM", "ARG", "RUF", "C4", "RET", "ASYNC", "PERF", "PL"] ignore = ["D100", "RUF002", "D107", "RUF001", "D104", "D203", "D213", "ARG001"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["D"] [tool.ruff.lint.flake8-quotes] inline-quotes = "single" multiline-quotes = "double" docstring-quotes = "double" avoid-escape = true [tool.mypy] python_version = "3.12" strict = true warn_unused_ignores = true warn_redundant_casts = true warn_unreachable = true show_error_codes = true pretty = true explicit_package_bases = true files = ["src", "tests", "main.py"] mypy_path = "$MYPY_CONFIG_FILE_DIR/src:$MYPY_CONFIG_FILE_DIR/stubs" [tool.deptry.package_module_name_map] "yt-dlp" = "yt_dlp" [tool.pytest.ini_options] addopts = ["-ra", "--strict-config", "--strict-markers", "--color=yes"] testpaths = ["tests"]