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
218 lines (192 loc) · 7.33 KB
/
pyproject.toml
File metadata and controls
218 lines (192 loc) · 7.33 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
# 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.10'
# 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.16', # Validate phone numbers
'email-validator>=2.3.0', # Validate email addresses
'pydantic>=2.12.3', # Validate and parse input files
'pycountry>=24.6.1', # ISO 639-3 validation
'pydantic-extra-types>=2.10.6', # Validate extra types
'ruamel.yaml>=0.18.16', # Parse YAML files
]
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.9', # Convert Markdown to HTML
'watchdog>=6.0.0', # Monitor files for updates
'typst>=0.13.7', # Render PDF from Typst source files
'packaging>=25.0', # Validate version numbers
'rendercv-fonts', # 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 `app` in the module `cli`
# inside the package `rendercv`.
rendercv = 'rendercv.cli:app'
# Virtual Environment Dependencies:
[dependency-groups]
dev = [
'ruff>=0.14.1', # Lint and format the code
'black>=25.9.0', # Format the code
'pyright>=1.1.406', # Type checking
'pre-commit>=4.3.0', # Run checks before committing
'pytest>=8.4.2', # Run tests
'pypdf>=6.1.3', # Read PDF files
'snakeviz>=2.2.2', # Profiling
'pyinstaller>=6.16.0', # Build executables
"pytest-xdist>=3.8.0",
"pytest-cov>=7.0.0",
"coverage>=7.11.0",
"pytest-rerunfailures>=16.1",
]
docs = [
'mkdocs-material>=9.6.20',
'mkdocstrings[python]>=0.30.1', # Build reference docs from docstrings
'pdfCropMargins>=2.2.1', # Generate entry figures for documentation
'pillow>=10.4.0', # Lock dependency of pdfCropMargins
'mkdocs-macros-plugin>=1.4.0', # Enable dynamic content in docs
'PyMuPDF>=1.26.5', # Convert PDF files to images
]
exe = [
'pyinstaller>=6.16.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.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
]
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]
typeCheckingMode = 'standard'
enableTypeIgnoreComments = false
reportUnnecessaryTypeIgnoreComment = true
reportIncompatibleVariableOverride = false
reportIncompatibleMethodOverride = false
reportMissingTypeStubs = false
reportPrivateUsage = false
exclude = ['rendercv/themes/*']
[tool.coverage.run]
source = ['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
'--dist=loadfile', # Make sure specific jobs are grouped
'--reruns=5', # Rerun flaky tests
]
testpaths = ['tests']
[tool.codespell]
skip = '*.md'