Files
rendercv/pyproject.toml
Sina Atalay 5cc5fbdf9e Massive Refactor: Architecture Redesign and Technical Debt Cleanup (#528)
* Rename `data` folder with schema

* Start refactoring data models

* Work on entry models

* Keep working on entries

* Keep working on data models

* Push old data files

* Keep working on data models

* First draft of schema.cv

* Keep working on schema

* Keep working on schema

* Improve schema.models

* Keep working on rendercv.schema

* Work on schema.design

* Keep working on rendercv.schema

* Complete variant_class_generator

* Keep working rendercv.schema

* Keep working on rendercv.schema

* Final touches to rendercv.schema

* Improve json schema descriptions in rendercv.schema

* Start working on rendercv.schema tests

* Keep implementing rendercv.schema tests

* Add more tests for rendercv.schema

* Improve rendercv.schema

* Improve docstrings and comments in rendercv.schema

* Implement better pydantic error handling in `rendercv.schema`

* Improve variant class system

* Fix rendercv.schema tests

* Start working on rendercv.templater

* Update template names

* Switching to new rendercv typst template soon

* Work on new templater

* Rename renderer with renderer_old

* Don't use utils in rendercv.schema

* Complete connections

* Update renderer folder structure

* Work on new renderer

* Work on new renderer

* Date processing on new renderer

* Improve date processing, support multiple emails, phones, and websites

* Improve markdown to Typst

* Complete entry template processing

* Time span computation in new renderer

* Better entry templates

* Setup new templates

* Improve rendercv.schema

* Start adding tests for rendercv.renderer

* New markdown parser!

* Improve markdown to typst conversion

* Finalize markdown parser

* Add new test files for rendercv.renderer

* Fix cv and connections

* Add connections test

* Improve connection tests

* Improve entry templates

* Add model processor tests

* Improve templater

* Rename old folders

* Improve schema

* Add file generation logic to renderer

* Fix naming issues

* Fix schema tests

* Add path type tests

* Add font family and typst dimension type tests

* Rename old tests

* Fix design tests

* Start integration testing of renderer

* Improve entry tempates

* Handle nested highlights properly

* Finalize Typst preamble template

* Start working on new CLI

* Remove old test files

* Implement override dictionary in new schema

* Start working on new CLI

* Better prints on render command

* New structure

* New render printer

* Add all the commands to new CLI

* Work on new command in new cli

* Improve new command

* Add error handler to new cli

* Work on create theme command

* Complete create theme command

* Remove old source files

* Improve exceptions

* Create new docs

* Add writing tests guide

* Fix cli printer and write tests

* Test copy templates

* Add app tests

* Bring back accidentally removed files

* Imporve cli and tests

* Fix path issues

* Improve

* Improve

* Add reference file comparison tests

* Fix path resolver

* Start working on test_pdf_png

* Implement comparison of multiple files (png)

* Start testing typst

* Fix templating issues

* Fix header and entry templates issues

* Implement short second rows

* Fix date issues

* Fix nested bullets and add summary

* Update testdata

* Implement footer

* Update testdata

* Reimagined design and locale schema, first iteration

* Reimagined design and locale second iteration

* Update design and locale schemas

* Adapt templater to the new design and locale

* Fix tests

* Update lib.typ and testdata for the new locale and design

* Implement proper tests with all combinations of entries

* Remove some docstrings

* fix connections logic

* Improve

* Start working on examples

* Update testdata

* Fix long second row issue

* fix templating issues

* Fix lib.typ issues

* Update testdata

* Fix clean_trailing_parts

* Update test cv

* update test cv

* Update theme defaults

* update schema and fix moderncv

* Fix moderncv issues

* Update testdata

* Update testdata and examples

* Fix issues about photo

* Fix typst photo path issues

* improve entry templates from yaml

* add new locale

* Rename writing tests doc

* Update writing tests

* Improve tests

* Add more cli tests

* Increase test coverage

* Rename variant pydantic model generator

* Improve tests

* Update testdata and improve tests

* Format, fix pre-commit errors

* Fix scripts and update entry figures

* Improve tests

* Write docstrings of schema

* Write schema docstrings

* Setup api reference

* Start working on new docs

* Work on docs

* Improve progress panel of render command

* Finalize new docs index

* Complete CLI docs

* Work on YAML input structure page

* Finalize user guide

* Start working on developer guide

* Improve api reference

* Improve developer guide

* Improve developer guide

* Improve developer gide

* Improve developer guide

* Improve developer guide

* Update developer guide

* Improve developer guide

* Improve developer guide

* Improve developer guide

* Developer guide first draft

* update developer guide

* Update examples

* Update testdata

* Handle wrong installation (rendercv instead of rendercv[full])

* Remove unnecessary files

* Write set up vs code page

* Update README.md

* Change docs description

* Compress design options gif

* minor updates

* Polish all the json schema descriptions

* Update testdata and examples

* Remove some emdashed from docs

* Add whatsapp support

* Add TestEscapeTypstCharacters to tests

* Implement custom connections

* Add page break before sections feature

* Revert page break before sections feature

* Rebase to main

* Fix social network tests, update schema
2025-12-09 17:03:56 +03:00

215 lines
7.4 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.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
[tool.hatch.build.targets.sdist]
# In the sdist, what do we want to exclude? GIF files are large.
exclude = ["*.gif"]
[tool.hatch.build.targets.wheel]
# In the wheel, what do we want to include and exclude?
packages = ["rendercv"]
[project]
# Metadata about RenderCV.
name = 'rendercv'
version = '2.3'
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
'pyinstaller>=6.17.0', # Build executables
"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
'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
]
# 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.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.*', 'rendercv/__main__.py']
# Exclude specific lines from coverage:
exclude_lines = ['if __name__ == .__main__.:']
[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'