Files
rendercv/pyproject.toml
2026-02-18 15:46:06 +03:00

200 lines
6.7 KiB
TOML

# Every modern Python package today has a `pyproject.toml` file. It is a Python
# standard. The `pyproject.toml` file contains all the metadata about the package.
# It also includes the dependencies and required information for building the package.
# For more details, see https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/.
[build-system]
# If code needs to be distributed, it might need to be compiled or bundled with other files.
# This process of making code ready for distribution is called building.
# Python packages need to be built too, even though they are not compiled (mostly).
# At the end of the building process, a source distribution package (sdist) and a built
# distribution package (in Wheel format) are created.
# See https://packaging.python.org/en/latest/tutorials/packaging-projects/ for details.
# Built Distribution:
# https://packaging.python.org/en/latest/glossary/#term-Built-Distribution
# Source Distribution:
# https://packaging.python.org/en/latest/glossary/#term-Source-Distribution-or-sdist
# To build RenderCV, we need to specify which build package to use. There are
# many build backends like `setuptools`, `flit`, `poetry`, `hatchling`, etc. We will use
# `uv_build`.
requires = ["uv_build>=0.10.3,<0.11.0"] # Packages needed to build RenderCV
# Python has a standard object format called a build-backend object. This object must
# implement specific methods that perform defined tasks. For example, it should have a
# method called `build_wheel` that builds a wheel file.
# See https://peps.python.org/pep-0517/
build-backend = "uv_build" # Build-backend object for building RenderCV
[project]
# Metadata about RenderCV.
name = "rendercv"
version = "2.7"
description = "CV/resume generator for academics and engineers"
readme = "README.md"
requires-python = ">=3.12"
license = "MIT"
authors = [{ name = "Sina Atalay", email = "dev@atalay.biz" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Education",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Printing",
"Topic :: Text Processing :: Markup",
] # See all classifiers at https://pypi.org/classifiers/
# RenderCV depends on these packages. They are installed automatically when RenderCV is installed:
dependencies = [
"Jinja2>=3.1.6", # Generate Typst and Markdown files
"markdown>=3.10.2", # Convert Markdown to HTML
"phonenumbers>=9.0.24", # Validate phone numbers
"pydantic-extra-types>=2.11.0", # Validate extra types
"pydantic[email]>=2.12.5", # Validate and parse input files
"ruamel.yaml>=0.19.1", # Parse YAML files
]
[project.optional-dependencies]
full = [
"typer>=0.23.1", # Command-line interface
"watchdog>=6.0.0", # Monitor files for updates
"typst>=0.14.8", # Render PDF from Typst source files
"rendercv-fonts>=0.5.1", # Font files for RenderCV
"packaging>=26.0", # For version checking
]
[project.urls]
Changelog = "https://docs.rendercv.com/changelog"
Documentation = "https://docs.rendercv.com"
Source = "https://github.com/rendercv/rendercv"
# URLs related to RenderCV. Listed under the "Project links" section on PyPI.
"Web App" = "https://rendercv.com"
[project.scripts]
# Entry points for RenderCV.
# See https://packaging.python.org/en/latest/specifications/entry-points/#entry-points
# See https://hatch.pypa.io/latest/config/metadata/#cli
# The key and value below mean: when someone installs RenderCV,
# running `rendercv` in the terminal executes the function `entry_point` in
# `src/rendercv/cli/entry_point.py`.
rendercv = "rendercv.cli.entry_point:entry_point"
# Virtual Environment Dependencies:
[dependency-groups]
dev = [
"black>=26.1.0", # Format the code
"prek>=0.3.3", # Run checks before committing (pre-commit alternative)
"pytest>=9.0.2", # Run tests
"pytest-cov>=7.0.0", # Coverage plugin for pytest with xdist support
"pytest-xdist>=3.8.0", # Run tests in parallel
"ruff>=0.15.1", # Lint and format the code
"ty>=0.0.17", # Type checking
]
create-executable = [
"pyinstaller>=6.17.0", # Build executables
]
docs = [
"markdown-callouts>=0.4.0", # GitHub alert style admonitions
"mkdocs-gen-files>=0.6.0", # Dynamic page generation for API reference
"mkdocs-literate-nav>=0.6.2", # Dynamic navigation for API reference
"mkdocs-macros-plugin>=1.5.0", # Dynamic content in docs
"mkdocs-material>=9.7.1",
"griffe>=1.0,<2", # Pin to v1 (v2 broke mkdocstrings-python compatibility)
"mkdocstrings[python]>=1.0.3", # Build reference docs from docstrings
]
update-entry-figures = [
"PyMuPDF==1.26.5", # Convert PDF files to images
"pdfCropMargins==2.2.1", # Generate entry figures for documentation
"pillow==10.4.0", # Lock dependency of pdfCropMargins
]
# Tools Settings:
# RenderCV uses various tools to check code quality, format code, build docs, and package the project.
# Their configurations are specified below so contributors and IDEs can pick them up automatically.
[tool.uv]
default-groups = ["dev", "docs"]
[tool.ruff]
line-length = 88
[tool.ruff.format]
docstring-code-format = true
[tool.ruff.lint]
extend-select = [
"B",
"I",
"ARG",
"C4",
"EM",
"ICN",
"ISC",
"G",
"PGH",
"PIE",
"PL",
"PT",
"PTH",
"RET",
"RUF",
"SIM",
"T20",
"UP",
"YTT",
"EXE",
"NPY",
"PD",
]
ignore = [
"PLR", # Design-related pylint codes
"ISC001", # Conflicts with formatter
"UP007", # Allow Optional type
"PGH003", # Prefer not to ignore this
"RUF001", # Allow other characters for locale
"EM101", # Allow
]
flake8-unused-arguments.ignore-variadic-names = true
[tool.black]
line-length = 88 # Maximum line length
preview = true # Enable preview features
enable-unstable-feature = [
"string_processing",
] # Break strings into multiple lines
[tool.ty.rules]
unused-ignore-comment = "error"
[tool.coverage.run]
source = ["src/rendercv"] # Measure coverage in this source
concurrency = ["multiprocessing"] # For watcher tests
# Use relative paths for cross-platform coverage merging:
relative_files = true
[tool.coverage.report]
# Exclude templates from coverage reports:
omit = ["*.j2.*"]
# tombi: lint.rules.deprecated.disabled = true
# tombi: lint.rules.one-of-multiple-match.disabled = true
[tool.pytest.ini_options]
log_cli_level = "INFO"
xfail_strict = true
addopts = [
"-ra", # Show extra test summary info
"-v", # Increase verbosity
"--strict-markers", # Disallow unknown markers
"--strict-config", # Fail on unknown config options
"--numprocesses=auto", # Number of processes in parallel
]
testpaths = ["tests"]
[tool.codespell]
skip = "*.md"