forked from rendercv/rendercv
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
228 lines (204 loc) · 7.7 KB
/
pyproject.toml
File metadata and controls
228 lines (204 loc) · 7.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# 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.8"
description = "Resume builder 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.24.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.3.1", # Format the code
"hypothesis>=6.151.9", # Property-based testing
"prek>=0.3.6", # 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.7", # Lint and format the code
"ty>=0.0.24", # 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,<3", # 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.uv.build-backend]
# The rendercv-typst Typst package lives in src/rendercv/renderer/rendercv_typst/.
# Only lib.typ and typst.toml are needed at runtime; exclude everything else from the wheel.
wheel-exclude = [
"renderer/rendercv_typst/examples/**",
"renderer/rendercv_typst/template/**",
"renderer/rendercv_typst/README.md",
"renderer/rendercv_typst/CHANGELOG.md",
"renderer/rendercv_typst/LICENSE",
"renderer/rendercv_typst/thumbnail.png",
"renderer/typst_fontawesome/example.typ",
"renderer/typst_fontawesome/gallery.typ",
"renderer/typst_fontawesome/helper.py",
"renderer/typst_fontawesome/README.md",
"renderer/typst_fontawesome/LICENSE",
"renderer/typst_fontawesome/.gitignore",
]
[tool.uv.workspace]
members = [
"scripts/ats_proof",
]
[tool.ruff]
line-length = 88
extend-exclude = ["src/rendercv/renderer/typst_fontawesome"]
[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
extend-exclude = "src/rendercv/renderer/typst_fontawesome"
[tool.ty.src]
exclude = ["src/rendercv/renderer/typst_fontawesome"]
[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"