-
-
Notifications
You must be signed in to change notification settings - Fork 156
/
pyproject.toml
245 lines (216 loc) · 10.7 KB
/
pyproject.toml
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
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# Every modern Python package today has a `pyproject.toml` file. It is a Python
# standard. `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 a code needs to be distributed, it might need to be compiled, or it might need to
# be bundled with other files. This process of making a 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 we want to use. There are
# many build packages like `setuptools`, `flit`, `poetry`, `hatchling`, etc. We will use
# `hatchling`.
requires = [
"hatchling==1.26.3",
] # List of packages that are needed to build RenderCV
# Python has a standard object format called build-backend object. Python standard asks
# this object to have some specific methods that do a specific job. For example, it
# should have a method called `build_wheel` that builds a wheel file. We use hatchling
# to build RenderCV, and hatchling's build-backend object is `hatchling.build`.
# See https://peps.python.org/pep-0517/
build-backend = "hatchling.build" # A build-backend object for building RenderCV
[tool.hatch.build.targets.sdist]
# In the sdist, what do we want to exclude?
exclude = [
"rendercv/tinytex-release/download_and_minimize_tinytex_for_rendercv.py",
"rendercv/tinytex-release/.gitignore",
"rendercv/tinytex-release/.git",
".github/",
".devcontainer/",
# GIF files are too big:
"*.gif",
]
[tool.hatch.build.targets.wheel]
# In wheel, what do we want to include and exclude?
packages = ["rendercv"]
exclude = [
"rendercv/tinytex-release/download_and_minimize_tinytex_for_rendercv.py",
"rendercv/tinytex-release/.gitignore",
"rendercv/tinytex-release/.git",
"rendercv/tinytex-release/README.md",
]
[tool.hatch.version]
# We will use hatchling to generate the version number of RenderCV. It will go to the
# `path` below and get the version number from there.
# See https://hatch.pypa.io/latest/version/
path = "rendercv/__init__.py"
[project]
# Under the `project` section, we specify the metadata about RenderCV.
name = 'rendercv'
description = 'A LaTeX CV/resume framework'
authors = [{ name = 'Sina Atalay', email = '[email protected]' }]
license = "MIT"
readme = "README.md"
requires-python = '>=3.10'
# RenderCV depends on these packages. They will be installed automatically when RenderCV
# is installed:
dependencies = [
'Jinja2==3.1.4', # to generate LaTeX and Markdown files
'phonenumbers==8.13.50', # to validate phone numbers
'email-validator==2.2.0', # to validate email addresses
'pydantic==2.9.2', # to validate and parse the input file
'pydantic-extra-types==2.10.0', # to validate some extra types
'ruamel.yaml==0.18.6', # to parse YAML files
'typer==0.13.0', # to create the command-line interface
"markdown==3.7", # to convert Markdown to HTML
"PyMuPDF==1.24.13", # to convert PDF files to images
]
classifiers = [
"Intended Audience :: Science/Research",
"Intended Audience :: Education",
"Topic :: Text Processing :: Markup :: LaTeX",
"Topic :: Printing",
"Development Status :: 5 - Production/Stable",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
] # go to https://pypi.org/classifiers/ to see all classifiers
dynamic = [
"version",
] # We will use hatchling to generate the version number
[project.urls]
# Here, we can specify the URLs related to RenderCV. They will be listed under the
# "Project links" section in PyPI. See https://pypi.org/project/rendercv/
Source = 'https://github.com/sinaatalay/rendercv'
Documentation = 'https://docs.rendercv.com'
Changelog = 'https://docs.rendercv.com/changelog'
[project.scripts]
# Here, we specify the entry points of 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 this: If someone installs RenderCV, then running
# `rendercv` in the terminal will run the function `app` in the module `cli` in the
# package `rendercv`.
rendercv = 'rendercv.cli:app'
# ======================================================================================
# Virtual Environments Below ===========================================================
# ======================================================================================
# RenderCV depends on other packages, which are listed under the `project` section as
# `dependencies`. However, for the development of RenderCV, we need some other packages
# too (like `black`, `ruff`, `mkdocs`, etc.). We need these packages in our virtual
# environments and we handle the environments with `hatchling`.
# There will be three virtual environments for RenderCV: `default`, `docs`, and `test`.
# `default` is the default virtual environment needed to develop RenderCV.
# `docs` is the virtual environment needed to build the documentation of RenderCV.
# `test` is the virtual environment needed to run the tests of RenderCV.
[tool.hatch.envs.default]
# Dependencies to be installed in the `default` virtual environment.
dependencies = [
"ruff", # to lint the code
"black", # to format the code
"ipython", # for ipython shell
"isort", # to sort the imports
"pyright", # to check the types
]
path = ".venv"
[tool.hatch.envs.default.scripts]
# Hatch allows us to define scripts that can be run in the activated virtual environment
# with `hatch run ENV_NAME:SCRIPT_NAME`.
# Format all the code in the `rendercv` package with `black`:
format = "black rendercv && black docs && black tests" # hatch run format
# Lint the code in the `rendercv` package with `ruff`:
lint = "ruff check rendercv && ruff check tests" # hatch run lint
# Sort the imports in the `rendercv` package with `isort`:
sort-imports = "isort rendercv && isort docs && isort tests" # hatch run sort-imports
# Check types in the `rendercv` package with `pyright`:
check-types = "pyright rendercv && pyright tests" # hatch run check-types
[tool.hatch.envs.docs]
# Dependencies to be installed in the `docs` virtual environment.
dependencies = [
"mkdocs-material==9.5.34", # to build docs
"mkdocstrings-python==1.11.1", # to build reference documentation from docstrings
"pdfCropMargins==2.1.3", # to generate entry figures for the documentation
"pillow==10.4.0", # lock the dependency of pdfCropMargins
"mkdocs-macros-plugin==1.0.5", # to be able to have dynamic content in the documentation
]
path = ".venv-docs"
[tool.hatch.envs.docs.scripts]
# Build the documentation with `mkdocs`:
build = "mkdocs build --clean --strict" # hatch run docs:build
# Start the development server for the documentation with `mkdocs`:
serve = "mkdocs serve" # hatch run docs:serve
# Update schema.json:
update-schema = "python docs/update_schema.py" # hatch run docs:update-schema
# Update `examples` folder:
update-examples = "python docs/update_examples.py" # hatch run docs:update-examples
# Update entry figures in "Structure of the YAML File" page:
update-entry-figures = "python docs/update_entry_figures.py" # hatch run docs:update-entry-figures
[tool.hatch.envs.test]
# Dependencies to be installed in the `test` virtual environment.
dependencies = [
"pytest==8.3.2", # to run the tests
"coverage==7.6.1", # to generate coverage reports
"time-machine==2.15.0", # to select an arbitrary date and time for testing
"pypdf==4.3.1", # to read PDF files
# "hatch==1.12.0", # to test hatch scripts
]
path = ".venv-test"
# [[tool.hatch.envs.test.matrix]]
# # We can specify the Python versions that we want to test RenderCV with. Hatch will
# # create three different virtual environments for each Python version.
# # They will be named as test.py3.10, test.py3.11, and test.py3.12.
# python = ["3.10", "3.11", "3.12"]
[tool.hatch.envs.test.scripts]
# Run the tests:
run = "pytest" # hatch run test:run
# Run the tests and generate the coverage report as HTML:
run-and-report = "coverage run -m pytest && coverage report && coverage html --show-contexts" # hatch run test:coverage
# ======================================================================================
# Virtual Environments Above ===========================================================
# ======================================================================================
# RenderCV uses different tools to check the code quality, format the code, build the
# documentation, build the package, etc. We can specify the settings for these tools in
# `pyproject.toml` file under `[tool.name_of_the_tool]` so that new contributors can use
# these tools easily. Generally, popular IDEs grab these settings from `pyproject.toml`
# file automatically.
[tool.ruff]
exclude = ["tinytex-release"]
output-format = "github"
[tool.black]
line-length = 88 # maximum line length
preview = true # to allow enable-unstable-feature
enable-unstable-feature = [
"string_processing",
] # to break strings into multiple lines
[tool.isort]
profile = "black"
[tool.pyright]
reportIncompatibleVariableOverride = false # disable this error type
reportIncompatibleMethodOverride = false # disable this error type
ignore = ["**/tinytex-release/"]
[tool.coverage.run]
source = ['rendercv'] # The source to measure during execution
# Use relative paths instead of absolute paths, this is useful for combining coverage
# reports from different OSes:
relative_files = true
[tool.coverage.report]
# Don't include jinja templates in the coverage report:
omit = ["*.j2.*", "rendercv/__main__.py"]
# Don't include these lines in the coverage report:
exclude_lines = ["if __name__ == .__main__.:"]
[tool.pytest.ini_options]
addopts = [
"-ra", # Show extra test summary info for all tests
"--strict-markers", # Don't allow unknown markers
"--strict-config", # Always fail if there are unknown configuration options
]
testpaths = ["tests"]