# 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.9.5,<0.10.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.5' description = 'Typst-based CV/resume generator' authors = [{ name = 'Sina Atalay', email = 'dev@atalay.biz' }] license = "MIT" readme = "README.md" requires-python = '>=3.12' # RenderCV depends on these packages. They are installed automatically when RenderCV is installed: dependencies = [ 'Jinja2>=3.1.6', # Generate Typst and Markdown files 'phonenumbers>=9.0.19', # Validate phone numbers 'pydantic[email]>=2.10.6', # Validate and parse input files 'pydantic-extra-types>=2.10.6', # Validate extra types 'ruamel.yaml>=0.18.10', # Parse YAML files "packaging>=25.0", # For version checking ] classifiers = [ "Intended Audience :: Science/Research", "Intended Audience :: Education", "Topic :: Text Processing :: Markup", "Topic :: Printing", "Development Status :: 5 - Production/Stable", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] # See all classifiers at https://pypi.org/classifiers/ [project.optional-dependencies] full = [ 'typer>=0.20.0', # Command-line interface 'markdown>=3.10', # Convert Markdown to HTML 'watchdog>=6.0.0', # Monitor files for updates 'typst>=0.14.4', # Render PDF from Typst source files 'rendercv-fonts>=0.5.1', # Font files for RenderCV ] [project.urls] # URLs related to RenderCV. Listed under the "Project links" section on PyPI. "Web App" = 'https://rendercv.com' Source = 'https://github.com/rendercv/rendercv' Documentation = 'https://docs.rendercv.com' Changelog = 'https://docs.rendercv.com/changelog' [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 = [ 'ruff>=0.14.8', # Lint and format the code 'black>=25.12.0', # Format the code 'pyright>=1.1.407', # Type checking 'pre-commit>=4.5.0', # Run checks before committing '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 ] docs = [ 'mkdocs-material>=9.7.0', '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 'mkdocstrings[python]>=1.0.0', # Build reference docs from docstrings 'markdown-callouts>=0.4.0', # GitHub alert style admonitions ] update-entry-figures = [ 'pdfCropMargins==2.2.1', # Generate entry figures for documentation 'pillow==10.4.0', # Lock dependency of pdfCropMargins 'PyMuPDF==1.26.5', # Convert PDF files to images ] create-executable = [ 'pyinstaller>=6.17.0', # Build executables ] # 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.pyright] venvPath = "." venv = ".venv" typeCheckingMode = 'standard' enableTypeIgnoreComments = false reportUnnecessaryTypeIgnoreComment = true reportIncompatibleVariableOverride = false reportIncompatibleMethodOverride = false reportMissingTypeStubs = false reportPrivateUsage = false exclude = ['docs/**/*'] [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.*'] [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'