Hi, to start, you need the following installed on your system.
- Git
- Python v3.11 or later
- uv for dependency management
- (Optional/Recommended)
NodeJSfor type checking - (Optional/Recommended)
miseto manage multiple versions of Python, NodeJS and other such tools.
First fork this repository. (If you are or intend to be a collaborator, uncheck "fork only master", because for versioned docs you'll need gh-pages branch too.) Clone it to your system and install the development dependencies.
# clone repository
$ git clone "https://github.com/YOUR-USERNAME/validators.git"
# change directory
$ cd validators
# install development dependencies
$ uv sync --group testing --group tooling --group runner --extra crypto-eth-addressesRun tox to verify test cases. (uv run uses the project's virtual environment, so you don't need to activate it.)
# run tox for linting, type checking, formatting etc.
$ uv run toxDevelopment dependencies are declared as dependency groups in pyproject.toml (testing, tooling, runner, docs-offline, docs-online, package and sast) and are locked in uv.lock. Run uv lock --upgrade to update them, and commit uv.lock.
Create a git branch and make changes to the source code. If needed, test your changes by running pytest. Execute tox to format, lint and type-check your code before committing. Commit, push and create a pull request. If you're in doubt, feel free to start a discussion here.
Documentation is extracted from the source code. Please follow Google's Python Doc Style.
If you're adding/removing a module, you must update the nav key in mkdocs.yml.
Then export documentation as follows:
# install documentation dependencies
$ uv sync --group docs-offline --group docs-online --extra crypto-eth-addresses
# generate documentation
$ uv run python package/export TYPE # where TYPE is any of `doc`, `man` or `web`.
# doc - generates docs found here: https://nandgator.github.io/pyvalidators
# man - generates sphinx based manpages
# web - generates sphinx based web docsYou can preview the generated documentation:
# To preview the online documentation
$ uv run --group docs-online zensical serve
# To preview man pages
$ man docs/_build/man/validators.1
# To preview sphinx webpages
$ python -m http.server -d docs/_build/webYou must be familiar with semantic versioning and Python packaging.
-
Take a look at
CHANGES.md. They are generated with GitHub's releaser, and then modified to fit the shown style. -
Update the changelog. Version number must be updated in both
SECURITY.mdandsrc/validators/__init__.py. -
The final merge commit on the upstream (i.e. this repo) is tagged.
# syncing with upstream $ git pull upstream master $ git push # tagging that final merge commit before release $ GIT_COMMITTER_DATE=$(git log -n1 --pretty=%aD) git tag -a -m "vMAJOR.MINOR.PATCH" MAJOR.MINOR.PATCH # pushing tag to remote $ git push --tag $ git push upstream --tag
- To preview versioned docs, run
uv run mike serve(mikeis in thedocs-onlinedependency group). - Then (look at https://nandgator.github.io/pyvalidators/stable/)
- to publish stable docs run
mike deploy -p -u VERSION stableafter checking out to a stable tag name like0.28.3(note: documentVERSION = 0.29 if tag_name == 0.29.1). - to publish bleeding-edge docs run
mike deploy -p -u dev masterafter checking out to themasterbranch.
- to publish stable docs run
- This will deploy docs to the
gh-pagesbranch (see: https://github.com/python-validators/validators/tree/gh-pages/)
-
Run
./package/roll.sh(or./package/roll.ps1) to generate the man page and bothsdistandbdist(it needs uv and uses the lockeddocs-offlinedependencies). -
Install
twineusingpipxto upload package to PyPI.# publishing $ twine check dist/* $ twine upload dist/*
-
Create a GitHub release with the contents from the changelog. Upload the wheel from
dist/along with the shasum file generated with:# generate sha256sum $ sha256sum dist/validators-VERSION-py3-none-any.whl > dist/validators-VERSION-py3-none-any.whl.sha256
Thank your for taking interest in this library!