2024-01-17 16:17:02 +00:00
|
|
|
# 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
|
2024-06-19 11:34:05 +00:00
|
|
|
# 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
|
2024-01-17 16:17:02 +00:00
|
|
|
|
|
|
|
# To build RenderCV, we need to specify which build package we want to use. There are
|
2024-02-18 16:45:35 +00:00
|
|
|
# many build packages like `setuptools`, `flit`, `poetry`, `hatchling`, etc. We will use
|
|
|
|
# `hatchling`.
|
2024-06-19 11:34:05 +00:00
|
|
|
requires = [
|
2024-06-24 13:08:25 +00:00
|
|
|
"hatchling==1.25.0",
|
2024-06-19 11:34:05 +00:00
|
|
|
] # List of packages that are needed to build RenderCV
|
2024-01-17 16:17:02 +00:00
|
|
|
|
|
|
|
# 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
|
|
|
|
|
2024-06-19 11:34:05 +00:00
|
|
|
[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",
|
|
|
|
]
|
|
|
|
|
2024-01-17 16:17:02 +00:00
|
|
|
[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"
|
|
|
|
|
2023-10-14 21:59:57 +00:00
|
|
|
[project]
|
2024-02-18 16:45:35 +00:00
|
|
|
# Under the `project` section, we specify the metadata about RenderCV.
|
2023-10-14 21:59:57 +00:00
|
|
|
name = 'rendercv'
|
2024-06-05 10:40:50 +00:00
|
|
|
description = 'A LaTeX CV/resume framework'
|
2024-05-25 12:48:05 +00:00
|
|
|
authors = [{ name = 'Sina Atalay', email = 'dev@atalay.biz' }]
|
2024-06-19 11:34:05 +00:00
|
|
|
license = "MIT"
|
2023-10-14 21:59:57 +00:00
|
|
|
readme = "README.md"
|
2024-07-05 19:58:09 +00:00
|
|
|
# requires-python = '>=3.10'
|
2024-01-17 16:17:02 +00:00
|
|
|
# RenderCV depends on these packages. They will be installed automatically when RenderCV
|
|
|
|
# is installed:
|
2023-10-14 21:59:57 +00:00
|
|
|
dependencies = [
|
2024-05-25 12:48:05 +00:00
|
|
|
'Jinja2==3.1.4', # to generate LaTeX and Markdown files
|
2024-06-24 13:08:25 +00:00
|
|
|
'phonenumbers==8.13.39', # to validate phone numbers
|
|
|
|
'email-validator==2.2.0', # to validate email addresses
|
|
|
|
'pydantic==2.7.4', # to validate and parse the input file
|
|
|
|
'pydantic-extra-types==2.8.2', # to validate some extra types
|
2024-04-14 23:50:09 +00:00
|
|
|
'ruamel.yaml==0.18.6', # to parse YAML files
|
|
|
|
'typer==0.12.3', # to create the command-line interface
|
|
|
|
"markdown==3.6", # to convert Markdown to HTML
|
2024-06-24 13:08:25 +00:00
|
|
|
"PyMuPDF==1.24.5", # to convert PDF files to images
|
2023-10-14 21:59:57 +00:00
|
|
|
]
|
|
|
|
classifiers = [
|
2023-10-15 16:35:14 +00:00
|
|
|
"Intended Audience :: Science/Research",
|
|
|
|
"Intended Audience :: Education",
|
|
|
|
"Topic :: Text Processing :: Markup :: LaTeX",
|
|
|
|
"Topic :: Printing",
|
2023-10-20 17:50:50 +00:00
|
|
|
"Development Status :: 5 - Production/Stable",
|
2023-10-15 16:35:14 +00:00
|
|
|
"Programming Language :: Python :: 3.10",
|
|
|
|
"Programming Language :: Python :: 3.11",
|
|
|
|
"Programming Language :: Python :: 3.12",
|
2023-10-14 21:59:57 +00:00
|
|
|
"License :: OSI Approved :: MIT License",
|
|
|
|
"Operating System :: OS Independent",
|
2024-01-17 16:17:02 +00:00
|
|
|
] # go to https://pypi.org/classifiers/ to see all classifiers
|
2024-06-19 11:34:05 +00:00
|
|
|
dynamic = [
|
|
|
|
"version",
|
|
|
|
] # We will use hatchling to generate the version number
|
2023-10-14 21:59:57 +00:00
|
|
|
|
|
|
|
[project.urls]
|
2024-01-17 16:17:02 +00:00
|
|
|
# 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/
|
2023-10-14 21:59:57 +00:00
|
|
|
Source = 'https://github.com/sinaatalay/rendercv'
|
2024-06-19 11:34:05 +00:00
|
|
|
Documentation = 'https://docs.rendercv.com'
|
|
|
|
Changelog = 'https://docs.rendercv.com/changelog'
|
2023-10-14 21:59:57 +00:00
|
|
|
|
2023-10-15 16:35:14 +00:00
|
|
|
[project.scripts]
|
2024-01-17 16:17:02 +00:00
|
|
|
# Here, we specify the entry points of RenderCV.
|
|
|
|
# See https://packaging.python.org/en/latest/specifications/entry-points/#entry-points
|
2024-02-19 17:54:55 +00:00
|
|
|
# See https://hatch.pypa.io/latest/config/metadata/#cli
|
2024-01-17 16:17:02 +00:00
|
|
|
|
|
|
|
# The key and value below mean this: If someone installs RenderCV, then running
|
2024-06-19 11:34:05 +00:00
|
|
|
# `rendercv` in the terminal will run the function `app` in the module `cli` in the
|
2024-01-17 16:17:02 +00:00
|
|
|
# package `rendercv`.
|
2024-06-19 11:34:05 +00:00
|
|
|
rendercv = 'rendercv.cli:app'
|
2023-10-15 16:35:14 +00:00
|
|
|
|
2024-06-19 11:34:05 +00:00
|
|
|
# ======================================================================================
|
|
|
|
# Virtual Environments Below ===========================================================
|
|
|
|
# ======================================================================================
|
2024-01-18 17:23:46 +00:00
|
|
|
|
2024-06-19 11:34:05 +00:00
|
|
|
# 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 = [
|
2024-06-24 13:08:25 +00:00
|
|
|
"ruff==0.4.10", # to lint the code
|
|
|
|
"black==24.4.2", # to format the code
|
|
|
|
"ipython==8.25.0", # for ipython shell
|
|
|
|
"isort==5.13.2", # to sort the imports
|
2024-06-19 11:34:05 +00:00
|
|
|
]
|
|
|
|
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`:
|
2024-06-24 13:08:25 +00:00
|
|
|
format = "black ." # hatch run format
|
2024-06-19 11:34:05 +00:00
|
|
|
# Lint the code in the `rendercv` package with `ruff`:
|
2024-06-24 13:08:25 +00:00
|
|
|
lint = "ruff check ." # hatch run lint
|
|
|
|
# Sort the imports in the `rendercv` package with `isort`:
|
|
|
|
sort-imports = "isort ." # hatch run sort-imports
|
2024-06-19 11:34:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
[tool.hatch.envs.docs]
|
|
|
|
# Dependencies to be installed in the `docs` virtual environment.
|
|
|
|
dependencies = [
|
2024-06-24 13:08:25 +00:00
|
|
|
"mkdocs-material==9.5.27", # to build docs
|
|
|
|
"mkdocstrings-python==1.10.5", # to build reference documentation from docstrings
|
2024-06-17 18:57:50 +00:00
|
|
|
"pdfCropMargins==2.1.3", # to generate entry figures for the documentation
|
2024-05-25 12:48:05 +00:00
|
|
|
"pillow==10.3.0", # lock the dependency of pdfCropMargins
|
2024-02-23 17:59:06 +00:00
|
|
|
"mkdocs-macros-plugin==1.0.5", # to be able to have dynamic content in the documentation
|
2024-02-18 16:45:35 +00:00
|
|
|
]
|
2024-06-19 11:34:05 +00:00
|
|
|
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 = [
|
2024-06-24 13:08:25 +00:00
|
|
|
"pytest==8.2.2", # to run the tests
|
|
|
|
"coverage==7.5.4", # to generate coverage reports
|
2024-04-14 23:50:09 +00:00
|
|
|
"time-machine==2.14.1", # to select an arbitrary date and time for testing
|
|
|
|
"pypdf==4.2.0", # to read PDF files
|
2024-02-18 16:45:35 +00:00
|
|
|
]
|
2024-06-19 11:34:05 +00:00
|
|
|
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 ===========================================================
|
|
|
|
# ======================================================================================
|
2024-01-17 16:17:02 +00:00
|
|
|
|
|
|
|
# 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.
|
2023-10-14 21:59:57 +00:00
|
|
|
|
2024-06-19 11:34:05 +00:00
|
|
|
[tool.ruff]
|
|
|
|
exclude = [
|
|
|
|
"rendercv/tinytex-release/download_and_minimize_tinytex_for_rendercv.py",
|
|
|
|
]
|
|
|
|
output-format = "github"
|
|
|
|
|
2024-01-18 17:23:46 +00:00
|
|
|
[tool.black]
|
2024-02-18 16:45:35 +00:00
|
|
|
line-length = 88 # maximum line length
|
|
|
|
preview = true # to allow enable-unstable-feature
|
|
|
|
enable-unstable-feature = [
|
|
|
|
"string_processing",
|
2024-06-19 11:34:05 +00:00
|
|
|
] # to break strings into multiple lines
|
2023-10-14 21:59:57 +00:00
|
|
|
|
2024-06-24 13:08:25 +00:00
|
|
|
[tool.isort]
|
|
|
|
profile = "black"
|
|
|
|
|
2023-10-14 21:59:57 +00:00
|
|
|
[tool.coverage.run]
|
2024-06-19 11:34:05 +00:00
|
|
|
source = ['rendercv'] # The source to measure during execution
|
|
|
|
|
|
|
|
# Use relative paths instead of absolute paths, this is useful for combining coverage
|
2024-02-20 19:11:36 +00:00
|
|
|
# reports from different OSes:
|
|
|
|
relative_files = true
|
|
|
|
|
2024-06-19 11:34:05 +00:00
|
|
|
[tool.coverage.report]
|
|
|
|
# Don't include jinja templates in the coverage report:
|
2024-06-01 12:56:48 +00:00
|
|
|
omit = ["*.j2.*", "rendercv/__main__.py"]
|
2024-06-19 11:34:05 +00:00
|
|
|
|
|
|
|
# Don't include these lines in the coverage report:
|
|
|
|
exclude_lines = ["if __name__ == .__main__.:"]
|