# hypermodern-python-tuto
Repo to follow the Claudio Jolowicz's [tutorial about Hypermodern Python](https://cjolowicz.github.io/posts/hypermodern-python-01-setup/).
It follows it until [this release](https://github.com/le-chartreux/hypermodern-python-tuto/releases/tag/v1.0.3). After this one, I started adding further tools, deleting some that I consider useless and replacing some others.
---
<table>
<tr>
<td>
<b>Package</b>
</td>
<td>
<a href="https://pypi.org/project/hypermodern-python-tuto/">
<img src="https://img.shields.io/pypi/pyversions/hypermodern-python-tuto.svg" alt="Supported Python Versions">
</a>
<a href="https://pypi.org/project/hypermodern-python-tuto/">
<img src="https://img.shields.io/pypi/v/hypermodern-python-tuto.svg" alt="PyPI version">
</a>
<a href="https://pypi.org/project/hypermodern-python-tuto/">
<img src="https://img.shields.io/pypi/dm/hypermodern-python-tuto.svg" alt="PyPI downloads">
</a>
</td>
</tr>
<tr>
<td>
<b>CI</b>
</td>
<td>
<a href="https://github.com/le-chartreux/hypermodern-python-tuto/actions?workflow=Tests">
<img src="https://github.com/le-chartreux/hypermodern-python-tuto/workflows/Tests/badge.svg" alt="Tests status">
</a>
<a href="https://hypermodern-python-tuto.readthedocs.io/">
<img src="https://readthedocs.org/projects/hypermodern-python-tuto/badge/" alt="Documentation status">
</a>
<a href="https://codecov.io/gh/le-chartreux/hypermodern-python-tuto">
<img src="https://codecov.io/gh/le-chartreux/hypermodern-python-tuto/branch/master/graph/badge.svg" alt="Coverage status">
</a>
</td>
</tr>
<tr>
<td>
<b>Code</b>
</td>
<td>
<a href="https://github.com/psf/black">
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code quality">
</a>
<a href="https://github.com/pre-commit/pre-commit">
<img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen" alt="pre-commit">
</a>
</td>
</tr>
</table>
---
## Table of contents
- [Overview](#overview)
- [Install](#install)
- [Use](#use)
- [Tools used](#tools-used)
- [Generic tools](#generic-tools)
- [Generic Python tools](#generic-python-tools)
- [Multi-purpose](#multi-purpose)
- [Setup](#setup)
- [Test](#test)
- [Linting](#linting)
- [Security](#security)
- [Formatting](#formatting)
- [Type checking](#type-checking)
- [Documentation](#documentation)
- [Specific Python tools](#specific-python-tools)
- [UI](#ui)
- [Communication](#communication)
- [Data validation](#data-validation)
## Overview
The app created is a CLI application that queries a random Wikipedia page and displays its title and summary.
## Install
```shell
pip install hypermodern-python-tuto
```
## Use
### Basic usage
Just run the following command:
```shell
hypermodern-python-tuto
```
### Other options
Look at the [documentation](https://hypermodern-python-tuto.readthedocs.io/).
## Tools used
### Generic tools
Tools that can be used in every development project, no matter if it's a Python project or not.
- [Codecov](https://about.codecov.io/), to mesure code coverage on repos. I let it in this project since it is already setup, but I don't think I will use it in other projects.
- [git](https://git-scm.com/), to manage versions of the source code.
- [GitHub](https://github.com/le-chartreux/hypermodern-python-tuto), to host the git repository and automate tasks with [GitHub Actions](https://docs.github.com/en/actions):
- [Release Drafter](https://github.com/marketplace/actions/release-drafter), to create release templates.
- [pre-commit](https://pre-commit.com/), to manage pre-commit hooks.
### Generic Python tools
Tools that can be used in every Python project, no matter its content.
#### Multi-purpose
- [nox](https://nox.thea.codes/en/stable/), to run tasks in multiple Python environments (like tests, linting, reformatting, etc.).
- [PyPI](https://pypi.org/), to install and publish Python packages.
- [poetry](https://python-poetry.org/), to make development and distribution easy (packaging, virtualization, dependencies, launching and publishing).
- [TestPyPI](https://pypi.org/), PyPI but for testing purposes.
#### Setup
- [pyenv](https://github.com/pyenv/pyenv), to manage Python versions.
#### Test
- [pytest](https://docs.pytest.org/en/latest/), a framework to write unit tests. Also used to run doctests.
- [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/), to mesure the code coverage (degree to which the source code of a program is executed while running its test suite).
- [pytest-mock](https://pytest-mock.readthedocs.io/en/latest/), to use the [unittest](https://docs.python.org/3/library/unittest.html) mocking in the pytest way.
#### Linting
- [Ruff](https://beta.ruff.rs/docs/), an extremely fast linter that support of all main linter rules.
#### Security
- [Bandit](https://bandit.readthedocs.io/en/latest/), to find security issues (used inside linting with [flake8-bandit](https://pypi.org/project/flake8-bandit/)).
- [Safety](https://pyup.io/safety/), to check if some packages are insecure.
#### Formatting
- [black](https://black.readthedocs.io/en/stable/), to format the code.
- [isort](https://pycqa.github.io/isort/index.html), to sort imports.
#### Type checking
- [mypy](https://mypy-lang.org/), the classic type checker.
#### Documentation
- [Read the Docs](https://readthedocs.org/), to host the documentation.
- [Sphinx](https://www.sphinx-doc.org/en/master/), the documentation tool used by the official Python documentation, with:
- [autodoc](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html), Sphinx official plugin to generate API documentation from the docstrings.
- [napoleon](https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html), Sphinx official plugin to allow compatibility with Google-style docstrings.
- [sphinx-autodoc-typehints](https://pypi.org/project/sphinx-autodoc-typehints/), Sphinx plugin to detect type hints in generated documentation.
### Specific Python tools
Tools to match specific needs of the projet.
#### UI
- [click](https://click.palletsprojects.com/en/8.1.x/), to create CLI applications.
#### Communication
- [requests](https://requests.readthedocs.io/en/latest/), to make HTTP requests.
#### Data validation
- [marshmallow](https://marshmallow.readthedocs.io/en/stable/), to serialize, deserialize and validate data.
I used [marshmallow](https://marshmallow.readthedocs.io/en/stable/) to follow the tutorial, but [pydantic](https://docs.pydantic.dev/) is more known, and I find it easier to use.
Raw data
{
"_id": null,
"home_page": "https://github.com/le-chartreux/hypermodern-python-tuto",
"name": "hypermodern-python-tuto",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10,<4.0",
"maintainer_email": "",
"keywords": "hypermodern",
"author": "le-chartreux",
"author_email": "le-chartreux-vert@protonmail.com",
"download_url": "https://files.pythonhosted.org/packages/c2/b5/64f2d2f0acbec507503d56e4ed4bff82bf131148dbab13b438dc470012c6/hypermodern_python_tuto-1.0.4.tar.gz",
"platform": null,
"description": "# hypermodern-python-tuto\n\nRepo to follow the Claudio Jolowicz's [tutorial about Hypermodern Python](https://cjolowicz.github.io/posts/hypermodern-python-01-setup/).\nIt follows it until [this release](https://github.com/le-chartreux/hypermodern-python-tuto/releases/tag/v1.0.3). After this one, I started adding further tools, deleting some that I consider useless and replacing some others.\n\n---\n\n<table>\n <tr>\n <td>\n <b>Package</b>\n </td>\n <td>\n <a href=\"https://pypi.org/project/hypermodern-python-tuto/\">\n <img src=\"https://img.shields.io/pypi/pyversions/hypermodern-python-tuto.svg\" alt=\"Supported Python Versions\">\n </a>\n <a href=\"https://pypi.org/project/hypermodern-python-tuto/\">\n <img src=\"https://img.shields.io/pypi/v/hypermodern-python-tuto.svg\" alt=\"PyPI version\">\n </a>\n <a href=\"https://pypi.org/project/hypermodern-python-tuto/\">\n <img src=\"https://img.shields.io/pypi/dm/hypermodern-python-tuto.svg\" alt=\"PyPI downloads\">\n </a>\n </td>\n </tr>\n <tr>\n <td>\n <b>CI</b>\n </td>\n <td>\n <a href=\"https://github.com/le-chartreux/hypermodern-python-tuto/actions?workflow=Tests\">\n <img src=\"https://github.com/le-chartreux/hypermodern-python-tuto/workflows/Tests/badge.svg\" alt=\"Tests status\">\n </a>\n <a href=\"https://hypermodern-python-tuto.readthedocs.io/\">\n <img src=\"https://readthedocs.org/projects/hypermodern-python-tuto/badge/\" alt=\"Documentation status\">\n </a>\n <a href=\"https://codecov.io/gh/le-chartreux/hypermodern-python-tuto\">\n <img src=\"https://codecov.io/gh/le-chartreux/hypermodern-python-tuto/branch/master/graph/badge.svg\" alt=\"Coverage status\">\n </a>\n </td>\n </tr>\n <tr>\n <td>\n <b>Code</b>\n </td>\n <td>\n <a href=\"https://github.com/psf/black\">\n <img src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Code quality\">\n </a>\n <a href=\"https://github.com/pre-commit/pre-commit\">\n <img src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen\" alt=\"pre-commit\">\n </a>\n </td>\n </tr>\n</table>\n\n---\n\n## Table of contents\n\n- [Overview](#overview)\n- [Install](#install)\n- [Use](#use)\n- [Tools used](#tools-used)\n - [Generic tools](#generic-tools)\n - [Generic Python tools](#generic-python-tools)\n - [Multi-purpose](#multi-purpose)\n - [Setup](#setup)\n - [Test](#test)\n - [Linting](#linting)\n - [Security](#security)\n - [Formatting](#formatting)\n - [Type checking](#type-checking)\n - [Documentation](#documentation)\n - [Specific Python tools](#specific-python-tools)\n - [UI](#ui)\n - [Communication](#communication)\n - [Data validation](#data-validation)\n\n## Overview\n\nThe app created is a CLI application that queries a random Wikipedia page and displays its title and summary.\n\n## Install\n\n```shell\npip install hypermodern-python-tuto\n```\n\n## Use\n\n### Basic usage\n\nJust run the following command:\n\n```shell\nhypermodern-python-tuto\n```\n\n### Other options\n\nLook at the [documentation](https://hypermodern-python-tuto.readthedocs.io/).\n\n## Tools used\n\n### Generic tools\n\nTools that can be used in every development project, no matter if it's a Python project or not.\n\n- [Codecov](https://about.codecov.io/), to mesure code coverage on repos. I let it in this project since it is already setup, but I don't think I will use it in other projects.\n- [git](https://git-scm.com/), to manage versions of the source code.\n- [GitHub](https://github.com/le-chartreux/hypermodern-python-tuto), to host the git repository and automate tasks with [GitHub Actions](https://docs.github.com/en/actions):\n - [Release Drafter](https://github.com/marketplace/actions/release-drafter), to create release templates.\n- [pre-commit](https://pre-commit.com/), to manage pre-commit hooks.\n\n### Generic Python tools\n\nTools that can be used in every Python project, no matter its content.\n\n#### Multi-purpose\n\n- [nox](https://nox.thea.codes/en/stable/), to run tasks in multiple Python environments (like tests, linting, reformatting, etc.).\n- [PyPI](https://pypi.org/), to install and publish Python packages.\n- [poetry](https://python-poetry.org/), to make development and distribution easy (packaging, virtualization, dependencies, launching and publishing).\n- [TestPyPI](https://pypi.org/), PyPI but for testing purposes.\n\n#### Setup\n\n- [pyenv](https://github.com/pyenv/pyenv), to manage Python versions.\n\n#### Test\n\n- [pytest](https://docs.pytest.org/en/latest/), a framework to write unit tests. Also used to run doctests.\n- [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/), to mesure the code coverage (degree to which the source code of a program is executed while running its test suite).\n- [pytest-mock](https://pytest-mock.readthedocs.io/en/latest/), to use the [unittest](https://docs.python.org/3/library/unittest.html) mocking in the pytest way.\n\n#### Linting\n\n- [Ruff](https://beta.ruff.rs/docs/), an extremely fast linter that support of all main linter rules.\n\n#### Security\n\n- [Bandit](https://bandit.readthedocs.io/en/latest/), to find security issues (used inside linting with [flake8-bandit](https://pypi.org/project/flake8-bandit/)).\n- [Safety](https://pyup.io/safety/), to check if some packages are insecure.\n\n#### Formatting\n\n- [black](https://black.readthedocs.io/en/stable/), to format the code.\n- [isort](https://pycqa.github.io/isort/index.html), to sort imports.\n\n#### Type checking\n\n- [mypy](https://mypy-lang.org/), the classic type checker.\n\n#### Documentation\n\n- [Read the Docs](https://readthedocs.org/), to host the documentation.\n- [Sphinx](https://www.sphinx-doc.org/en/master/), the documentation tool used by the official Python documentation, with:\n - [autodoc](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html), Sphinx official plugin to generate API documentation from the docstrings.\n - [napoleon](https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html), Sphinx official plugin to allow compatibility with Google-style docstrings.\n - [sphinx-autodoc-typehints](https://pypi.org/project/sphinx-autodoc-typehints/), Sphinx plugin to detect type hints in generated documentation.\n\n### Specific Python tools\n\nTools to match specific needs of the projet.\n\n#### UI\n\n- [click](https://click.palletsprojects.com/en/8.1.x/), to create CLI applications.\n\n#### Communication\n\n- [requests](https://requests.readthedocs.io/en/latest/), to make HTTP requests.\n\n#### Data validation\n\n- [marshmallow](https://marshmallow.readthedocs.io/en/stable/), to serialize, deserialize and validate data.\n\nI used [marshmallow](https://marshmallow.readthedocs.io/en/stable/) to follow the tutorial, but [pydantic](https://docs.pydantic.dev/) is more known, and I find it easier to use.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Repo to follow the Claudio Jolowicz's tutorial about Hypermodern Python (https://cjolowicz.github.io/posts/hypermodern-python-01-setup/)",
"version": "1.0.4",
"split_keywords": [
"hypermodern"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5d9777bb9a66dceafa948341704e97575f9fd71b53f2ab53294fbc70f1d9aa9c",
"md5": "bf2160e7a85697c94aff590e4882c01f",
"sha256": "289d7cd937e6cfdced220225b98db15ea82362ad0107548f186b32f345609127"
},
"downloads": -1,
"filename": "hypermodern_python_tuto-1.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bf2160e7a85697c94aff590e4882c01f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10,<4.0",
"size": 9031,
"upload_time": "2023-04-10T20:20:46",
"upload_time_iso_8601": "2023-04-10T20:20:46.547525Z",
"url": "https://files.pythonhosted.org/packages/5d/97/77bb9a66dceafa948341704e97575f9fd71b53f2ab53294fbc70f1d9aa9c/hypermodern_python_tuto-1.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c2b564f2d2f0acbec507503d56e4ed4bff82bf131148dbab13b438dc470012c6",
"md5": "efc6012abcf3fdf2e86b3c5b0c782a83",
"sha256": "262e151bd9f74279edb15e35965d586d08870cb8e10f187734f69e2c449a2b06"
},
"downloads": -1,
"filename": "hypermodern_python_tuto-1.0.4.tar.gz",
"has_sig": false,
"md5_digest": "efc6012abcf3fdf2e86b3c5b0c782a83",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10,<4.0",
"size": 11162,
"upload_time": "2023-04-10T20:20:48",
"upload_time_iso_8601": "2023-04-10T20:20:48.282077Z",
"url": "https://files.pythonhosted.org/packages/c2/b5/64f2d2f0acbec507503d56e4ed4bff82bf131148dbab13b438dc470012c6/hypermodern_python_tuto-1.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-10 20:20:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "le-chartreux",
"github_project": "hypermodern-python-tuto",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "hypermodern-python-tuto"
}