[project] name = "metadata-scrubber" version = "0.3.0" description = "A privacy-focused CLI tool that removes sensitive metadata from image files" readme = "README.md" requires-python = ">=3.10" dependencies = [ "typer>=0.21.1", "rich>=14.3.1", "pillow>=12.1.0", "piexif>=1.1.3", "pypdf>=6.6.2", "openpyxl>=3.1.5", "python-pptx>=1.0.2", "python-docx>=1.2.0", ] [project.optional-dependencies] dev = [] [project.scripts] mst = "src.main:app" metadata-scrubber = "src.main:app" # ============ THE BUILD SYSTEM ================ [build-system] requires = ["hatchling"] build-backend = "hatchling.build" # ============ PACKAGE DISCOVERY ================= [tool.hatch.build.targets.wheel] packages = ["src"] # ============== Ruff Configuration ============== [tool.ruff] line-length = 88 target-version = "py310" extend-exclude = ["typings"] [tool.ruff.lint] select = ["E", "F", "W", "I", "UP", "C4"] ignore = ["E501"] # Line too long (handled by formatter) # ============== Pytest Configuration ============== [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_functions = ["test_*"] addopts = "-v --tb=short" # ============== Coverage Configuration ============== [tool.coverage.run] source = ["src"] branch = true omit = ["*/__init__.py", "*/tests/*"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise NotImplementedError", "if __name__ == .__main__.:", ] show_missing = true # ============== MyPy Configuration ============== [tool.mypy] python_version = "3.10" warn_return_any = true warn_unused_ignores = false ignore_missing_imports = true # pptx library doesn't have type stubs [[tool.mypy.overrides]] module = "pptx.*" ignore_missing_imports = true ignore_errors = true [[tool.mypy.overrides]] module = "src.services.powerpoint_handler" ignore_errors = true # docx library doesn't have type stubs [[tool.mypy.overrides]] module = "docx.*" ignore_missing_imports = true ignore_errors = true [[tool.mypy.overrides]] module = "src.services.worddoc_handler" ignore_errors = true [dependency-groups] dev = [ "mypy>=1.19.1", "pytest>=9.0.2", "pytest-cov>=7.0.0", "ruff>=0.14.11", "yapf>=0.43.0", ] [tool.yapfignore] ignore_patterns = [ "temp/**/*.py", "temp2/*.py", ".venv/", "venv/", "typings/" ]